微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

文件上传漏洞——解析、验证、伪造(二)


title: 文件上传漏洞——解析、验证、伪造(二)

之前做了一篇文件上传漏洞的文章,但是知识点和靶场都没讲完,所以这篇文章接着讲。

%00截断绕过


%00实际上就是十六进制的0x00,就是表示ASCII码值为0,有些函数在处理这个字符的时候会把这个当做结束符。在上传文件的时候如果遇到了白名单机制,只允许上传jpg格式。这时候可以使用%00截断。
思路就是上传一个1.PHP%00.jpg传参之后,有些过滤都是直接匹配字符串,然后允许上传,但是PHP函数去执行的时候读取到0x00认为这是结束符。抓住一点图片存储路径可控


在保存路径的位置使用%00截断,这样这个上传的1.jpg的马儿最后会被保存为example.PHP执行
这里推荐一种一句话木马的写法

<?PHP eval($_REQUEST['value']);?>

这样写get和post都能传参。

%00截断绕过(二)


这题其实和第一题差不多就是路径的传参变成了post传参。而get传参是经过url编码的,而修改post的话就通过抓包然后修改hex值在十六进制里00是结束的意思。


抓包在路径上附上example.PHPa这加a是为了修改a的hex值为00截断
使服务器存储的这个文件为example.PHP


即可传入绕过上传PHP文件

图片马绕过


这里看到程序检查了上传文件的前两个字节,就是查看了文件头,所以这题只需要制作一只图片马即上传绕过

getimagesize图片类型绕过


这里有一个getimagesize函数
getimagesize() 函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回 FALSE 并产生一条 E_WARNING 级的错误信息。
如果不能访问 filename 指定的图像或者其不是有效的图像,getimagesize() 将返回 FALSE 并产生一条 E_WARNING 级的错误
所以这里制作一个完整的图片马即可上传绕过。

PHP_exif模块图片类型绕过


exif_imagetype() 读取一个图像的第一个字节并检查其签名。
函数可用来避免调用其它 exif 函数用到了不支持文件类型上或和 $_SERVER[‘HTTP_ACCEPT’] 结合使用来检查浏览器是否可以显示某个指定的图像。
还是检查图片,所以图片上传即可。

二次渲染绕过


二次渲染:就是根据用户上传图片,新生成一个图片,将原始图片删除,将新图片添加数据库中。比如一些网站根据用户上传的头像生成大中小不同尺寸的图像。但是图片内容是不会变的。所以还是图片上传即可

条件竞争绕过

竞争条件:指发生在多个线程同时访问同一个共享代码、变量、文件等没有进行锁操作或者同步操作的场景中。


开发者在进行代码开发的时候常常倾向于认为代码会以线性的方式执行,而且忽略了并忽视了并行服务器开发执行多个线程。

线程同步机制确保两个及以上的并发进程或线程不同执行某些特定的程序段,也称之为临界区,一般而言我们是上传文件上传了但是最后却因为过滤或者因为其他原因被删除了,那么我们可以使用条件竞争,我们实际上是unlink,是和删除文件函数进行竞争。
就是我们不断发送上传包,然后我们不断地访问那个我们上传去的文件地址,我们就是和服务器删除函数比手速,我们可以上传一个PHP然后访问后,有这个PHP去写一个一句话木马。手速不够快使用burp爆破

<?PHP $a='<?PHP @eval($_REQUEST[\'value\'])?>';file_put_contents('1.PHP',$a)?>

因为这里不好竞争,所以就不演示了。

move_uploaded_file()截断


move_uploaded_file()函数功能如下:


这题其实和前面的00截断做法一样



上传即可获得shell.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