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>

热门相关:资本大唐   盛宠之嫡女医妃   最牛兵王   罪犯们   身后那些事儿