freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

代码审计学习-6(文件上传及目录遍历学习相关心得)
2024-05-20 18:43:20

前言

记录自己学习中产生的问题了。

1.一些文件上传相关的绕过原理是什么

  • 空格绕过以及1.jsp::DATA主要针对windows,因为windows针对文件名的空格会空处理,但是代码不会忽略空格。然后::DATA会被忽略重建文件。应用范围比较狭窄,主要针对黑名单,且不做后缀匹配那种。
  • 常见后缀黑名单绕过

    aspx&asp:ashx、asa、asmx、cer                                                                                                    php: php3、phtml                                                                                                                              jsp:jspx、jspf

  • 截断绕过符号《,、;、%00、’、^》 等都可以,这几种方法在windows服务器上成功率是比较高的,因为windows在创建文件的时候这些特殊字符是不允许出现的。
  • MIME检测绕过:代码限制上传文件的MIME类型需为”image/jpeg”,”image/png”或”image/gif”,可通过抓包,修改Content-Type为合法类型绕过MIME类型检测。
  • 根据文件的前面几个字节,即常说的魔术数字进行判断,不同文件类型的开头几个字节不同。

    常见文件头:

    文件类型	          文件头
    JPEG (jpg)	          FFD8FF
    PNG (png)	         89504E47
    GIF (gif)	         47494638
    ZIP Archive (zip)	 504B0304
    RAR Archive (rar)	 52617221
  • 双写绕过

常规的修复方案

  • 通过后端增加对上传文件后缀格式的验证,验证的手段有两种,分别是白名单校验和黑名单校验

  • 推荐使用白名单校验,绕过的危险小,黑名单无法维护全面,极容导致绕过校验成功上传脚本文件

  • 只允许文件上传到固定目录且设置程序对该目录下只有读写权限,不得具有执行权限

  • 推荐存储文件的服务器和应用服务器相互独立

  • 上传成功的文件不得真实的存储路径回显给前端,但是对于我想下载禁止直接使用完整的路径【为了防止直接暴露真实路径到前端】,应该通过key,到服务端或数据库中找到真实的路径下载即可

  • 必要的时候需要重命名文件名,最合理的一定是后端生成的文件的目录,最好使用随机数

2.目录遍历修复

产生原因就是没过滤导致目录遍历,从修复来看吧。

