刚学到了一种新的注入方法,在此记录分享以便加深记忆。
是实验吧里的一道sql注入题,在本文中,用两种方法来解这道题:
1.HPF(HTTP Parameter Fragment)
2.exp()报错注入
先来说HPF(http分割注入),首先看这道题 题目地址
查看源码我们发现:
根据题目要求,应该是post注入,然而没有登陆框,我们先通过hackbar按照要求传入username和password参数试试。
提示login failed ,说明我们的思路是没错的,接下来就是在这两个参数中寻找输入点,分别试了username=1'&password=1和username=1&password=1',发现都报错,说明这两个参数都存在注入点。接下来经过简单的测试发现,该题过滤了#-:=字符,接下来尝试哪些报错函数可用,发现当username参数后面加括号时提示User name unknow error,而password参数后加括号则提示Login failed。说明username参数过滤了(),且username参数后报错注入的函数并没有过滤,而在password参数后面只能执行exp()函数。所以我们首先通过http分割注入的方法来解这道题(由于我的hackbar有问题我就转移到burp中来做了)
查询数据库发现名字为 error_based_hpf ,说明作者的意图就是要求利用http分割注入。接下来就是查询表,字段,和flag了。由于过滤了 “=”,所以我们采用正则的方式来绕过,即利用regexp。
利用exp()进行报错注入:
由于该题要利用正则来代替“=”,所以作者并没有过滤掉exp()函数,因此导致我们可以在password参数后直接利用exp()函数进行getflag。具体就不多说了,直接看结果。
看别人的wp学习了新的姿势,其实还可以利用盲注getflag,但是由于本题过滤了substr,mid等等截取字符串的函数,所以只能用正则regexp配合$从后向前盲注,比较麻烦我就不说了。