PORT51
一上来看有点懵逼,以为是Burp抓包。最后 google 后发现应该在 vps 上(不用 vps 的话经过路由器可能端口就变了)用以下命令就可以。
1 | curl --ocal-port http://xxx.com |
之前没有接触过 curl,只是在 docker 里面用过一次。
1 | curl就是:Linux中利用 URL 规则在命令行下工作的文件传输工具,可以说是一款很强大的 http 命令行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称 curl 为下载工具。 |
LOCALHOST
burp 抓包添加头
1 | X-Forwarded-For: 127.0.0.1 |
Login
抓包后发现 Hint:
1 | "select * from 'admin' where password='".md5($pass,true)."'" |
首先想到MD5注入。
具体原理:
- 提价传入的 password 如果是特殊字符串,那么该字符串转化为 MD5 再经过 PHP 转化为字符串后变成:
'or'6蒥欓!r,b - 那么最后的sql语句则变成:
select * fromadminwhere password=''or'6蒥欓!r,b'即成功闭合了 ‘ bypass成功。
神盾局的秘密
发现 url 里面有 base64 编码。猜测是利用 base64 访问任意文件。 分别读取 index.php,shield.php。审计源码发现存在反序列化漏洞。 通过脚本:
1 |
|
生成序列化串:
1 | O:6:"Shield":1:{s:4:"file";s:8:"pctf.php";}` |
访问:
1 | http://web.jarvisoj.com:32768/index.php?class=O:6:%22Shield%22:1:{s:4:%22file%22;s:8:%22pctf.php%22;} |
查看源码得flag
IN A Mess
右键源码发现注释Hint: index.phps 。访问后,发现源码:
1 |
|
题目意思是:GET传三个字符参数,然后每个参数满足以下条件:
1 id是字符,还需要值为0.所以利用php弱类型0a即可让字符0a转化成数字0
2 a是一个文件(file_get_contents()函数提取a的内容赋值给data),那么可以是自己vps创建一个文件,也可以利用伪协议php://input。
3 b满足长度大于5,eregi()里面满足第一个字符为4,substr()里面又需要满足b首字母=4.那么我们可以利用%00截断:b=%0011111即可绕过substr和eregi(),eregi(“111”,“1114”)满足。同时%00对strlen不会发生截断。
饶过后发现
/^HT2mCpcvOLf访问自动补全: `1
http://web.jarvisoj.com:32780/%5eHT2mCpcvOLf/index.php?id=1
猜测是注入漏洞,上 sqlmap 发现有 waf。过滤了空格关键字,空格可以内敛注释绕过,关键字发现只过滤了一次直接双写绕过。然后常规注入得flag。
RE?
一看题目和.so的文件有点害怕,完全没思路。 google后才知道 mysql 可以导入进去。
导入到 plugin 文件中,利用该文件创建函数 help_me(提示): create function help_me returns string soname 'udf.so'
然后 select heilp_me; 提示:use getflag function to obtain your flag! 模仿前面创建一个getflag函数调用的flag。
flag在管理员手里
首先想到前端认证抓个包发现 cookie 里面有个 guest,改成 admin 无果。别的地方貌似没有突破口。那就扫一下敏感目录吧。御剑,AWVS 无果。
发现一个新的py脚本动态多线程工具:weakfilescan 附链接:
1 | https://github.com/ring04h/weakfilescan |
命令:
1 | python wyspider.py http://web.jarvisoj.com:32778 |
发现有个 index.php~,下载 notepad++ 打开发现乱码,挠头。。。 经过尝试发现 linux 有个查看文件的命令: #file xxx 然后尝试一下发现是: vim swap file 对于swap是交换的意思,google后发现是vim在编辑的时候强制退出而生成的文件,可以用命令: vim -r index.php.swp 来恢复,恢复后发现源码:
1 |
|
发现最关键的是要绕过:
1 | $role==="admin" && $hsh === md5($salt.strrev($_COOKIE["role"] |
利用 hash 扩展攻击即可,hash 拓展攻击下篇详细总结一下。可以利用 hashpump 直接爆破出 role 和 hsh。不过需要注意题目反转反序列化传入顺序。 最后payload:
1 | role = s%3a5%3a"admin"%3b%00%00%00%00%00%00%00%c0%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%80s%3a5%3a"guest"%3b` |
[61dctf]admin
抓包后发现貌似和flag在管理员手机的题目有点相似,扫目录发现有 robots.txt。访问后发现 .php 访问的 flag 提交竟然不对。突然发现flag是flag{hello guest},而题目是 admin 显然这是个假 flag。
然后尝试抓包的真flag。
api调用
Hint:请设法获得目标机器/home/ctf/flag.txt中的flag值。
则想办法文件读取。加上题目提示很容易想到调用别的东西来文件读取。
右键看页面源码发现有json和xml。可能就是 xml 注入进行任意文件读取。 抓包把content-type=json改成content-type=xml。然后传一段任意文件读取的xml代码:
1 | <?xml version="1.0" encoding="UTF-8" ?> |
有关于 xml 的知识之前也是接触过 XEE 外部实体注入漏洞。后面可能出一篇能用的 xml 知识。