1.净化数据:对用户传过来的文件名参数进行硬编码或统一编码,对文件类型进行白名单控制,对包含恶意字符或者空字符的参数进行拒绝。主要的恶意字符包括不局限于如下:

  1. ..
  2. ..\
  3. ../
  4. %2e%2e%2f which translates to ../
  5. %2e%2e/ which translates to ../
  6. ..%2f which translates to ../
  7. %2e%2e%5c which translates to ..\
  8. %c1%1c
  9. %c0%9v
  10. %c0%af
  11. ..%5c../
  12. ../../../../../../../../../../../../etc/hosts%00
  13. ../../../../../../../../../../../../etc/hosts
  14. ../../boot.ini
  15. /../../../../../../../../%2A
  16. ../../../../../../../../../../../../etc/passwd%00
  17. ../../../../../../../../../../../../etc/passwd
  18. ../../../../../../../../../../../../etc/shadow%00
  19. ../../../../../../../../../../../../etc/shadow
  20. /../../../../../../../../../../etc/passwd^^
  21. /../../../../../../../../../../etc/shadow^^
  22. /../../../../../../../../../../etc/passwd
  23. /../../../../../../../../../../etc/shadow
  24. /./././././././././././etc/passwd
  25. /./././././././././././etc/shadow
  26. \..\..\..\..\..\..\..\..\..\..\etc\passwd
  27. \..\..\..\..\..\..\..\..\..\..\etc\shadow
  28. ..\..\..\..\..\..\..\..\..\..\etc\passwd
  29. ..\..\..\..\..\..\..\..\..\..\etc\shadow
  30. /..\../..\../..\../..\../..\../..\../etc/passwd
  31. /..\../..\../..\../..\../..\../..\../etc/shadow
  32. .\\./.\\./.\\./.\\./.\\./.\\./etc/passwd
  33. .\\./.\\./.\\./.\\./.\\./.\\./etc/shadow
  34. \..\..\..\..\..\..\..\..\..\..\etc\passwd%00
  35. \..\..\..\..\..\..\..\..\..\..\etc\shadow%00
  36. ..\..\..\..\..\..\..\..\..\..\etc\passwd%00
  37. ..\..\..\..\..\..\..\..\..\..\etc\shadow%00
  38. %0a/bin/cat%20/etc/passwd
  39. %0a/bin/cat%20/etc/shadow
  40. %00/etc/passwd%00
  41. %00/etc/shadow%00
  42. %00../../../../../../etc/passwd
  43. %00../../../../../../etc/shadow
  44. /../../../../../../../../../../../etc/passwd%00.jpg
  45. /../../../../../../../../../../../etc/passwd%00.html
  46. /..%c0%af../..%c0%af../..%c0%af../..%c0%af../..%c0%af../..%c0%af../etc/passwd
  47. /..%c0%af../..%c0%af../..%c0%af../..%c0%af../..%c0%af../..%c0%af../etc/shadow
  48. /%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd
  49. /%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/shadow
  50. %25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%00
  51. /%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%00
  52. %25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..% 25%5c..%25%5c..%00
  53. %25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..% 25%5c..%25%5c..%255cboot.ini
  54. /%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..%25%5c..winnt/desktop.ini
  55. \\'/bin/cat%20/etc/passwd\\'
  56. \\'/bin/cat%20/etc/shadow\\'
  57. ../../../../../../../../conf/server.xml
  58. /../../../../../../../../bin/id|
  59. C:/inetpub/wwwroot/global.asa
  60. C:\inetpub\wwwroot\global.asa
  61. C:/boot.ini
  62. C:\boot.ini
  63. ../../../../../../../../../../../../localstart.asp%00
  64. ../../../../../../../../../../../../localstart.asp
  65. ../../../../../../../../../../../../boot.ini%00
  66. ../../../../../../../../../../../../boot.ini
  67. /./././././././././././boot.ini
  68. /../../../../../../../../../../../boot.ini%00
  69. /../../../../../../../../../../../boot.ini
  70. /..\../..\../..\../..\../..\../..\../boot.ini
  71. /.\\./.\\./.\\./.\\./.\\./.\\./boot.ini
  72. \..\..\..\..\..\..\..\..\..\..\boot.ini
  73. ..\..\..\..\..\..\..\..\..\..\boot.ini%00
  74. ..\..\..\..\..\..\..\..\..\..\boot.ini
  75. /../../../../../../../../../../../boot.ini%00.html
  76. /../../../../../../../../../../../boot.ini%00.jpg
  77. /.../.../.../.../.../
  78. ..%c0%af../..%c0%af../..%c0%af../..%c0%af../..%c0%af../..%c0%af../boot.ini
  79. /%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/boot.


2.web应用程序可以使用chroot环境包含被访问的web目录,或者使用绝对路径+参数来访问文件目录,时使其即使越权也在访问目录之内。www目录就是一个chroot应用. 由chroot创造出的那个根目录,叫做“chroot监狱”(所谓”监狱”就是指通过chroot机制来更改某个进程所能看到的根目录,即将某进程限制在指定目录中,保证该进程只能对该目录及其子目录的文件有所动作,从而保证整个服务器的安全。

3、 任意文件下载漏洞也有可能是web所采用的中间件的版本低而导致问题的产生,例如ibm的websphere的任意文件下载漏洞,需更新其中间件的版本可修复。

4、 要下载的文件地址保存至数据库中。

5、 文件路径保存至数据库,让用户提交文件对应ID下载文件。

6、 用户下载文件之前需要进行权限判断。

7、 文件放在web无法直接访问的目录下。

8、 不允许提供目录遍历服务。

9、 公开文件可放置在web应用程序下载目录中通过链接进行下载。

3.审计的思路

先说文件上传吧。均是个人理解,欢迎大家改正补充哈。

  • 文件上传可以搜索以下关键词: upload,write,fileName ,filePath

  • 在查看时,主要判断是否有检查后缀和文件的大小

  • 同时要查看配置文件是否有设置白名单或者黑名单(不推荐黑名单,可能被绕过)

目录其实没差啥,就是filename换成pathname这种。其实主要还是过滤问题。针对啥类型变量修复永远都是优先全局过滤器,之后再说其他,全局过滤器快速,但是业务功能和性能相对较小。

写在后面

再会,还有下一篇。如果对你有帮助是我的荣幸!再见,铁子~

# Java代码审计
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录