polar-ctf 简单(web)
目录
1. 简单Rce
看到题目代码过滤了一些关键字符cat tac 和system都被过滤了,不能再去使用。但是可以利用vi命令进行读取flag
执行外部命令函数:system()、passthru()、exec()

2. seek flag
进入题目找找flag。在cookie中将id改成1,得到了第一段flag

在其get请求包中看到第二段flag

dirsearch进行目录扫描,看到有一个robots.txt,访问后得到第三段flag

3. jwt
进入是一个登录界面,先登录再注册,进入主页后并未得到有用信息

抓包后看到一个hint:flag-is-admin-password,得知username为admin

先注册一个新用户,注册成功就去登录
抓包看到JWT,拿去解密,需要对称密钥,在kali中利用jwt-cracker进行爆破解密,解密后得知其密钥为SASY
./jwtcrack

进行解密,将jwt中的代码解码然后更换username和对称密钥,然后再进行编码,将重新编码后的代码进行更换,发包,得到falg




4. $$
$GLOBALS:用于访问所有全局变量(来自全局范围的变量),即可以从PHP脚本中的任何范围访问的变量。

5. XFF

抓包修改X-Farded-For:1.1.1.1,然后发送看到flag

6. GET-POST
先传id

再传post

7. 被黑掉的站

在页面中并无得到有用信息
在kali中利用dirsearch -u 网址,扫描出两个成功发送的包,index.php.bak shell.php

访问index.php.bak,得到一个像是密码字典的文件

访问shell.php,看到一个登录框,和前面给的刚好呼应上了
利用bp进行弱口令爆破

完成后得到登陆密码(nikel),登录后成功得到flag


8. rce1
?ip=127.0.0.1|ls

空格被过滤了,用${IFS}进行绕过
?id=127.0.0.1|cat${IFS}fllllaaag.php

查看网页源代码得到flag

9. 签到题

发现提交按钮不可以提交,然后修改前端的提交值

随便输入123,然后提示提交ilovejljcxy就可以得到flag

再次修改然后输入ilovejljcxy,发现有字数限制,再修改字数限制

最后得到flag

10. upload
查看网页源代码,看到?action=show_code,访问后看到php等许多文件后缀被过滤了


选择一句话木马图片上传

利用bp抓包,将文件后缀名利用双写绕过改成php后缀,发送请求,成功更换

利用蚁剑进行连接,成功看到flag

11. 机器人

利用Kali中dirsearch进行扫描,查到了一个/robots.txt文件

访问后看到flag,但发现只有一半,尝试提交果然不对
Disallow是一个目录,尝试访问但访问不了

利用dirsearch扫描看到了/27f5e15b6af3223f1176293cd015771d/flag.php文件
访问后看到flag后半段,前后两段拼在一起得到flag


12. 干正则
参数为id,包含flag.php文件
flag .php 被过滤

pyload:?id=a[0]=www.polarctf.com&cmd=|ls;

pyload:?id=a[0]=www.polarctf.com&cmd=|cat `ls`; 查看源代码后看到flag


13. 覆盖
代码说用GET传参(id),需要a[0]=www.polarctf.com
$ip = $_get['cmd'] 获取名为cmd的 GET 参数值,并赋给变量$ip
?id=a[0]=www.polarctf.com&cmd=;cat fla*


14. debudao
查看网页源代码看到一个flag,提交后是错误的

最后在cookie中找到真的flag

15. 审计
在url中输入?xxs=240610708,md50e绕过

16. 井字棋

在控制台中输入declareWinner("您赢了"!);然后弹窗弹出flag

17. button
出现一个“点击我"的按钮,但是并不能点击到

查看了一下网页源代码,看到一个js文件,说要点击好多9999次,很显然这是不可能的,看到下面看有一个方法查看 flag,访问proxy.php?file=flag,访问后是空白页面,查看网页源代码看到flag

18. 来个弹窗
利用:<script>alert('xss')</script>正常提交,但并没有显示,可能被过滤了


利用双写绕过<script>alert('xss')</sscript>,攻击成功

得到一副图片,说flag就是该人物名称MD5加密,上网查找后用MD5加密得到flag

19. php very nice
php反序列化
当PHP脚本执行完毕或对象被销毁时,_destruct() 自动执行
如果$sys是恶意代码就会被执行

构造php代码
设置要执行的系统命令
创建Example对象
序列化对象并输出

payload:?a=O:7:"Example":1:{s:3:"sys";s:13:"system('ls');";}
出现两个目录

利用php伪协议读取一下(?)
payload:O:7:"Example":1:{s:3:"sys";s:69:"include('php://filter/read=convert.base64-encode/resource=flag.php');";}

解码得到flag
20. 狗黑子的RCE
过滤了很多命令和符号
有两个参数gouheizi1和gouheizi2

原始输入中的 'gouheizi' 会被移除
如果 POST gouheizi2=ggouheiziouheizihi,处理后变成 ghi,不等于 "gouheizi"
要使处理后等于 "gouheizi",原始输入必须是 "gouheizi"(因为移除 'gouheizi' 后为空)或其他包含 'gouheizi' 的组合
payload如下,过滤字符用l\s进行过滤,执行后再根目录下看到flag.php查看php文件
c\at /fl\ag.php


21. 命运石之门
登录框α线,随便试试,不行,还看不到验证码

查看网页源代码,得到一串编码,解码说验证码是否好使不重要


目录扫描,扫到个password.txt文件,这就应该是爆破了

然后爆破出密码是hunangleiSAMA0712,成功到达第二个β线

接着爆破,得到密码huan9le1Sam0,得到flag



22. rce命令执行系统
尝试输入命令,但貌似都被过滤了,都不能进行正常的输出


