PHP-代码审计-SQL注入
生活随笔
收集整理的這篇文章主要介紹了
PHP-代码审计-SQL注入
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
代碼審計
白盒測試
- 搭建成功后 用WEB漏洞掃描工具
- 利用網(wǎng)站的源碼進行代碼審計
準(zhǔn)備工作
- 漏洞參數(shù)條件:函數(shù) 可控變量
- 列如sql注入
- 函數(shù)關(guān)鍵字:mysql_connect mysql_select_db mysql_query 等
- 可控變量關(guān)鍵字:$_GET $_POST $_REQUEST $_SERVER等
定點漏洞挖掘
- 分析漏洞產(chǎn)生條件
- 得到漏洞關(guān)鍵字
- 利用工具查找關(guān)鍵字
- 分析文件名進行判斷篩選
- 對文件進行代碼分析 跟蹤變量
- 確定是否存在該漏洞
數(shù)據(jù)庫監(jiān)控工具挖掘
- 打開審計插件mysql監(jiān)控工具
- 輸入mysql賬號密碼點擊下斷和更新
- 登陸要審計的頁面
- 并且吧各個功能點都點一遍
- 回到源代碼審計工具
- 點擊更新
- 看到變量中帶值的的sql語句就可能是注入點
- 復(fù)制帶值的sql語句部分
- 粘貼到包含文本,并輸入搜索的文件和范圍,一般文件就是php文件
- 點開一個看起來不像配置文件的文件
- crtl + f 搜索剛剛粘貼的關(guān)鍵字
- 找到帶參數(shù)id的sql語句
- 如果包含該參數(shù)有變量,就需要回調(diào)該變量,觀察該變量過濾規(guī)則,從觀察是否存在過濾不完整
- dvwa用的isset函數(shù),沒有過濾的意思,所以不必回調(diào)
- 所以該頁面沒有任何過濾,存在sql注入
SEAY源代碼工具挖掘
- 首先打開seay源代碼審計工具
- 點擊新建項目導(dǎo)入源碼
- 點擊自動審計
- 可以看到一堆漏洞
- 我們點擊sql注入這個
產(chǎn)生漏洞 條件
- 函數(shù)關(guān)鍵字:mysql_connect mysql_select_db mysql_query 等
- 可控變量關(guān)鍵字:$_GET $_POST $_REQUEST $_SERVER等
- 該沒有可控變量關(guān)鍵字,我們假設(shè)他有關(guān)鍵字$_GET
- 可以看到使用了變量傳入,并且有函數(shù)包裹所以我們要回調(diào)函數(shù)
- 我們復(fù)制該函數(shù)名
- 在本文中查找該函數(shù)
- 可以看到該函數(shù)的定義是
- 如果條件存在就將輸入的字符轉(zhuǎn)義
- 我們查一下該條件到底是什么
- 使用了兩個函數(shù):function_exists()和get_magic_quotes_gpc()
- 第一個是定義是否傳來字符串
- 第二個是定義傳來的銘感字符添加轉(zhuǎn)義
- 再回到這邊來
- 如果那邊的條件成立,則根本不存在注入
- 因為他規(guī)定了輸入必須是字符還有轉(zhuǎn)義威脅字符
- 所以該位置不存在注入
- 我們現(xiàn)在做一個假設(shè)
- 如果沒有必須是字符串的條件
- 他只是過濾了單引號等字符
- 而該sql語句并沒有吧字符寫死在里面
- 則該位置就存在漏洞,因為他過濾的是字符單引號等字符,但是我們可以不用字符,使用整形注入
- 現(xiàn)在假設(shè)他真的就存在這么一個漏洞
- 通常情況是觀察該類在那位置實例化,可以是本文,也可以是外部調(diào)用,所以本文和外部調(diào)用我們都要搜索是否存在
- 我們搜索該類的時候發(fā)現(xiàn)沒有任何文件調(diào)用(此處無圖),所以他肯定就是在本頁面中使用
三種情況
-
一種是在其他文件實例化,一種是在本文件實例化,還有一種是在類中調(diào)用
-
文件實例化:就要通過全文函數(shù)搜索,去找到實例化的文件,然后再通過該傳參條件,在外部文件構(gòu)造sql語句
-
本文件實例化和類中調(diào)用都直接在當(dāng)前文件構(gòu)造sql語句即可
-
通過在本文搜索,搜索他當(dāng)前所在的函數(shù)
-
發(fā)現(xiàn)該函數(shù)就是在類中調(diào)用
-
找到該語句,根據(jù)其條件,構(gòu)造出利用姿勢
-
如:php?funcName=unique&value=1
-
反正不是盲注就是顯注入或報錯注入
-
觀察應(yīng)該是盲注
-
如果真的要確定是什么注入就跟一下條件語句中的函數(shù),看他怎么處理即可
這里假設(shè)變量都是用get傳參(圖中小紅方塊),因為該源碼沒有吧參數(shù)傳遞給用戶,所以將就假設(shè)一下,方法都一樣
如
funcName=funcName=funcName=_GET[‘unique’];
value=value=value=_GET[‘unique’];
總結(jié)
以上是生活随笔為你收集整理的PHP-代码审计-SQL注入的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: asp-Webshell免杀
- 下一篇: PHP-代码审计-审计第一步