首页 » 网站推广 » phpimagecreatefrom技巧_文件上传马脚周全渗透姿势总结

phpimagecreatefrom技巧_文件上传马脚周全渗透姿势总结

访客 2024-11-20 0

扫一扫用手机浏览

文章目录 [+]

比如某博客网站评论编辑模块,右上角就有支持上传图片的功能,提交带有恶意字符串的图片后,就直接可以显示在评论中了,如图:

文件上传漏洞是进行渗透是比较常见好利用的漏洞,利用它能够直接上传webshell,进行连接,是比较常见的攻击办法。
针对文件上传场景检测和绕过进行了全面姿势总结。

phpimagecreatefrom技巧_文件上传马脚周全渗透姿势总结

0x01 渗透姿势全面剖析

针对一个文件上传场景,首先判断是客户端JS校验还是做事器校验,判断依据:上传造孽文件,返回结果是否很快?

phpimagecreatefrom技巧_文件上传马脚周全渗透姿势总结
(图片来自网络侵删)
1.客户端JavaScript检测

如果上传造孽文件,返回结果很快,或者F12打开开拓者模式,上传造孽文件,创造没有网络要求,但是被拦截了,很有可能便是客户端进行了JS校验检测。
这种前端采取JS限定上传类型和大小的办法:

<script type="text/javascript"> function checkFile() { var file = document.getElementsByName('upload_file')[0].value; if (file == null || file == "") { alert("请选择要上传的文件!"); return false; } //定义许可上传的文件类型 var allow_ext = ".jpg|.png|.gif"; //提取上传文件的类型 var ext_name = file.substring(file.lastIndexOf(".")); //判断上传文件类型是否许可上传 if (allow_ext.indexOf(ext_name) == -1) { var errMsg = "该文件不许可上传,请上传" + allow_ext + "类型的文件,当前文件类型为:" + ext_name; alert(errMsg); return false; } }</script>

很是鸡肋,绕过思路:1.直接本地禁用JS,不让其做检测 2.抓包,修正文件后缀名类型,绕过检测限定

2.做事器后端检测

做事器后端检测有较多办法,普遍分为文件类型检测,文件头类型,文件扩展名名单检测,文件内容检测,接下来进行简要剖析。

a.文件类型检测

此类检测防护紧张是从content-type进行检测,考验要求中content-type是否符合可接管的上传类型(如"image/gif","image/png","image/jpeg")

if (isset($_POST['submit'])) {if (file_exists(UPLOAD_PATH)) { if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif')) { $temp_file = $_FILES['upload_file']['tmp_name']; $img_path = UPLOAD_PATH . '/' . $_FILES['upload_file']['name']; if (move_uploaded_file($temp_file, $img_path)) { $is_upload = true;

绕过思路:抓包将content-type改为可接管图片形式,即可绕过

b.文件头类型检测

上个文件类型是检测content-type,比较好假造,这个则是利用getimagesize()函数来获取文件的MIME类型,通过文件头进行判断文件类型

if(file_exists($filename)){ $info = getimagesize($filename);

文件头便是文件特定的标志,如二进制PE文件的4D5A,bmp文件的424D,zip文件的504B0304,各种常见文件的文件头类型大家可以查找理解一下,常见图片文件头如下:

gif: GIF89a

jpg,jpeg: FF D8 FF

png: 89 50 4E 47 0D 0A

绕过思路:针对这种,上传木马恶意文件时,先利用编辑工具在数据最前面添加图片的文件头进行假造,即可绕过

c.文件扩展名检测

这种类型有基于黑名单检测和白名单检测。
常日基于黑名单是很不屈安的,黑名单机制:只拦截名单中涌现的扩展后缀名,别的默认放行。
这就取决于名单中的扩展后缀名覆盖能力范围了,很难把所有的考虑全面,就很随意马虎造成漏洞。

黑名单绕过思路:可以从做事器的解析特性进行剖析,如分外可解析后缀php3,php7,phtml,jspx等 如分外的解析办法陌生后缀名,带换行后缀名,双后缀名等解析差异造成的漏洞。
还可以从稠浊方面出发,后缀名大小写,点绕过,空格绕过,以及上传.htaccess配置掌握文件权限和::$DATA数据流的利用

基于白名单相对付黑名单就安全很多了,哀求只能是特定扩展名的文件才能够上传。

白名单绕过思路:MIME绕过,修正文件类型为白名单可接管的类型,以及%00,0x00截断绕过,这种场景针对save_path可控。

00截断事理实在很奥妙,利用场景是文件保存路径可控,这样一来我们上传的文件符合白名单就行,真正动手的地方在文件保存路径出,可以放上自己的webshell文件,然后在webshell文件后面添加%00,或0x00,再加一些字符,这样一来,系统在解析碰到00就会截断,后面字符就不起浸染,只剩下前面的webshell文件名,就可以在url中进行访问了。
%00和0x00的利用差异在于提交get要求时,是%00,会进行url自动解码动作,然后进入验证函数。
0x00则是post要求直接进入验证函数。

d.文件内容检测

比较厉害的防护检测,便是针对内容做检测,这种防护能力比较强,但也不是不能绕过。
自始至终,攻防都是在对抗中螺旋演进的。

这种检测防护基本都是从webshell具有的代表性敏感字符?或者危险敏感函数。

绕过思路:从分外敏感字符开始进行Fuzz测试,探测webshell中有多少必要的字符存在被更换,如果构成webshell实行的字符

被更换得较多,剩下未过滤的字符的难以支撑webshell实行,可以换个角度利用系统,调用脚本措辞,如<script language='php'>system('ls');<script>。

还有一种更强的基于内容检测机制,对上传的图片进行二次渲染,参考代码如下

//判断文件后缀与类型,合法才进行上传操作 if(($fileext == "jpg") && ($filetype=="image/jpeg")){ if(move_uploaded_file($tmpname,$target_path)){ //利用上传的图片天生新的图片 $im = imagecreatefromjpeg($target_path); if($im == false){ $msg = "该文件不是jpg格式的图片!
"; @unlink($target_path); }else{ //给新图片指定文件名 srand(time()); $newfilename = strval(rand()).".jpg"; //显示二次渲染后的图片(利用用户上传图片天生的新图片) $img_path = UPLOAD_PATH.'/'.$newfilename; imagejpeg($im,$img_path); @unlink($target_path); $is_upload = true; } } else { $msg = "上传出错!
"; }

紧张便是后端调用了php的GD库,利用imagecreatefromjpeg()函数提取了文件中的图片数据,然后再重新渲染,这样图片中插入的恶意代码就会被过滤掉了,经由测试创造,不管是直接修正文件头制作图片马,还是利用copy命令制作的图片马,都无法避免个中的一句话被过滤掉。

绕过思路:借鉴二进制中钩子的思想,实在便是想在上传图片中找一块"地方",存储webshell,这块"地方"哀求在后端处理后没有被过滤掉。
那就上传一个正常的文件,然后下载下来,diff一下,查看哪些位置没有被改动过,然后添加webshell进行考试测验。

标签:

相关文章

php登录京东技巧_写网站JAVA和PHP怎么选

PHP是一种盛行的脚本措辞,它适宜快速开拓小到中等规模的网站。PHP开拓的优点包括易于学习和利用、广泛的文档和社区支持、本钱较低,...

网站推广 2024-12-13 阅读0 评论0

php声波图技巧_从无量纲常数到声速极限

爱因斯坦的狭义相对论定义了波传播的绝对速率极限,那便是光速,它大约即是3×10⁸米/秒,没有任何东西能比光速更快。然而,对付声波来...

网站推广 2024-12-13 阅读0 评论0