本文內容:
~什麼是變量覆蓋
~函數解析
~補充
每日一句:
今天開始,有了代碼審計的影子。
這是成爲大佬的必經路,大家儘量都要學會
CNVD證書和代碼審計能力是安全方面找工作制高點
一、什麼是變量覆蓋
0,代碼審計方式
黑盒審計: 沒有源代碼,直接去測試
白盒審計: 給你源代碼,給你去測試
灰盒審計: 有源代碼,先用黑盒測試去,有問題在回頭看源代碼
從某種角度說,腳本小子與內行滲透人員的主要區別就在於:
是否可以進行白盒審計或者說是否會向這個方向思考
1,定義
指的是可以用我們的傳參值替換程序原有的變量值
例如:
<?php
$a = 1;
$a = fg; //在這就完成了覆蓋,是不是很簡單
echo a; //輸出“fg”
?>
2,尋找變量覆蓋
可能會有的場景:
~$$使用不當 //常見
~extract()函數使用不當 //常見
~parse_str()函數使用不當 //常見
~import_request_variables()函數使用不當
~開啓了全局變量註冊等等
二、函數解析
1,extract()
作用:將數組的對應變爲變量的對應
//php的數組: 由 key -- value 組成
例子:
<?php
$a = "1";
$my_array = array("a" => "Cat","b" => "Dog"); //定義數組
extract($my_array); //啓用函數
echo "a = $a; b=$b" //echo "\$a = $a; \$b = $b;";
?>
輸出內容:$a = Cat; $b = Dog; //這的變量a被成功覆蓋
補充:
php獲得GET與POST傳參,都會將其轉化爲數組形式
2,parse_str()
作用:將字符串變成變量
例子:
<?php
parse_str("name=sb&&age=60"); //啓用函數
echo $name."<br>";
echo $age;
?>
輸出內容:sb和60
3,符號導致(如$$)
不僅函數會造成變量覆蓋,有些符號的特殊搭配也會造成變量覆蓋
例子:
<?php
$a='b';
$b='c';
echo $$a; $$a => $b => c
?>
輸出結果:c
像這種並不是開傻,只是開發爲了實現某些功能,而這麼寫的
比如,這個漏洞就在dede織夢的某個版本中存在。也是爲了實現
將傳參變爲變量,只是沒有進行合適檢查過濾
4,一個代碼審計小工具
Seay源代碼審計系統,感覺還可以,就是規則稍微有點陳舊,可以自己增加
建議:不要依賴工具,沒好處,對自己的成功不是太有利
5,php一些代碼
exit與die 這樣的字眼,一般不能讓他觸發。讓他執行,下邊的語句就不執行了
補充一下:php的$_REQUEST
在低版本中,接收 get與post與cookie的傳參
在高於5.2中,不接受cookie
6,舉例危害
假設原本代碼:
$_a = 'phpinfo();'
------
很多別的功能模塊
-----
eval($a) //這要輸出a的內容展示給用戶
因爲本來這都是寫死的代碼,是沒有辦法進行改動的,所以是認爲安全的。
但是一個項目(工程)往往都是一個團隊一起開發的,所以,
如果某位開發安全意識不夠。他的功能模塊出現了:
extract($_GET),且無檢查過濾。
最終的結果就是這樣:
$_a = 'phpinfo();'
------
extract($_GET)
-----
eval($a)
這樣就出現了變量覆蓋漏洞。所以很多漏洞並沒有多複雜
沒有無緣無故就出現的漏洞,絕大多數漏洞都是傳參不可控
三、補充
1,漏洞分類
~事件型漏洞 :僅針對某站點
~通用性漏洞 :一般針對某一套CMS,或者web容易,往往一打一大片
~白盒審計 : 擁有源代碼找漏洞 = 代碼審計
~黑盒測試 : 入侵 [黑盒測試他是有侷限性的]
補,白盒審計可以更好更徹底的找出漏洞
一般挖掘SRC,想拿通用性,推薦CMS白盒審計
2,CMS的通殺用處
~可以獲得CNVD原創漏洞證書
~CMS可以說是關注資產,你可以直接換錢
~CMS通殺可以幫你找到N個漏洞
3,CNVD證書的一些建議
~有沒有CNVD證書是一類區分
~但是30個CNVD證書與100個是基本沒有區別的
即有沒有很重要,多少相對不是太重要
4,出現危險函數造成漏洞的條件
~危險函數的傳參可控
~危害函數執行需要的條件被滿足
~危險函數上邊代碼中的 die與exit不能執行