标准一句话木马

解题过程

1
2
3
4
5
6
7
<?php
//flag一分为3,散落在各处,分别是:xxxxxxxx、xxxx、xxx。
highlight_file(__FILE__);

//标准一句话木马~
eval($_POST[1]);
?>

由题目可知本题考查的是标准一句话木马。
搜索有关一句话木马的资料,发现其中核心是对’eval’发送’post’请求,来执行php代码

所以我们首先查阅关于post的相关资料,记录与get请求的不同

从w3schools得到的标准答案的区别如下:
GET在浏览器回退时是无害的,而POST会再次提交请求。
GET产生的URL地址可以被Bookmark,而POST不可以。
GET请求会被浏览器主动cache,而POST不会,除非手动设置。
GET请求只能进行url编码,而POST支持多种编码方式。
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
GET请求在URL中传送的参数是有长度限制的,而POST没有。
对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
GET参数通过URL传递,POST放在Request body中

重点在于post主要放在request中传递参数,下载postman,利用phpinfo测试是否可以利用进行任意代码执行,测试发现成工,我们利用system函数调用shell命令进行flag查找。

总结flag可能出现的三个位置:

1.文件某位置
通过ls命令查看文件,得到如下界面

获取flag文件,接下来查看flag文件中的内容还获取flag字段,通过执行cat flag.php命令发现字段出现被过滤的情况。通过测试空格,cat命令等字段发现并没有出现常规过滤,考虑到可能是对flag进行了处理

,于是采用base64将文件内容进行加密,绕过过滤,成功得到一部分flag


2.在根目录中寻找flag
通过ls命令查找根目录下的文件,发现flag2

同样根据base64进行加密再解码

3.在环境变量中寻找flag
通过查找环境变量的使用方法,查看本题的环境变量、

本题三个flag全部找到