rce临时文件上传[RCE1]P8
rce临时文件上传[RCE1]P8
/[A-Za-z0-9!~^|&]+/i 匹配了我能想到的所有绕过方法,想到临时文件上传,是否可以执行/tmp/?????????这个文件呢
/tmp/????????? 此文件是php的一个默认临时文件,文件名是随机的,如果php.ini没有设置upload_tmp_dir的时候,默认会读写系统的临时文件目录,(Windows 默认为 C:/windows/temp,Linux 为 /tmp)。
但是是当向服务器上任意php文件以multipart/form-data方式提交请求上传数据时,才会产生临时文件,可以通过phpinfo.php的信息泄露获得临时文件的路径,便可以让我们构造payload。
php post上传:创建临时文件 > 调用相关php脚本 > 在phpinfo中回显文件信息 > 删除临时文件
在linux系统中./可运行可执行文件,在文件中执行一个运行shell脚本的解释器,解释器有很多,例如:
#!/bin/sh
#!/bin/bash
#!/usr/bin/perl
#!/usr/bin/tcl
#!/bin/sed -f
#!/usr/awk -f
./shell的时候相当于/bin/bash shell
还有很多有意思的用法
https://zhuanlan.zhihu.com/p/666028747
临时文件内容:
#!/bin/sh
id
执行临时文件命令
./tmp/????????? 构造payload >> ./???/????????? >> ./???/????????[@-[]
由于/???/?????????无法精准匹配,但是这个临时文件的特点是大小写字母混合随机生成的,所以通过找到一个表示“大写字母”的glob通配符,来实现精准匹配。
glob的通配符我们常用的有(* ? ** []) 在[1-9]中golb支持里面表示一个范围,可以使用ascii找到大写字母范围的一个字符,大写字母的范围位于"@"和[之间,并且不分字符前后顺序。
构建数据包:
需要构造一个post上传文件的数据包,从网上随便找一段html的文件上传代码,然后抓包拦截,把目标ip修改一下就好了。
我这里代码是 multipart/form-data 的方式提交请求上传数据的,别的我没有试过不知道有没有问题,注意在multipart/form-data方式中,作为分割使用的boundary字符串比定义处前面多倆--
附上html代码:
<html>
<head></head>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" /><br />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>