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