利用模糊测试突破上传文件限制

利用模糊测试突破上传文件限制

时间:2016-12-14 作者:zhankehua 评论:1 点击:4274 次

什么是模糊测试呢?相信搞测试的人都知道吧!不过在这里我还是把百度中的解释摘抄一下。

在模糊测试中,用随机坏数据(也称做 fuzz)攻击一个程序,然后等着观察哪里遭到了破坏。模糊测试的技巧在于,它是不符合逻辑的:自动模糊测试不去猜测哪个数据会导致破坏(就像人工测试员那样),而是将尽可能多的杂乱数据投入程序中。由这个测试验证过的失败模式通常对程序员来说是个彻底的震撼,因为任何按逻辑思考的人都不会想到这种失败。
模糊测试是一项简单的技术,但它却能揭示出程序中的重要 bug。它能够验证出现实世界中的错误模式并在您的软件发货前对潜在的应当被堵塞的攻击渠道进行提示。

上面就是模糊测试的一些说明。今天,在这里我主要是把我的模糊测试的学习演示一遍。

有这样一段程序,为了上传文件的安全,对上传文件进行了限制。上传文件的代码如下(我做了精减):

2016-12-14_192339.jpg

这段代码一看就明白,是对后缀名为php,php3,php4的文件上传进行限制。从代码逻辑上来说,应该没有任何问题。但有的网友说这段代码还是能够绕过去,上传PHP文件。具体怎么绕过呢?我想了好多种办法,又是编码,又是进制,都不行。反正有一点,肯定要在后缀名上作文章。这时想到后模糊测试,输入一些杂乱无章的后缀名。有了这种想法,那就开始写程序测试呗,当然使用python了。到网上找了关于python模拟上传的程序,然后进行改造(偷懒:))。程序内容如下图:

2016-12-14_193248.jpg

经过测试 ,竟然发现成功上传1个后缀为PHP的文件。

2016-12-14_193514.jpg


以下文件看上去后缀名为php,实际不是的哟。

2016-12-14_193605.jpg


为了验证以上的测试,现在我使用brupsuite进行手动测试,看是不是可以上传php文件。

先写一个测试页

2016-12-14_194201.jpg

随便上传一个文件,然后进行拦截(我上传的是1.jpg).

2016-12-14_194544.jpg

这时,要把1.jpg改成1.php?。这个?号代表多少呢?我们看上面的图(往上数第3张),红框内为“32-ax327007.php”的文件名。其中32表示为十进制的数。在上面的模糊测试程序中,我们知道是把32转成字符的添加在.php后面的。但又因为burpsuite工具可以使用16进制编辑,所以,我们要先把32转成十六进制的20,再编辑。

2016-12-14_195217.jpg

然后转到十六进制编辑视图。

2016-12-14_195536.jpg

2016-12-14_200043.jpg


2016-12-14_200124.jpg

修改完成后,回到Raw视图

2016-12-14_200209.jpg


然后点击Forward进行上传,结果如下图。

2016-12-14_200345.jpg


我们再通过浏览器,看看是否能访问呢?

2016-12-14_200527.jpg



显然是可以访问的。

好了,今天就这到这吧。

坚持每天学习一点点!:)


已有 4274 位网友参与,快来吐槽:

1#访客  2018-02-10 10:53:35 回复该评论
很赞。。楼主思路不错

发表评论

必填

选填

选填

◎欢迎参与讨论,发表您的看法、交流您的观点。