文件包含漏洞篇

打印 上一主题 下一主题

主题 861|帖子 861|积分 2593

文件包含漏洞原理

程序开发人员通常会把可重复使用的执行函数写在单个文件内,在使用某个函数的时候,直接可以通过文件包含函数,直接调用执行函数文件,无需多次或再次编写,这种调用文件的过程通常被称为包含
产生的原因:
为了代码更加的灵活,开发者会把被包含的文件设置为变量,进行动态调用,从而导致客户端可以调用任意文件,假设攻击者构造恶意代码,并包含了该恶意代码执行文件。
文件包含漏洞可以解析含PHP代码的文件内容 如果文件内 包含php可执行代码 则php程序会被解析并正常执行
产生原因

⭐⭐⭐PHP文件包含会将一切的文件当成PHP脚本执行
文件包含是php的正常功能,如果包含的文件用户可以控制。且后端代码没有进行严格验证,就会造成文件包含漏洞。
Java、ASP是完全面向对象的语言 不存在文件包含漏洞
产生代码思路
  1. [/code][b]⭐⭐⭐[/b]PHP文件包含常用函数:
  2. [list]
  3. [*]include                                include  "db_connect.php"  包含db_connect.php脚本文件
  4. - 如果脚本文件不存在,则网站提示报错,[b]不影响执行[/b]
  5. [*]include_once                incluede_once  "db_connect.php"  [b]只包含一次[/b]php脚本文件
  6. - 如果脚本文件不存在,则网站提示报错,不影响执行程序继续执行
  7. [*]require                                incluede_once  "db_connect.php"  包含db_connect.php脚本文件
  8. - 如果脚本文件不存在,则网站[b]出现致命错误[/b]并终止执行
  9. [*]require_once                incluede_once  "db_connect.php" ** 只包含一次[b]php脚本文件
  10. - 如果脚本文件不存在,则网站[/b]出现致命错误**并终止执行
  11. [/list]代码审计思路:搜索可能产生漏洞的函数
  12. include
  13. include_once
  14. require
  15. require_once
  16. [size=3]防御方法[/size]
  17. 对文件包含内容做判断;文件包含处写死
  18. [size=4]文件包含漏洞利用[/size]
  19. [img]https://img2022.cnblogs.com/blog/2902742/202206/2902742-20220620212647109-670526080.png[/img]
  20. [img]https://img2022.cnblogs.com/blog/2902742/202206/2902742-20220620212657015-1796464483.png[/img]
  21. [size=3]文件包含漏洞分类[/size]
  22. [size=2]本地文件包含[/size]
  23. allow_url_fopen=On/Off(php默认就是On)
  24. allow_url_include=On/Off(php默认是Off)
  25. [size=2]远程文件包含[/size]
  26. allow_url_fopen=On/Off(php默认就是On)
  27. allow_url_include=On/Off(php默认是Off,远程文件包含[b]需要手动开启[/b]很少遇见)
  28. [size=3]利用方法[/size]
  29. [list=1]
  30. [*]读取任意文件 绝对路径?file=/etc/passwd
  31. [*]相对路径?file=../../../../etc/passwd
  32. [*]和文件上传漏洞共同利用,包含图片马
  33. [/list][size=3]利用核心[/size]
  34. [b]php文件包含会把一切的文件都当做php脚本执行[/b]
  35. ⭐⭐windows 本地host 文件[b]C:/windows/system32/drivers/etc/hosts[/b]
  36. [img]https://img2022.cnblogs.com/blog/2902742/202206/2902742-20220620212715810-582587952.png[/img]
  37. 绕过方法:
  38. %00截断
  39. 条件:
  40. [b]1.magic_quotes_gpc = Off 2.php 版本低于5.3.4[/b]
  41. [b]3.远程文件包含[/b]
  42. 远程文件包含可以包含任意的url链接进行调用
  43. [img]https://img2022.cnblogs.com/blog/2902742/202206/2902742-20220620212807873-566726128.png[/img]
  44. [img]https://img2022.cnblogs.com/blog/2902742/202206/2902742-20220620212817643-481564714.png[/img]
  45. [img]https://img2022.cnblogs.com/blog/2902742/202206/2902742-20220620212829052-726377441.png[/img]
  46. 绕过方法:
  47. [list=1]
  48. [*]?绕过
  49. [*][size=6]绕过  在url中#需要编码[/size]
  50. [*]%20空格绕过
  51. [*]攻击机主动更改后缀名
  52. [/list][size=4]PHP伪协议[/size]
  53. [size=3]file://访问本地系统文件     必须跟上绝对路径   读取本地文件[/size]
  54. (allow_url_fopen和allow_url_include无论开关都可以)
  55. [img]https://img2022.cnblogs.com/blog/2902742/202206/2902742-20220620212846930-1721381214.png[/img]
  56. [size=3]php://filter  常用于读取文件/源码[/size]
  57. [img]https://img2022.cnblogs.com/blog/2902742/202206/2902742-20220620212901069-472942517.png[/img]
  58. (allow_url_fopen和allow_url_include无论开关都可以)
  59. 读取php文件时可以防止其执行 所以使用该伪类协议 对文件内容进行编码输出的处理
  60. base64编码方法
  61. ?path=php://filter/read=convert.base64-encode/resource=文件.php txt
  62. rot13加密方法
  63. ?path=php://filter/string.rot13/resource=文件.php
  64. [size=2]php://filter协议和file://协议的区别[/size]
  65. file://伪协议只能使用绝对路径
  66. php:filter//伪协议可以相对路径和绝对路径都可以使用
  67. [size=3]php://input 接收POST请求体当作PHP代码执行[/size]
  68. 接收POST体当作php代码执行
  69. [img]https://img2022.cnblogs.com/blog/2902742/202206/2902742-20220620212919183-808446825.png[/img]
  70. [img]https://img2022.cnblogs.com/blog/2902742/202206/2902742-20220620212929974-67283471.png[/img]
  71. allow_url_fopen off/on
  72. offallow_url_incluede On 必须开启
  73. [size=2]burpsuite 执行演示[/size]
  74. [img]https://img2022.cnblogs.com/blog/2902742/202206/2902742-20220620212953179-725071623.png[/img]
  75. [size=4]其它伪协议的使用方法[/size]
  76. [img]https://img2022.cnblogs.com/blog/2902742/202206/2902742-20220620213030175-567139702.png[/img]
  77. [size=3]zip://        读取Zip文件内容[/size]
  78. allow_url_fopen;allow_url_include        无论开关
  79. 【必须是绝对路径】包含读取zip文件中内容
  80. ?id=zip://D/phpStudy/www/file.zip%23test.txt
  81. [size=3]data://text/plain        把GET请求参数中的一部分字符串当作PHP脚本执行[/size]
  82. allow_url_fopen;allow_url_include        都需打开
  83. 伪协议编码
  84. [code]data://text/plain,<?php  phpinfo()?>
复制代码
对base64编码后的字符进行php代码执行
data://text/plain;base64,[执行脚本]
base64编码是 出现+号 在URL中 出现 需要二次编码

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

篮之新喜

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表