php中的截断绕过姿势

1、%00截断

这个只有php <= 5.3的才有。高的就不行了。所以就先不试了。(懒得下php5.3了= =)大概就是如下例:

test.php%00.jpg

这是程序就会去掉%00后面的字符串。所以程序读取时候就变成了

test.php

2、0x00截断

原理是,程序读取文件名时。遇到0x00。就认为文件名结束了。因为0x00就是字符0.也就相当于false和空。类似于c语言读取字符串遇到\0认为是字符串结束一样。

 

我们来测试一下。我们做好一个php文件,用来打印上传文件的信息。

接着上传一个后门文件test.php.jpg

通过burp截包。

我们到hex那里去看十六进制。找到上传的文件名。之后就去找文件名中的”.”(点)。点的十六进制是0x2e。我们可以看到这里又两个2e,因为我的文件是test.php.jpg有两个点。我们把第二个点的2e修改成00

 

可以看到,修改后立即生效,文件名变成了test.phpjpg。第二个点没了。我们forward上传看看。

可以看到。test.php.jpg在上传的时候,因为截断的原因,变为了test.php。

 

利用:

百度了一下,这个利用方式可以这样子:

1、当上传文件的上传路径可控时,可以配合输入的上传路径进行截断上传。

如:只能上传Jpg,用户可以输入的变量有

上传路径 (string)

上传文件 (file)

那么可以这样子上传

路径:upload/ a.php.      这个.用brup修改为0x00

文件:a.jpg                       内容为php一句话木马

到时它拼接上传的时候就会这样

upload/a.php(截断)a.jpg

例子:

我们的文件上传的php代码稍加修改,变为如下:

判断了后缀名必须时jpg,但是这里的漏洞就是直接将path和filename拼接起来了。

 

那么我们就只能在path上面下手了。test.jpg里面是php一句话木马

\

 

我们要去hex那里找到upload/test.php.

forward上传。看到回显信息是成功的

我们去服务器那里看看。成功截断

当然也能成功执行命令

2、暂时还没想到 ==

3、#截断

这个在url可以截断。如下图:

#截断后:

这个只能在url中使用,即Url中#号后面的自动去掉。暂时没有想到什么利用方式。就先记着先把。

4、?截断

和上面的#号截断类似,也是只能url里面用。用?时,url会认为后面加的是get变量。即可截断。实例:

这个也暂时没想到利用方式,也就先记着先把。

猜你喜欢

转载自blog.csdn.net/xiaopan233/article/details/87017569