文中通过详细讲解SQLMAP工具,更加深入的掌握SQLMAP用法;文中内容全由个人理解编制,若有错处,大佬勿喷,个人学艺不精;本文中提到的任何技术都源自于靶场练习,仅供学习参考,请勿利用文章内的相关技术从事非法测试,如因产生的一切不良后果与文章作者无关。
sqlmap基础详解
sqlmap是一个开源的渗透测试工具,它可以自动化检测和利用SQL注入漏洞并接管数据库服务器。它有一个强大的检测引擎,许多适合于终极渗透测试的良好特性和众多的操作选项,从数据库指纹、数据获取到访问底层文件系统、执行操作系统命令。
sqlmap支持六种不同的注入方式:
- B:Boolean-basedblindSQLinjection(布尔型注入)
- E:Error-basedSQLinjection(报错型注入)
- U:UNIONquerySQLinjection(可联合查询注入)
- S:StackedqueriesSQLinjection(可多语句查询注入)
- T:Time-basedblindSQLinjection(基于时间延迟注入)
- Q:InlineSQLInjection(内联注入)
通过命令可以看出详细的帮助文档:
sqlmap -hh
常用命令
get方式
sqlmap -u http://xxxx.com/index.php?id=1 -v 1
-u 等同于–url,后面则填写url地址;-v表示输出信息的详细程度级别,最低1,最高6。
sqlmap -u "http://192.168.1.6/06/vul/sqli/sqli_str.php?name=1&submit=%E6%9F%A5%E8%AF%A2" -v 1
如果url中有&这种符号,则需要使用引号把url括起来。
从图中我们可以看出上面这条url的payload可以布尔、报错、延迟、联合这四种。
sqlmap -u "http://192.168.1.6/06/vul/sqli/sqli_str.php?name=1&submit=%E6%9F%A5%E8%AF%A2" -v 3 --flush-session
有的时候,我们可以第一次执行被拦截或者报错后,这执行的结果就会被存放在缓存中,所以当我们第二次需要从头开始执行的时候,则需要使用上面的命令来清空缓存:
从图中我们可以看出使用了-v 3后,在我们的执行过程中则有详细的payload。
- 0:只显示Python回源(tracebacks),错误(error)和关键(criticle)信息。
- 1:同时显示信息(info)和警告信息(warning)(默认为1)
- 2: 同时显示调试信息(debug)
- 3:同时显示注入的有效载荷(payloads)
- 4:同时显示http请求
- 5:同时显示http响应头
- 6:同时显示http响应内容
当我们在执行过程中,会让你去手动去进行判断Y/N,我们同样可以使用命令来进行直接默认选择:
sqlmap -u "http://192.168.1.6/06/vul/sqli/sqli_str.php?name=1&submit=%E6%9F%A5%E8%AF%A2" --batch -v 2 --flush- session
我们同样可以从文件中加载http请求测试:
sqlmap -r url.txt #url.txt中就是http请求包
这里的http请求包则就可以保存为url.txt。
批量多个目标扫描:
sqlmap -m urls.txt #多个目标
post方式
我们同样可以使用–data参数来进行提交测试:
sqlmap -u http://192.168.1.6/06/vul/sqli/sqli_id.php --data="id=1&submit=%E6%9F%A5%E8%AF%A2"
在url的连接符中除了&,还会有;,当出现这个的时候,我们就需要使用参数–param-del来进行分割。
这里利用;就可以对query和id这两个值来进行检测。
sqlmap.py -u "http://www.target.com/vuln.php" --data="query=foobar;id=1" --param-del=";"
cookie方式
这里我们可以看出是需要302跳转的,所以我们需要假如cookie,否则就算有注入也无法进行检测:
sqlmap -u "http://192.168.1.6/01/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=ltqiab34rccs3lbfv8q009tdr6" -v 1
可以看出这样就可以没有302跳转选项:
但我们通常对cookie进行检查,则只需要提高等级即可, 而且也不用在这向我们上面这样复杂去添加,因为一般情况下,在我们的http请求包中都会包含cookie,所有只需要把http请求包来进行检测就可以了。
当一般如果带php,通常基本是mysql组合,那么我们同样就可以指定数据库,因为如果我们不指定的话,sqlmap默认会每种数据库进行测试。
sqlmap -u "http://192.168.1.6/06/vul/sqli/sqli_str.php?name=1&submit=%E6%9F%A5%E8%AF%A2" -v 1 --dbms mysql