看看这次能不能进决赛吧. 感觉是感慨良多…12h打的真是
0x00. 插曲
传说中的CTF搅屎棍?开赛前1h服务器就被DDOS打成了(~ ̄(OO) ̄)ブ…… 502/404不断,唔…下面的360wzws醒目
0x01.web文件上传
发现上传后的目录地址:http://114.215.129.72:10080/uploads/,但是提示403权限不够. 开始的页面通过一个GET的请求option参数跳转,测试发现还存在 common.php , home.php,upload.php三个.尝试直接构造option=XXX
- home.php,common.php,upload.php直接访问无任何响应,空白页面. 返回200….. 估计是因为参数缺少
传入非.png文件报错Error,传入PNG文件直接返回500,但是没有错误信息…
http://114.215.129.72:10080/?op=show&imagekey=ac76461ad04ede907ef961a173ee10c263405a9a
可以看到上传完成后是op=XXX & imagekey= xxx .猜测文件包含漏洞先. 首先尝试常见的本地包含.
嘿,发现真的有一个提示,经过尝试发现它把..ban了 而. 没被ban,尝试之前试的重复绕过.发现也不行.考虑使用file://绕过
但是发现猜测远程路径都不对.试试本地路径file:// ,发现也不行… 那考虑最后的php:// ,果然没让我失望:
构造http://114.215.129.72:10080/?op=php://filter/read=convert.base64-encode/resource=common
爆出base64后的编码.转码后
common.php
1 |
|
upload.php
1 | // 注意: 其中/* */注释的前端页面是因为hexo没法解析html掺杂其中,是原本不需要的. |
index.php
1 |
|
show.php
1 |
|
但是发现上传任何文件都会报500,不管是真实的9*9的png还是shell. 然后发现源码中的所有 <%= msg %> 都没有执行. 包括MAX_SIZE也不执行,醉封了简直. 强烈怀疑是不是题目自己关了小脚本的执行权限啊……哇所有错误都是报Error,不会有提示.
然后考虑php可能的所有执行协议:
ftp:// — Accessing FTP(s) URLs
php:// — Accessing various I/O streams
zlib:// — Compression Streams
data:// — Data (RFC 2397)
glob:// — Find pathnames matching pattern
phar:// — PHP Archive
ssh2:// — Secure Shell 2
rar:// — RAR
ogg:// — Audio streams
expect:// — Process Interaction Streams
发现关键问题在于所有请求都是500,这根本没法注入呀…… 最后实在无奈开御剑加上CTF专用字典,扫到flag.php……(??
最后构造payload:http://114.215.129.72:10080/?op=php://filter/read=convert.base64-encode/resource=flag
完全没看懂这题在考什么?crazy
0x02.random(web)
这个题的源文件藏的很过分.curl获取不到,开始直接排除了,后面不说浪费了多少时间.(.index.php.swp注释的response里面.)
1 |
|
由mt_srand(time())可知,时间戳被作为随机数生成的种子。time()会返回精确到秒的时间戳,如果服务器时间和本地时间的误差在1s以内,就有机会在本地产生与服务器相同的时间戳,也就意味着本地和服务器可以传入同样的seed,进而生成相同的随机的字符串$pwd。
由此$pwd == $_GET['pwd']可被绕过。
如果cookie中没带session key就被认为是新的session。新session的$SESSION['login']的值为空,因此只要传空字符串即可绕过$_SESSION[***] == $_GET['login']。
最后用curl携带pwd和login两个参数发起GET请求,即可得到flag。php脚本如下:
1 |
|
0x03. web300
上来直接给源码 ,提示拿到shell就会有flag
1 |
|
尝试构造' 报错.因为发现这个没有被万恶的WAF包含. 还有( ) ,以及# , . $ =
1 | Parse error: syntax error, unexpected ''' (T_ENCAPSED_AND_WHITESPACE) |
尝试构造:
1 | content = '()' |
**更新:**这个参考p牛的安全blog,如何不使用字母绕过WAF(P牛blog地址自寻~)
0x04.星球大战(web)
上来是一个完整的网站了感觉.
随便扫描发现一堆问题…..我看了一下分值,发现事情并不简单.
phpinfo文件发现存在远程文件上传,allow_url_fopen=on .
然后发现存在好几个反射形跟存储型XSS,以及CSRF的可能. 还是老话,先找源码………..
几个醒目的XSS提醒我们….这题可能不是简单的XSS……





