CTFWeb篇06-伪协议的利用

伪协议

Robots协议

  • 网络爬虫排除标准。查询方法:URL/robots.txt
  • robots.txt是搜索引擎中访问网站的时候要查看的第一个文件。
    • robots.txt 文件告诉蜘蛛程序在服务器上什么文件是可以被查看的。
    • 其中Disallow指令用于告诉搜索引擎的爬虫(spider)哪些页面或目录不应该被抓取。但该指令非强制,可凭借URL/(文件名)打开。
    • 当一个搜索蜘蛛访问一个站点时,它会首先检查该站点根目录下是否存在 robots.txt,如果存在,搜索机器人就会按照该文件中的内容来确定访问的范围;如果该文件不存在,所有的搜索蜘蛛将能够访问网站上所有没有被口令保护的页面。
      1.禁止抓取整个网站:
      User-agent: *
      Disallow: /——这将禁止所有爬虫抓取网站上的任何页面。
      2.禁止抓取特定目录:
      User-agent: *
      Disallow: /private/——这将禁止爬虫抓取网站中 private 目录下的所有页面。
      3.禁止抓取特定文件类型:
      User-agent: *
      Disallow: /*.pdf——这将禁止爬虫抓取所有 .pdf 文件。
      4.针对特定爬虫的禁止指令:
      User-agent: Googlebot
      Disallow: /nogooglebot/——这将只禁止 Googlebot 爬虫抓取 nogooglebot/ 目录下的所有页面。
      5.允许和禁止的组合使用:
      User-agent: *
      Disallow: /private/——Allow: /private/public/
      细则了解(需FQ)

PHP伪协议

  • PHP伪协议(PHP Wrappers)是PHP提供的一种特殊协议机制,允许开发者通过类似文件操作的接口访问不同的数据流或资源(如内存、输入输出流、压缩文件等)
  • 这些协议以特定的协议标识符(如 php://、data:// 等)开头,常用于动态处理数据
  • 有些伪协议成功执行需要allow_url_fopen和allow_url_include的支持。
    • allow_url_fopen On/Off 允许或禁止打开URL文件
    • allow_url_include On/Off 允许或禁止引用URL文件

什么时候使用PHP伪协议

  • 文件包含!!!的时候,可能遇到的文件包含函数有上面的危险函数

PHP://input

  • php://input:可以访问请求的原始数据的只读流。在post请求中能查看请求的原始数据,并将post请求中的post数据当作php代码执行。(只读流是说只能进行读操作的数据)
    • 条件:allow_url_fopen=off/on;allow_url_include=on,当enctype=”multipart/form-data” 的时候 php://input 是无效的
    • 查看题中的 phpinfor 查看php情况,一般文件名为phpinfor.php检查allow_url_include是否为on
    • 使用:BP抓包(当然也可以使用Hackbar。Ps.有时候hackbar不知道为什么出不来)将GET请求更改为POST请去,然后修改URL启用php://input,然后在body中加入php代码如<?php system('ls /');。以下图代码漏洞为例修改URL

      修改结果

php://filter

  • 条件:allow_url_fopen=onallow_url_include=on
  • 作用:是一种元封装器,设计用来数据流打开式的筛选过滤应用
  • 在利用上很多都是与包含函数结合使用,读入或者输出获取文件源码然后编码让其不执行从而输出
  • php://filter的参数
    • read=<读链的筛选列表>
      • read 对应要设置的过滤器:常见的过滤器分字符串过滤器、转换过滤器、压缩过滤器、加密过滤器
        • 其中convert.base64-encode ,convert.base64-decode都属于 转换过滤器
    • write=<写链的筛选列表>
    • resource=<声明过滤哪一个数据流>
    • 不指定读写:当不指定读写时会自己根据情况而定
  • 格式:php://filter/read=处理方式(base64编码,rot13等)/resource=要读取的文件
  • 可以直接构造:?file=php://filter/resource=../../../flag...(文件名)
  • 如果还要进行base64编码:http://URL/?file=php://filter/read=convert.base64-encode/resource=../../../flag

data://

  • 将数据直接嵌入URL中作为输入流。
  • 利用场景:可以通过请求提交的php代码数据配合文件包含函数可以达到代码执行效果,直接执行PHP代码或包含恶意内容
  • 格式:data://数据流封装器,相应格式数据
    • 示例:http://target.com/vuln.php?file=data://text/plain,<?php system("id");?>
    • 可以通过base64编码后再输入
      • ?page=data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=
  • 条件:allow_url_include=On

phar://

  • 访问PHAR(PHP归档文件)内的文件
  • 利用场景:触发反序列化漏洞或绕过文件扩展名限制
    • 示例:http://target.com/vuln.php?file=phar:///path/to/exploit.phar/evil.php
  • 条件:能上传PHAR文件,并且需提前上传

zip://与bzip://与zlib://

  • 访问ZIP压缩包内的文件,压缩后的zip文件可以随意修改后缀也不影响zip://协议读取(注意是如phpinfo.txt直接压缩为zip,而不是文件夹压缩zip)
  • 利用场景:绕过文件上传限制,执行压缩包内的PHP文件
    • 示例:http://target.com/vuln.php?file=zip://exploit.zip%23evil.php
  • 注意:%23是#的URL编码
  • 压缩文件为.zip后缀
    • zip://绝对路径/phpinfo.zip%23phpinfo.php
  • 压缩文件为.bz2后缀
    • compress.bzip2://绝对路径/phpinfo.zip/phpinfo.php
  • 压缩文件为.gz后缀
    • compress.zlib://绝对路径/phpinfo.zip/phpinfo.php

file://

  • 直接访问本地文件系统。
  • 利用场景:读取本地文件(需绝对路径)
    • 示例:http://target.com/vuln.php?file=file:///etc/passwd
  • 不受allow_url_fopen与allow_url_include的影响

安全风险

  • 文件包含漏洞利用
    • LFI(本地文件包含):通过伪协议读取敏感文件(如/etc/passwd、.env)
    • RFI(远程文件包含):结合http://协议加载远程恶意代码(需allow_url_fopen=On)
  • 代码执行:利用php://inputdata://直接注入PHP代码
  • 敏感信息泄露:使用php://filter绕过文件读取限制,获取源码或配置文件
  • PHP的协议通常是大小写不敏感的,比如PHP://INPUTphp://input是一样的,这可以成为一个绕过点
posted @ 2025-02-14 16:31  micryfotctf  阅读(221)  评论(0)    收藏  举报