练习12
Abstract: 练习宽字节注入和请求头 IP
注入
Table of Contents
宽字节注入
打开 burpsuite
抓取数据包
在 username
后面加上 %df%27
,请求页面,发现没有变化,主要是因为 POST
传输不需要 URL
解码,点击 Hex
,找到 username
的位置,把 1
后面的字符改成 df
和 27
返回查看数据,把多余的字符删除。
点击 Go
,查看 Response
,发现页面变化了,即找到了注入点。
尝试使用时间注入,修改 Request
如下,
点击 Go
发现页面,没有延迟。很可能是 .ova
文件导入过来,数据库并没有数据造成的,在网页上注册一个用户,再次运行,可以发现响应延迟了 1s
左右。
删除多余的 *
,再在我们想要注入的地方加入 *
,右击保存文件。
接下来,使用 sqlmap
测试。
1 | sqlmap -r Desktop\wideType.txt # wideType.txt 存放的是HTTP响应的数据 |
可以发现漏洞,但是最新版的 sqlmap
在脱裤时,会出现问题。
1 | sqlmap -r "C:\Users\han\Desktop\wideType.txt" --dbs |
请求头 IP
注入
数据库中更新用户 IP
1 | # 更新 IP |
想要注入,首先得进行前 '
的闭合和注释掉后 '
1 | UPDATE USER SET last_loginip='8.8.8.8' /*此处插入想要执行的语句*/ #' WHERE `username`='zhang'; |
1 | UPDATE USER SET last_loginip='8.8.8.8' and WHERE id=1 and sleep(5) #' WHERE `username`='zhang'; |
使用 Modify Headers
添加 X-Forwarded-For
设置为 8.8.8.8'
,先注册一个用户。用户名 123
,密码 123
。
用 burpsuite
抓取数据包
在 X-Forwarded-For
后面补充 where 1=1 and sleep(5)
,点击 Go
等待 5s
后,页面有响应。由此可找到注入点,把 where id=1 and sleep(5)
改成 where id = 1 *
,删除请求其他 *
号,保存到文件里。开始用 sqlmap
执行 payload
。
把注入点修改为 where 1=1 or sleep(5)
页面没有延迟,原因是 1=1 or sleep(5)
短路原理,故 sleep(5)
压根就没有执行。
使用 where 1=1 and sleep(5)
,我们可以看出来延迟了将近 15s
。关于 1=1 or 条件
和 1=2 and 条件
的短路原理,在前几篇文章写过,但真正在实战中确实还是容易忘掉。
1 | sqlmap -r "C:\Users\han\Desktop\ip.txt" |
1 | (custom) HEADER parameter 'X-Forwarded-For #1*' appears to be 'MySQL >= 5.0.12 AND time-based blind (query SLEEP)' injectable |
可以使用 --technique T
指定时间注入,缩短时间。
1 | sqlmap -r "C:\Users\han\Desktop\ip.txt" --technique T --dbs |
问题与总结
关于 SQLmap
自定义注入点的思考:
- 先通过
burpsuite
抓取数据包,尝试找到注入点。 - 找到注入点后,分析使用布尔盲注还是时间盲注,在
burpsuite
中的Repeater
模块中通过在请求内容中增加SQL
语句尝试。 - 在注入点中,把添加
SQL
语句中能够做修改的地方改写成*
。- 在
老司机
例子中,定位到username
存在宽字节注入,后面写上or if((select 1 and 1=1), sleep(3), 1)
发现响应延迟,那payload
该放在那呢?首先能够确定的是,必然在select 1 and 1=1
这句话里面,if
关键字第一个表达式必须是布尔型,所以直接在1=1
加*
号即可。 - 在
留言板
例子中,通过对SQL
语句的猜想,可以知道要在X-Forwarded-For: 8.8.8.8'
后面加上where 1=1 and sleep(5) #
在本例中,可以修改为where 1=1*
即可。
- 在