<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          從Web日志還原SQL注入拖走的數(shù)據(jù)

          共 1953字,需瀏覽 4分鐘

           ·

          2021-04-10 14:18

          利用SQL注入漏洞拖庫,從而導(dǎo)致數(shù)據(jù)泄漏。一般的排查方式,我們可以使用關(guān)鍵字進行搜索,找到可疑的url嘗試進行漏洞復(fù)現(xiàn),通過Web訪問日志來還原攻擊路徑,從而確定問題的根源。

          但是,有一個問題卻一直困擾著我,攻擊者通過SQL注入漏洞到底獲取了什么數(shù)據(jù)?是所有的數(shù)據(jù),還只是訪問了其中的一張表?

          理論上,假設(shè)所有的url參數(shù)請求日志都記錄完整的話,只需要重放每一個請求,然后根據(jù)請求響應(yīng)的情況,就可以一步步還原出被攻擊者拖走的數(shù)據(jù)。為此,我們來搭建一個場景來做攻擊數(shù)據(jù)還原,驗證一下這個挺有意思的猜想。


          01、構(gòu)建SQL注入場景

          通過PHP+MySql構(gòu)建了一個GET請求的sql注入點,使用SQL注入自動化工具脫庫,在access.log產(chǎn)生訪問日志,我們以此作為分析源。

          Union聯(lián)合注入日志記錄:

          127.0.0.1 - - [04/Apr/2021:19:55:14 +0800] "GET /test.php?id=1+and+1%3D2+union+select+1%2C2%2Cconcat%280x7177657E%2Cschema_name%2C0x7E717765%29+from+information_schema.schemata HTTP/1.1" 200 329127.0.0.1 - - [04/Apr/2021:19:55:17 +0800] "GET /test.php?id=1++union+select+1%2C2%2Cconcat%280x7177657E%2Ctable_name%2C0x7E717765%29+from+information_schema.tables+where+table_schema%3D%27test%27 HTTP/1.1" 200 219127.0.0.1 - - [04/Apr/2021:19:55:21 +0800] "GET /test.php?id=1++union+select+1%2C2%2Cconcat%280x7177657E%2Ccolumn_name%2C0x7E717765%29+from+information_schema.columns+where+table_name%3D%27admin%27 HTTP/1.1" 200 247

          這里的三個請求,依次是Union聯(lián)合查詢數(shù)據(jù)庫庫名、表名以及表的列名的請求。

          02、簡單自動化實現(xiàn)

          大致實現(xiàn)的思路:讀取access.log文件,獲取url_path,拼接成完整的url,重放HTTP請求,匹配請求響應(yīng)的內(nèi)容,得到被攻擊者拖走的數(shù)據(jù)。

          為此,我自己動手嘗試實現(xiàn)了一個小demo來實現(xiàn)自動化。部分demo代碼,如下:

          def sql_log_analysis(path,pattern):  com = re.compile(pattern,re.I)  keys = com.findall(unquote(path))  a = keys[0][0].replace("0x","").decode('hex')  b = keys[0][2].replace("0x","").decode('hex')  url = domain_name+path  response = requests.get(url)  pattern = a+r"(.*?)"+b  com2= re.compile(pattern)    find_list=com2.findall(response.content)  if len(find_list)>0:    return keys,find_list

          代碼運行截圖:

          以上,就是一個簡單的自動化實現(xiàn)的過程,通過重放請求,反向還原SQL注入的過程,我們可以進一步了解到攻擊者到底動了哪些數(shù)據(jù)庫和表,甚至更詳細的數(shù)據(jù)字段。

          03、存在的幾個問題

          事實上,大部分的Web日志只記錄了GET類型的參數(shù)請求,而無法詳盡的記錄POST請求,這個給Web日志還原攻擊數(shù)據(jù)帶來極大的局限性。另外,不同的SQL注入類型,不同的SQL注入自動化工具,所構(gòu)造的SQL語句變化很多,這也會加大自動化實現(xiàn)的難度。

          基于以上,這種方式的應(yīng)用場景,可能更適用于小范圍內(nèi)特定的攻擊者請求日志,可以編寫腳本重放請求,還原攻擊者的SQL注入過程,獲悉被拖走的數(shù)據(jù)。

          瀏覽 83
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  在线无码高清视频 | 欧美亚洲成人在线 | 超碰中文在线 | 一级学生妹毛片性交免费视频 | 97香蕉久久国产超碰青草专区 |