【安全漏洞】Easy代码审计
環境說明:
系統:Windows 10
集成環境:phpstudy
php版本:7.3.4
mysql版本:5.7.25
cms版本:7.7.4
【查看資料】
前言
現在cms一般都是基于MVC思想去開發,所以在審計這個cms時我是直接從控制器開始看的,thinkphp與laravel等開發框架會把控制器放在controller目錄,這個cms的控制器是在lib目錄。
目錄結構
cmseasy/ |-- admin |-- api |-- apps |-- cache |-- cn |-- common |-- config |-- data |-- en |-- html |-- images |-- install |-- jp |-- lang |-- lib |-- license |-- readme |-- sitemap |-- sk |-- template |-- template_admin |-- ueditor |-- wap `-- webscan360開始審計
1.SQL注入
1.在文件lib/admin/database_admin.php的dorestore_action()方法接收到GET參數db_dir后會使用front::scan($dir)函數獲取該目錄下的文件名,然后將目錄名與文件名傳遞給 tdatabase::getInstance()->restoreTables()函數,跟進該函數。
2.在文件lib/table/tdatabase.php的restoreTables函數可以看到,file_get_contents()函數讀取文件內容后進行了字符替換與字符分割,文件內容被賦值給變量sqls,然后賦值給q,最終傳遞到$this->query()函數執行,繼續跟進該函數。
3.在文件lib/inc/table.php的query函數,sql語句被傳遞給了this->db->query() 函數。
4.在文件lib/inc/dbmysqli.php的query函數,sql被傳遞給this->mysqli->query() 函數執行了,而在這個文件中可以看到 $this->mysqli 是mysqli 類實例化的對象。一路跟下來從文件讀取內容到被執行SQL語句沒有做任何安全處理。
5.從以上代碼分析可知該SQL注入需要配合文件上傳。
6.首先上傳一個文件,該文件寫入 sql 語句,注意這個文件需要是目錄下的第一個文件,否則sql語句可能會查詢失敗。
將靜態文件目錄設置為 /,點擊保存。這樣可以保證目錄下的第一個文件就是我們上傳的。
上傳文件使用 burpsuite 抓包將內容修改為sql注入語句。
7.觸發SQL注入漏洞,這里其實也存在文件讀取漏洞。
2.任意文件寫入getshell
1.在文件lib/admin/table_admin.php的edit_action() 函數下,存在 file_put_contents 函數進行寫入操作,文件名后綴默認為 php,POST的所有內容會在序列化之后放到 tagconfig變量,最后執行fileputcontents將tag_config 變量內容寫入 php 文件。雖然 POST 的內容有被過濾,但是 POST 的參數名沒被過濾,也就是說我們可以通過參數名寫入 webshell。
2.發送構造好的請求包寫入 webshell,沒有回顯但是沒有關系文件名是可預判的。
3.訪問webshell
總結
SQL注入:從文件中獲取SQL語句,如果文件名與內容可控那么就可能存在SQL注入。
任意文件寫入getshell:雖然POST參數的值有被過濾,但是由于使用了序列化函數導致仍然可以通過參數名寫入惡意代碼。
最后
關注我-持續更新······
私我獲取【網絡安全學習資料·攻略】
總結
以上是生活随笔為你收集整理的【安全漏洞】Easy代码审计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【WEB安全】flask不出网回显方式
- 下一篇: 【网络安全】一次授权的渗透测试