本章节收录文件操作、配置相关的漏洞
文件目录遍历
- 使用
/
、\
等字符跳出目标目录- 案例1:【web】zimbra mail会调用unrar解压缩文件,unrar在unix系统下只会检查文件名是否以
../
开头,因此名为..\..\..\tmp/shell
的文件可以绕过检查。由于后面会调用DosSlashToUnix()函数,将\
转换为/
,导致文件可以写入任意目录 - 案例2:【iot】RV340设备内置nginx服务器,并通过
-f /tmp/websession/token/$cookie_sessionid
来判断是否认证通过,通过传入Cookie: sessionid =../../../etc/passwd
头可以绕过认证 - 案例3:【android】用户在app里下载附件时,由于附件文件名包含
../
,导致任意文件覆盖 - 案例4: Android 邮件客户端: ContentProvider 未对URI解码,可使用 ..%2F 遍历文件系统
- 案例1:【web】zimbra mail会调用unrar解压缩文件,unrar在unix系统下只会检查文件名是否以
- 使用软连接跳出目标目录
- 尝试截断字符串实现任意文件读取
- 案例1:【iot】内容在PPT的50-51页。SSL VPN存在一处任意文件下载,但是文件必须以
.json
结尾。通过填充/
,让snprintf buffer打满,实现字符串截断,绕过文件后缀名限制- snprintf(s, 0x40, "/migadmin/lang/%s.json", lang);
- 案例2:【iot】内容在PPT的25页。KYOCERA打印机存在一处任意文件下载,接口会先检查是否以特定文件后缀结尾(比如
.js
),然后再做URL解码获取文件名,读取后作为响应返回。由于是先判断后缀再解码,通过%00
截断可以实现任意文件读取(比如shadow%00.js
) - 案例3:【iot】netgear存在一个任意文件读取漏洞,并使用strstr检查是否包含
.xml
等字样,通过在U盘上构建一个aaa.xml
目录,再使用../跳出即可实现任意文件读取,e.g../../mnt/shares/U/evil.xml/../../../../../etc/passwd
- 案例1:【iot】内容在PPT的50-51页。SSL VPN存在一处任意文件下载,但是文件必须以
- 利用IIS短文件名爆破路径,比如
/otcmso~1
- 自研Web服务器,URI处置有问题
- hxxp://a.com/../../../../../.../../../../../../../etc/hosts
- hxxp://XXX.XXX.XXX.XXX/.../.../windows/system32/cmd.exe?/c+net+user+admin+admin+/add
配置文件利用
- 写配置文件利用
- 案例1:【iot】Grandstream设备启动时候会执行
nvram get gdb_debug_server
获取tftp服务器地址,然后从这个地址拉取gdb并执行,且没有任何校验。设置此参数并重启,可以实现命令执行 - 案例2:【iot】ZTE路由器允许插入U盘,并将内容通过samba共享出来。samba以root启动,开启软连接解析,并允许编辑任意文件。通过在U盘里增加到smb.conf的软连接,可以实现对smb.conf的编辑,在smb.conf里可以增加preexec配置来执行任意命令。作者增加了busybox telnetd命令,重启路由器后就可以用telnet登录了。
- 案例3:【iot】Pulse Secure 可以通过上传压缩包覆盖配置文件,利用思路是覆盖 watchdog.conf 或者 postgresql.conf。后者可以修改 shared_preload_libraries 实现任意so加载
- 案例4:【iot】netgear路由器允许使用硬盘上的文件作为banner,在执行
banner motd file /etc/passwd
命后令,可以在下次登录时看到/etc/passwd的内容
- 案例1:【iot】Grandstream设备启动时候会执行
- 读配置文件利用
CRLF漏洞
- 案例1:【linux】/proc/XX/status Name字段存在CRLF问题,通过构造 $'sleep\rfake\rline' 这样的名字可以插入多余的行,导致apport降权失败,带来提权问题
- 案例2:【android】bluedroid 在配对时,会记录设备名称到配置文件里,由于没有过滤换行符,导致一些视觉欺骗问题
- 案例3:【java】FTP URI没有删除换行符,可以实现FTP命令注入
- ftp://u:[email protected]/foodir%0APORT%2010,1,1,1,5,57/z.txt
- 案例4:【python】CVE-2016-5699案例,urllib可以注入header,结合SSRF漏洞可以写redis,通过
append
函数实现分段写入绕过长度限制,最后通过pickle反序列化实现RCE(py2、py3的格式有区别)
其他利用方法
- 检查压缩包处理是否得当
待补充
文件上传
- 文件目录遍历
- 绕过文件名称检查
- 尝试使用其他支持的扩展名、切换大小写或者增加关键词,比如
a.phP
,a.cer
,a.jpg.jsp
- 尝试截断文件名,通用的有
a.asp%00.jpg
;Windows下可以是a.asp.
,a.asp%20
,或者以%80-%99
结尾 - 尝试写入NTFS流,比如
xx.php::$data
,xx.php::$DATA
- 尝试使用其他支持的扩展名、切换大小写或者增加关键词,比如
- 绕过文件内容检查
- 增加文件头,比如
GIF89a
- 使用短标签,比如
<?php
被过滤,可以改用<?
- 去掉或清空请求参数,比如
?type=image
,检查是否可以成功上传webshell
- 增加文件头,比如
- 尝试解析漏洞,可以根据
Content-Type
判断是否存在漏洞,利用上传的文件去执行代码- IIS 6
a.asp;.jpg
,a.jpg/x.php
- fastcgi
http://example.com/robots.txt/x.php
- IIS 6
- 利用zip解压缩功能写木马文件,可以用软连接、
../
跳出目录,也可以在三级以上目录存放文件绕过检测,或者利用条件竞争执行任意代码 - 绕过上传后缀限制
- 上传.htaccess绕过脚本限制,参考Utilizing .htaccess for exploitation purposes — PART #1
- RewriteRule 实现内网代理
- AddType 让非脚本文件可执行
- SetHandler server-status 查看服务器信息
- rewrite 到 file:/// 实现任意文件下载
- 上传jar包绕过jsp/jspx限制,将jar包上传到
WEB-INF/lib
目录,修改或者覆盖WEB-INF/web.xml
触发变更,之后jar包META-INF/resources
目录下的JSP文件可以直接解析和访问,具体参考记一次过滤jsp的文件上传
- 上传.htaccess绕过脚本限制,参考Utilizing .htaccess for exploitation purposes — PART #1
文件下载
- 修改下载的文件名实现恶意附件投递
待补充
PHP利用
- 在能控制SESSION参数的情况下,可以尝试包含session文件,默认文件名为
/tmp/sess_XXXXX
- POST一个很大的文件到
phpinfo()
页面,可以看到临时文件名,在一定条件下可以尝试包含这个文件 - 如果能上传zip,可以用
zip:///a/b/c.zip#fileName
来包含文件,这种方式不需要截断即可包含文件
待补充