文件包含
【Web Level1】张Sir_include_丁真
题目分析
这道题可以选择多个不同的丁真图片进行显示,题目中提示可以看地址的变化
题解
在切换图片时,可以发现这部分在不断变化
http://121.43.55.52:10086/?file=include%2F file2 .php&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2 当改为file6时出现了提示
此时我们把地址栏的 file6.php 改为 flag.php
查看页面代码得到提示
!–Hint:https://blackdn.github.io/2020/04/04/CTF-File-Inclusion-2020--
一个很有用的网址,这里存一下
https://blackdn.github.io/2020/04/04/CTF-File-Inclusion-2020/
打开后进入一个网站,本题我们需要的部分是php://fileter/
php://filter/是一种访问本地文件的协议 当它与包含函数(常为include())结合时,php://filter流会被当作php文件执行。所以我们一般对其进行编码,让其不执行,从而实现任意文件读取
构造方法
?file=php://filter/read=convert.base64-encode/resource=index.php 解读
- /read=convert.base64-encode/表示对读取数据进行base64编码
- resource=index.php表示目标文件为index.php
对于本题地址,添加为
出现一串编码
PCFET0NUWVBFIGh0bWw+DQo8aGVhZD4NCjwvaGVhZD4NCjxib2R5Pg0KPCEtLUhpbnQ6aHR0cHM6Ly9ibGFja2RuLmdpdGh1Yi5pby8yMDIwLzA0LzA0L0NURi1GaWxlLUluY2x1c2lvbi0yMDIwLy0tIT4NCjwvYm9keT4NCjxodG1sPg0KPD9waHANCmVjaG8gIk9oaGhoaGggeW91IGZpbmQgbXkgc2VjcmV0ICE8YnI+IjsNCmVjaG8gImZsYWcgaXMgaGVyZSx0cnkgdG8gZmluZCBpdDxicj4iOw0KZWNobyAicHJlc3MgRjEyIHRvIGdldCBoaW50PGJyPiI7DQovL2ZsYWd7Yjc5YTJmNTAtMjlkNi00YjhiLTllYWItMTU4OWU4MjEyN2JhfQo=
可以知道这是base64编码
解码得到可以得到本题的源码
1 |
|
得到flag
flag{09a81fd5-2f00-4a44-9cd8-3035b63888a5}
解题心得
这道题初步开始接触include漏洞, 并运用了php伪协议的知识, 对URL的内容划分有了更细致的了解
【Web Level 1】eazy include
题目分析
先阅读代码, 对代码进行分析
1 |
|
1.前四行内容能明白个大概, 不是太了解表示的什么意思
2.两个echo语句输出题目提示, 还是php伪协议的知识, 并且利用burp进行传参
3.定义一个 $a变量, 通过GET传参的方式进行赋值
4.一个if判断语句 isset($a) : 判断$a是否存在, 且赋值不为NULL类型。该函数的作用是确保 $a存在 file_get_contents($a, ‘r’) : 将整个文件读入一个字符串中 === : 严格比较, 值和类型都要相同
5.满足if条件后, 将flag.php文件包含进来, 并打印$flag变量(即题解flag)
题解
首先启动burp, 进入Proxy(代理)模块, 对网址进行拦截 再发送到Repeater模块 这道题中有一个关键的比较关键的函数file_get_contents(), 遇到这个函数时可以利用php://input进行绕过
1 | GET / HTTP/1.1 |
我们使用get传参的方式进行传参
1.在GET后面添加?a=php://input 2.在末尾进行传参, an easy include
1 | GET /?a=php://input HTTP/1.1 |
点击send按钮, 在Response部分得到flag
flag{I_know-that!!!you)got_It}
解题心得
通过这道题目, 学习了php://input的知识, 并且练习了burp的使用, 大概了解了Proxy模块, Repeater模块的用法。但是关于如何传参以及怎样是GET传参, 怎样是POST传参还是不太明白, 只知道在末尾加an easy include就是传参了, 对这个过程的运行不够了解
PS:部分版本burp有光标偏移的问题, 一个解决办法是将字体设置为楷体, 字号改为16
1.选择User options
2.选择Display 3.在HTTP Message Display里面, 将Font修改为 楷体 16pt 可以完美解决光标偏移问题
【Web Level3】EZ_require_once
题目分析
首先分析代码
1 | <?php |
这部分涉及到一个比较关键的函数是require_once
1.include() : 包含并运行指定文件
2.require() : 同include,但是处理失败的方式,require在出错时会产生 E_COMPILE_ERROR 级别的错误,include只会产生E_WARNING级别的警告
3.include_once() : 同include, 检查该文件是否已经被包含过,如果是则不会再次包含.
4.require_once() : 同require, 检查该文件是否已经被包含过,如果是则不会再次包含.
以上四个函数在文件包含中用到的比较多, 这道题考察的是如何跨过once的检测
题解
有一个小技巧/proc/self/root/就是指向/的链接, 然后在后面加多个/proc/self/root/的循环, 就可以绕过once函数了
很神奇, 不知道原理是什么, 私自猜测原因与get传参有字符限制有关, get传参一个参数最多只能传入固定最大值(好像是2000)以内的字符量, 通过多个/proc/self/root/的循环, 超过这个最大值, 因此使once的包含判断失效
之后得到一堆base64编码, 将其解码 拿到flag flag{d436eb0-d9de10b5-a828ce643-f7e81}
解题心得
文件包含漏洞一般是挖掘include()以及require()函数的漏洞, 前两道题没有once的限制, 可以进行多次包含, once的限制使得我们需要绕过once对是否包含的检测, 难度陡然提升了
【Web level5】A_Good_Pear
题目分析
反反复复看了多遍周总结回放讲解, 仍然是一知半解, 从传y2参数和后面的命令开始, 逐渐听不懂,先简单记录一下解题的步骤
题解
- 进行burp抓包
- 先用伪协议php://input传入一个y1 = ‘PEAR’
- 显示成功
- 下面可以传入y2了
- 接下来连接蚁剑
- 找到flag结束
?y1=php://input&y2=/usr/local/lib/php/pearcmd.php&+config-create+/+/var/www/html/shell.php 里面不能有多余的空格 /<?后面不是php, 是=, 写php会失败(不清楚原因)
本周总结
对php中的很多函数还没有细致的了解,burp的使用不够熟练。下一步要把这两块补起来,建立好知识的框架