浅谈.user.ini创建PHP后门

它比.htaccess用的更广,不管是nginx/apache/IIS,只要是以fastcgi运行的php都可以用这个方法。

0x01 .user.ini

.ini文件,通常是程序的配置文件

什么是.user.ini?那就先要从php.ini说起

php.ini是php的默认配置文件,其中包含了PHP的很多配置,在这些配置根据可修改范围又分为好几种:

PHP_INI_SYSTEM、PHP_INI_PERDIR、PHP_INI_ALL、PHP_INI_USER

详情请看:

image-20220907222257841

其中就提到了,模式为PHP_INI_USER的配置项,可以在ini_set()函数中设置、注册表中设置,再就是.user.ini中设置。 这里就提到了.user.ini,那么这是个什么配置文件?那么官方文档在这里又解释了:

除了主 php.ini 之外,php还会在每个目录下扫描 ini 文件,从被执行的 php文件所在目录开始一直上升到 web 根目录($_SERVER['DOCUMENT_ROOT'] 所指定的)。如果被执行的 php 文件在 web 根目录之外,则只扫描该目录。

在 .user.ini 风格的ini文件中只有具有 PHP_INI_PERDIR 和 PHP_INI_USER 模式的 ini 设置可被识别。

这里就很清楚了,.user.ini实际上就是一个可以由用户“自定义”的php.ini,我们能够自定义的设置是模式为“PHP_INI_PERDIR 、 PHP_INI_USER”的设置。(上面表格中没有提到的PHP_INI_PERDIR也可以在.user.ini中设置)

实际上,除了PHP_INI_SYSTEM以外的模式(包括PHP_INI_ALL)都是可以通过.user.ini来设置的。

而且,和php.ini不同的是,.user.ini是一个能被动态加载的ini文件。也就是说我修改了.user.ini后,不需要重启服务器中间件,只需要等待user_ini.cache_ttl所设置的时间(默认为300秒),即可被重新加载。

然后在php.ini中的配置项中,只要稍微敏感的配置项,都是PHP_INI_SYSTEM模式的(甚至是php.ini only的),包括disable_functions、extension_dir、enable_dl等。 不过,我们可以很容易地借助.user.in文件来构造一个“后门”。

php配置中有两个比较重要:

enter image description here

auto_append_file、auto_prepend_file

指定一个文件,自动包含在要执行的文件前,类似于在文件前调用了require()函数。而auto_append_file类似,只是在文件后面包含,具体在dreamer_lk师傅的简书博客有详细提及

使用方法也是很简单,直接写在.user.ini文件即可

auto_prepend_file=1.png

1.png是要进行文件包含操作的文件

所以,我们可以借助.user.ini轻松让所有php文件都“自动”包含某个文件,而这个文件可以是一个正常php文件,也可以是一个包含一句话的webshell。

那么就直接上题?

0x02 真题演示

题目来源:攻防世界web之easyupload

题目描述:一名合格的黑客眼中,所有的上传点都是开发者留下的后门

打开环境是一个文件上传窗口

image-20220907224032255

那就是要上传后门进行任意命令执行

窗口是上传头像的,那就是说上传的文件规定应该是图片文件

先在本地写一个.user.ini文件

image-20220907224811340

为保险起见,添加个文件头

使用burpsuite进行修改MIME数据

image-20220907225112981

返回上传成功的界面

image-20220907225138810

再进行伪造1.gif

image-20220907231918018

上传文件1.gif

在F12的网络调试器中发现文件上传的路径

image-20220907232035441

那就直接用蚁剑进行链接

image-20220907232405915

在根目录找到flag

image-20220907232505836

image-20220907232518171

flag

cyberpeace{c6d275e3d45b0f44c2596e0abae84b16}

PS:因为题目环境原因,导致做题时经常出现连接失败的问题,所以图中的题目地址有所变化,但是基本的思路跟方法完全正确

0x03 小结

从这个题我们可以简单地想一下,在哪些情况下可以用到这个姿势? 比如,某网站限制不允许上传.php文件,你便可以上传一个.user.ini,再上传一个图片马,包含起来进行getshell。不过前提是含有.user.ini的文件夹下需要有正常的php文件,否则也不能包含了。 再比如,你只是想隐藏个后门,这个方式是最方便的。

0x04 参考资料

http://php.net/manual/zh/ini.list.php

http://php.net/manual/zh/configuration.changes.modes.php

http://php.net/manual/zh/configuration.file.per-user.php

http://php.net/manual/zh/configuration.changes.php

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