任意文件上传下载漏洞
2021-12-07 18:31:50 9 举报
AI智能生成
无
作者其他创作
大纲/内容
下载漏洞
漏洞产生原因
下载漏洞
一些网站由于业务需求,往往需要提供文件查看或文件下载功能,但若对用户查看或下载的文件不做限制,没有做文件过滤,或者是../过滤。则恶意用户就能够查看或下载任意敏感文件,这就是文件查看与下载漏洞。
下载漏洞产生位置的链接形式
一般链接形式
download.php?path=
down.php?file=
data.php?file=
down.php?file=
data.php?file=
参数链接形式
&Src=
&Inputfile=
&Filepath=
&Path=
&Data=
&Inputfile=
&Filepath=
&Path=
&Data=
漏洞常见可利用文件路径
/root/.ssh/authorized_keys
/root/.ssh/id_rsa
/root/.ssh/id_ras.keystore
/root/.ssh/known_hosts //记录每个访问计算机用户的公钥
/etc/passwd
/etc/shadow
/etc/my.cnf //mysql配置文件
/etc/httpd/conf/httpd.conf //apache配置文件
/root/.bash_history //用户历史命令记录文件
/root/.mysql_history //mysql历史命令记录文件
/proc/mounts //记录系统挂载设备
/porc/config.gz //内核配置文件
/var/lib/mlocate/mlocate.db //全文件路径
/porc/self/cmdline //当前进程的cmdline参数
/root/.ssh/id_rsa
/root/.ssh/id_ras.keystore
/root/.ssh/known_hosts //记录每个访问计算机用户的公钥
/etc/passwd
/etc/shadow
/etc/my.cnf //mysql配置文件
/etc/httpd/conf/httpd.conf //apache配置文件
/root/.bash_history //用户历史命令记录文件
/root/.mysql_history //mysql历史命令记录文件
/proc/mounts //记录系统挂载设备
/porc/config.gz //内核配置文件
/var/lib/mlocate/mlocate.db //全文件路径
/porc/self/cmdline //当前进程的cmdline参数
漏洞防范
(1)过滤".",使用户在url中不能回溯上级目录
(2)正则严格判断用户输入参数的格式
(3)php.ini配置open_basedir限定文件访问范围
上传漏洞
漏洞产生原因
大多数网站都有文件上传的接口,但如果在后台开发时并没有对上传的文件进行安全考虑或采用了有缺陷的措施,导致攻击者可以通过一些手段绕过安全措施从而上传一些恶意文件,从而通过该恶意文件的访问来控制整个后台
上传入侵upload-labs
1:客户端检测
(javascript 检测)
首先观察到提示只允许上传图片文件,那么前端的查看代码,当页面发生改变时,会调用这个checkFileExt函数来检查上传的是不是图片,我们只需要在前端将checkFileExt函数删除,就能上传一个一个非图片文件
2:服务端检测
检查后缀
黑名单
1:上传特殊可解析后缀
2:上传.htaccess
3: 后缀大小写绕过
4: 点绕过
5:空格绕过
6: ::$DATA绕过
7: 配合解析漏洞
8: 双后缀绕过
白名单
1: MIME 绕过
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
每个MIME类型由两部分组成,前面是数据的大类别,例如声音audio、图象image等,后面定义具体的种类。
常见的MIME类型(通用型):
超文本标记语言文本 .html text/html
xml文档 .xml text/xml
XHTML文档 .xhtml application/xhtml+xml
普通文本 .txt text/plain
RTF文本 .rtf application/rtf
PDF文档 .pdf application/pdf
Microsoft Word文件 .word application/msword
PNG图像 .png image/png
GIF图形 .gif image/gif
JPEG图形 .jpeg,.jpg image/jpeg
au声音文件 .au audio/basic
MIDI音乐文件 mid,.midi audio/midi,audio/x-midi
RealAudio音乐文件 .ra, .ram audio/x-pn-realaudio
MPEG文件 .mpg,.mpeg video/mpeg
AVI文件 .avi video/x-msvideo
GZIP文件 .gz application/x-gzip
TAR文件 .tar application/x-tar
任意的二进制数据 application/octet-stream
超文本标记语言文本 .html text/html
xml文档 .xml text/xml
XHTML文档 .xhtml application/xhtml+xml
普通文本 .txt text/plain
RTF文本 .rtf application/rtf
PDF文档 .pdf application/pdf
Microsoft Word文件 .word application/msword
PNG图像 .png image/png
GIF图形 .gif image/gif
JPEG图形 .jpeg,.jpg image/jpeg
au声音文件 .au audio/basic
MIDI音乐文件 mid,.midi audio/midi,audio/x-midi
RealAudio音乐文件 .ra, .ram audio/x-pn-realaudio
MPEG文件 .mpg,.mpeg video/mpeg
AVI文件 .avi video/x-msvideo
GZIP文件 .gz application/x-gzip
TAR文件 .tar application/x-tar
任意的二进制数据 application/octet-stream
2:%00截断
截断文件路径 a.php%00.jpg PHP版本小于5.3.4 magic_quotes_gpc 需要OFF
3: 0x00截断
截断文件名 利用burpsuite 的 hex 更改16进制信息 将 save_path 更改为 00
4: 0x0a截断
截断文件
检查内容
1: 文件头检查
2: 突破getimagesize() 代码注入绕过
getimagesize() 函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回 FALSE 并产生一条 E_WARNING 级的错误信息,如果用这个涵数来获取类型,从而判断是否是图片的话,会存在问题。
语法格式 array getimagesize ( string $filename [, array &$imageinfo ] )
3: 突破exif_imagetype()
4: 二次渲染
伪装方式: 方法一:直接伪造头部GIF89A
方法二:CMD方法,copy /b test.png+1.php muma.png
方法三:直接使用工具增加备注写入一句话木马。
方法二:CMD方法,copy /b test.png+1.php muma.png
方法三:直接使用工具增加备注写入一句话木马。
其他
条件竞争
子主题
中间件解析漏洞
Apache (Apache是从右到左开始判断解析)
test.php.php123
AddHandler php5-script.php test2.php.jpg
AddType application/x-httpd-php.jpg( 即使扩展名是JPG一样能以PHP的方式执行)
.htaccess
上传文件.htaccess,如果没有被过滤 则该目录下任意文件都可以做为脚本执行
Nginx
xxx.jpg%00.php (Nginx < 8.03 空字节代码执行漏洞)
开启fix_pathinfo (PHP会认为SCRIPT_FILENAME是phpinfo.jpg,而1.php是PATH_INFO,所以就会将phpinfo.jpg作为PHP文件来解析了)
/1.jpg/1.php
/1.jpg%00.php
/1,jpg/%20\0.php
IIS解析漏洞
IIS5.X -IIS6.X
/XX.asp /xx.jpg 目录解析漏洞
xx.asp;.jpg
xx.asa xx.cer xx.cdx 黑名单过滤绕过
IIS 7.5
a.asp.a; aspx.jpg..jpg
/.php
分支主题
分支主题
分支主题
0 条评论
下一页
为你推荐
查看更多