1-客户端check
先看一下直接上传php文件是个什么效果

如下图所示,刚选好文件,还没有点 “开始上传” 的时候,就弹出了提示 上传的文件不符合要求
客户端验证一般两种绕过方法
(1)浏览器禁用javascript
(2)burpsuite抓包改后缀
这里用方法二、burpsuite抓包改后缀
把1.php文件名改1.png,上传过程中burpsuite抓包

抓到上图所示的报文,右键 send to repeater

把文件名改成sh.php,点send,上传成功

最后在网页上右键查看网页源代码,可以在比较靠后的地方看到下图所示的代码,虽然是白名单过滤,但是放在前端就没有用处

2-服务端check
传了1.php看一下现象,没有弹框,点“开始上传”之后会提示“上传的图片只能是jpg,jpeg,png格式的!”

说起来是两个思路,不过严格来说不能算两个思路,稍微有点殊途,很快同归
(1)上传1.php,burpsuite抓包修改MIME type (好处是服务器上不会多一个没用的文件)
(2)上传1.png,burpsuite抓包修改文件后缀 (好处是只要这个文件上传成功了,MIME type肯定是对的)

用第二个方法来演示一下。
上传1.png,burpsuite抓包
抓到这个报文之后,右键 send to repeater

把filename改成1.php,点send,文件上传成功

3-getimagesize()
传一个1.php,上传失败,提示和上一关有区别,多了个上传文件后缀名不能为空,由于上传的文件是有后缀名的,也许后端代码会删掉原本的后缀名并根据一些规则替换新的后缀名?
传一个名为1.png,发现服务器可以识别出这是个假图片
上传名为“1-正常图片.png”的真的png文件,回显如下,可见后端代码修改了文件名。
getimagesize() 函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回 FALSE 并产生一条 E_WARNING 级的错误信息。
getimagesize() 函数将测定任何 GIF,JPG,PNG,SWF,SWC,PSD,TIFF,BMP,IFF,JP2,JPX,JB2,JPC,XBM 或 WBMP 图像文件的大小并返回图像的尺寸以及文件类型及图片高度与宽度。
这样的话bp抓包,改包应该也不可以了,试一下,不可以


由于只能上传图片格式,所以伪造图片头加上一句话木马是可以的,但是不能解析出php文件,还是不可以运行木马php文件,只能结合文件包含漏洞利用了。在上面的文件包含漏洞实现过。
然后在pikachu靶场中。将这图片木马上传,返回保存路径
在浏览器URL输入图片的路径,浏览器会显示这张图片,但图片里面的代码并没有执行
这时候我们可以通过文件包含漏洞来利用这个图片木马,因为include函数会包含上传的文件执行任意代码,我们可以利用它的这个漏洞执行木马。
在本地文件包含中,选择一项点击提交,把URL中的filename的值修改为图片木马的路径
…/…/unsafeupload/uploads/2023/03/21/6063296419230c8ab4b542536410.jpg
payload:http://127.0.0.1/pikachu/vul/fileinclude/fi_local.php?filename=…/…/unsafeupload/uploads/2023/03/21/6063296419230c8ab4b542536410.jpg&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2
木马代码被成功执行,获取到了后台php的版本信息。

本文详细介绍了如何通过禁用JavaScript、修改文件后缀和MIME类型绕过客户端和服务端的文件上传验证。在服务器使用getimagesize()函数时,虽然能识别图片,但可通过文件包含漏洞执行PHP木马。通过构造特定的payload,成功获取后台PHP版本信息。
2366

被折叠的 条评论
为什么被折叠?



