前言:凡是直接将数据带入数据库查询的,都有可能会导致sql注入。
后台服务器存储着cooike,XFF头的信息,当我们每次发包与后台交互时,后台就会将这我们的数据带入数据库中查询,就会造成Cooike注入,XFF注入。
虽然题目好像出了点问题,但不妨碍我们学习。
目录
xff注入
题目链接:http://www.whalwl.work:8010/
进入之后直接用bp抓包,放在repeater(重复)模块
这样抓包居然没看到XFF头,看了别人的write up怎么都有的啊?
没办法,自己加一个呗。
加了个单引号报错,说明存在注入。 (到这里其实就可以sqlmap跑了)
手注
怕有些同学可能不熟悉,那就像我们正常手注来几个步骤。其实有注入点后,方法都是一样的。
二分法求得注入字段为5.
select 1,2,3,4,5 找到可注入字段
为2,3
接下来正常手注是能得到结果的。给大家看一下结果,因为懒不愿意一步一步找(所以先用了sqlmap 跑出来了表和字段名)
sqlmap
抓包,添加一个X-Forwarded-For头,然后保存为,1.txt(我的是在kail的桌面)
xff头使用sqlmap注入(心血来潮的分享)_HolicU的博客-CSDN博客_添加xff头
注意这里X-Forwarded-For内容改为 * 提示sqlmap这里为注入点(话说上面的哥们挺机智的,哈哈)
(edg㉿EDG)-[~/桌面]
└─$ sqlmap -r 1.txt --dbs
跑出数据库
估计在xff这个数据库中 ,也不墨迹。--dump输出。
sqlmap -r 1.txt -D xff --dump
Cooike注入
地址Cookie注入
这道题也有点离谱,做这道题的时候发现Cooike这个字段表。
结果再做就给我整没了,怎么抓包都抓不到cooike。
学着上面的方法加一个 cookie字段,试着注入,咋样都不回显?
手注
这又到考验我们的时候了(其实按照正常方法和上面的XFF手动注入是能得到结果的,但是这里题目又又又出现了问题,导致我和别人的write up 使用同样的操作,得不到结果)
sqlmap命令
既然存在注入的话,如果它只是不会显的话,考虑(报错注入??考点都不一样好么,又不是CTF)那肯定使用sqlmap 跑
方法一
那么用上面xff的老方法跑其实也行的。(下图复制到1.txt)
sqlmap -r 1.txt -dbs
方法二
sqlmap -u http://www.whalwl.work:8009/user.php? --cookie "id=1" --dbs
按照这个方法也能跑出
sqlmap -u http://www.whalwl.work:8009/user.php? --cookie "id=1" -D cookie -T this_flag -dump
最后结果:
防御方法:对于所有sql注入通用
1.预编译(简单又有效的方法)PreparedStatement
采用预编译语句集,它内置了处理SQL注入的能力,只要使用它的setXXX方法传值即可
2.使用正则表达式过滤传入的参数
存在绕过的可能
现在sql注入已经非常少了,虽然危害大,但是防御简单
本人水平有限,欢迎评论区指出不足。