bloodpack

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

记一次web做题笔记:写shell

image
打开靶机查看源码

点击查看代码
<?php
/*

PolarD&N CTF

*/

highlight_file(__FILE__);

file_put_contents($_GET['filename'],"<?php exit();".$_POST['content']);

?>

解题方式
通过GET传参filename和POST传参content绕过file_put_contents()和exit()
.号用于拼接字符串

这里贴一下file_put_contents()函数的详解
image
也就是说,file_put_contents()会在我们要执行的代码段插入<?php exit();阻断代码执行
一开始我是想通过常规伪协议php://input去做的,但是因为exit()阻断,只能放弃。



之后查看其他师傅的wp发现了一些方法
在file_put_contents()中exit()的绕过技巧
(使用php://filter伪协议)
1.base64加密
利用base64解码,将exit()代码解码成乱码,使得php引擎无法识别
image
但同时因为base64在解码的时候是将4个字节转化为3个字节,又因为死亡代码只有phpexit()参与了解码,所以补上一位才可以完全转化
image
(上图除去a的base64加密前代码)
之后连接蚁剑getshell成功,拿到flag(看到其他师傅说也可以直接访问shell.php)
2.利用filter伪协议的多种过滤器过滤exit()
(第一次听这种过滤器,长知识了)
Strip_tags可以去除xml标签代码,php的这种格式算是xml代码,所以我们只需要构造闭合exit(),这样就可以去除掉了,后面接上编码过的内容,编码的内容不会被清除
image
image

参考文献:
https://blog.csdn.net/weixin_43296565/article/details/131066567?ops_request_misc=%257B%2522request%255Fid%2522%253A%25227ae7d3dd8545a301a00070092f2c7570%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=7ae7d3dd8545a301a00070092f2c7570&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~rank_v31_ecpm-11-131066567-null-null.142v102pc_search_result_base4&utm_term=polarctf%E9%9D%B6%E5%9C%BAweb%E5%86%99shell&spm=1018.2226.3001.4187

posted on 2025-04-16 21:02  我靠我血包呢  阅读(6)  评论(0)    收藏  举报