看看环境变量是否可以输出,尝试输入env,能成功输出,看到有flag,但是它是个假的

进行目录扫描,扫到一个flag.txt文件,访问看到了提示
txt > php,l > 1,这像是让我们将文件名称进行改变一下,改变一下进行访问


得到另一个提示,要给XOR_KEY进行传参
?XOR_KEY=Polar,成功执行,得到真正的flag

23. uploader
<?php $sandBox = md5($_SERVER['REMOTE_ADDR']);//生成专属目录名:获取访问者的IP地址,并用MD5加密 if(!is_dir($sandBox)){ mkdir($sandBox,0755,true);//要创建的目录名,目录权限0755,true表示允许递归创建 if($_FILES){//判断是否上传文件 move_uploaded_file($_FILES['file']['tmp_name'],$sandBox."/".$_FILES["file"]["name"])// $_FILES['file']['tmp_name']:PHP自动保存的上传文件临时路径 echo "上传文件名: " . $_FILES["file"]["name"] . "<br>"; echo "文件类型: " . $_FILES["file"]["type"] . "<br>"; echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>"; echo $sandBox; } highlight_file(__FILE__); $sandBox."/".$_FILES["file"]["name"]:目标路径(专属目录 + 原文件名),这个很重要!!
只给出了上传的代码,没有上传的方式,需要自己写一个上传的html页面
上传一句话木马的php文件,之后进行访问,记得加上专属目录名(用md5加密的访问者的IP地址)。然后进行命令执行
<!DOCTYPE html> <html> <body> <form action="http://70c5aad8-a20c-4181-80c0-8bd102f6233c.www.polarctf.com:8090/" enctype="multipart/form-data" method="post" > <input name="file" type="file" /> <input type="submit" type="submit" /> </form> </body> </html> 

24. bllbl_ser1
题目给了一串反序列化代码

<?php class bllbl { public $qiang;//我的强 function __destruct(){ $this->bllliang(); } function bllliang(){ $this->qiang->close(); } } class bllnbnl{ public $er;//我的儿 function close(){ eval($this->er); } } if(isset($_GET['blljl'])){ $user_data=unserialize($_GET['blljl']); } ?>一共就两个类,构造一下代码
<?php class bllbl{ public $qiang; } class bllnbnl{ public $er; } $a=new bllbl(); $b=new bllnbnl(); $a->qiang=$b; $b->er='system("ls /");'; echo serialize($a); ?>

25. 1ncIud3


在该题目中,当你传入../时,会将其转换成空
当 PHP 把这个路径传给操作系统时,系统会按上面的规则规范化,最终变成 ../../test.php,实现了目录穿越。PHP 拼接路径后传给系统,系统规范化路径传入的内容就会变成../../../../f1a9,从而成功读取

26. 投喂


27. 简单的导航站

网页源代码中得到密码

注册,登陆下

产看用户列表,有代码,用数组进行绕过,得到用户名字符串,需要爆破(在文件管理中的登录框进行爆破)

得到账号为P0la2adm1n,登陆进去是一个上传页面,没有过滤,直接上传php的木马文件,然后蚁剑进行连接
上传路径为/uploads/上传的文件名

看到很多flag

在flag验证框中进行flag验证,爆破


28. background
d和p一个表示执行的命令,一个表示执行的语句,然后是要用POST方法去获取change_background.php文件

payload:d=cat&p=/flag

29. 俄罗斯方块

要是直接玩也是可以的,就是耗时太久了
直接在控制台进行分数修改,让score=10,然后玩一把就可以得到提示,但是这个提示就是一串文字

又查看js代码看到有一个获取文件,get_squirrt1e.php,访问后就可以得到flag


30. 代码审计easy

<?php $page = 'hello.php'; if (isset($_GET['page'])) { $page = $_GET['page']; } $base_dir = __DIR__ . '/pages/'; $target = $base_dir . $page; if (preg_match('/https?:\/\//i', $page)) { echo "远程 URL 不允许呦。"; exit; } if (file_exists($target)) { $content = file_get_contents($target); echo "<pre>" . htmlspecialchars($content, ENT_QUOTES|ENT_SUBSTITUTE, 'UTF-8') . "</pre>"; } else { if (@file_exists($page)) { $content = file_get_contents($page); echo "<pre>" . htmlspecialchars($content, ENT_QUOTES|ENT_SUBSTITUTE, 'UTF-8') . "</pre>"; } else { echo "No!: " . htmlspecialchars($page); } }
这题flag在根目录

31. VIP
抓包,修改vipStatus的值,no修改成yes

32. white
是一个命令执行的界面
ls pwd whoami date echo base64 sh 命令包含不允许的内容,匹配模式: /[;&`$\'\"<>?*[\]{}()#@!%]/禁止危险函数(如 system、eval、tac、cat 等)命令包含不允许的内容,匹配模式: /\b(etc|proc|dev|bin|sbin|usr|home|flag)\b/i在过滤的命令中没有过滤管道符(|),这是可以利用的一个点。管道符拼接

echo bHM= 输出字符串 bHM=(这是 ls 的 Base64 编码结果)
base64 -d 对输入的 Base64 字符串解码(bHM= 解码后得到 ls)
sh 调用 Shell 执行输入的命令(即执行 ls,列出当前目录文件
也可以用反斜杠\来进行绕过flag关键字的过滤

33. help
直接查找js文件就可以了

34. cookie欺骗2.0

登录成功然后抓包,修改user,发包,认证失败。那可能后面的值也要修改

hfrel拿去解码,发现时rot13加密,结果是user1。同样将admin进行rot13加密,替换上去,发包得到flag



