freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

網(wǎng)絡(luò)信息安全-資料下載頁

2025-07-17 22:13本頁面
  

【正文】 Linux下發(fā)掘程序的 buffer overflows漏洞 ? 利用 shellcode構(gòu)造出一個 buffer ? 猜測返回地址 ? 從棧頂 (固定 )一直往下猜,兩個參數(shù): ?Retval的個數(shù) ?緩沖區(qū)離棧頂?shù)钠? Ret val shellcode Ret val Ret val … …… para1 Retadd 正常的 Buffer 高地址 低地址 ? 改進:提高猜中的概率 Ret val shellcode Ret val NOPs Ret val … Buffer: 91 緩沖區(qū)溢出攻擊 ? 4. 緩沖區(qū)溢出防御措施 ? ( 1) 安裝安全補丁 。 ? ( 2) 編寫安全的代碼 :緩沖區(qū)溢出攻擊的根源在于編寫程序的機制。因此,防范緩沖區(qū)溢出漏洞首先應(yīng)該 確保 在 Linux系統(tǒng)上運行的程序(包括系統(tǒng)軟件和應(yīng)用軟件) 代碼的正確性 , 避免程序中有不檢查變量、緩沖區(qū)大小及邊界等情況存在 。比如,使用 grep工具搜索源代碼中容易產(chǎn)生漏洞的庫調(diào)用,檢測變量的大小、數(shù)組的邊界、對指針變量進行保護,以及使用具有邊界、大小檢測功能的 C編譯器等。 92 緩沖區(qū)溢出攻擊 ? ( 3) 基于一定的安全策略設(shè)置系統(tǒng) :攻擊者攻擊某一個 Linux系統(tǒng),必須事先通過某些途徑對要攻擊的系統(tǒng)做必要的了解,如版本信息等,然后再利用系統(tǒng)的某些設(shè)置直接或間接地獲取控制權(quán)。因此,防范緩沖區(qū)溢出攻擊就要對系統(tǒng)設(shè)置實施有效的安全策略。這些策略種類很多,下面只列舉幾個典型措施。 ?在裝有 Tel服務(wù)的情況下,通過手工改寫 “ /etc/‖文件中的 Tel設(shè)置,使得遠程登錄的用戶無法看到系統(tǒng)的提示信息。具體方法是將 Tel設(shè)置改寫為: tel stream tcp nowait root /usr/sbin/tcpd/ h末尾加上 “ h‖參數(shù)可以讓守護進程不顯示任何系統(tǒng)信息,只顯示登錄提示。 ?改寫 “ ‖文件。默認情況下,當(dāng)?shù)卿?Linux系統(tǒng)時系統(tǒng)運行 ,顯示該 Linux發(fā)行版本的名字、版本號、內(nèi)核版本和服務(wù)器名稱等信息,這使得大量系統(tǒng)信息被泄露。將 “ ‖文件中顯示這些信息的代碼注釋掉,可以使系統(tǒng)不顯示這些信息。 93 緩沖區(qū)溢出攻擊 ?一種方法是在顯示這些信息的代碼行前加 “ ‖: – … echo /etc/issue – echo $R/etc/issue – echo Kernel $ (uname r)on $a $(uname m)/etc/issue – – echo /etc/issue… ?另一種方法是將保存有系統(tǒng)信息的文件 /etc/ issue刪除。這兩個文件分別用于在遠程登錄和本地登錄時向用戶提供相關(guān)信息。刪除這兩個文件的同時,仍需要完成方法一中的注釋工作,否則,系統(tǒng)在啟動時將會自動重新生成這兩個文件。 – 禁止提供 finger服務(wù)。使用 finger命令可以顯示本地或遠程系統(tǒng)中目前已登錄用戶的詳細信息。禁止提供 finger服務(wù)的有效方法是,通過修改該文件屬性、權(quán)限,使得只有 root用戶才可以執(zhí)行該命令。 – 處理 “ ‖文件。該程序通過 “ /etc/‖文件獲得 id在監(jiān)聽哪些網(wǎng)絡(luò)端口,為每個端口啟動哪些特定服務(wù)等信息,會泄露大量的敏感信息。 94 緩沖區(qū)溢出攻擊 ? ( 4)保護堆棧 ?加入函數(shù)建立和銷毀代碼。前者在函數(shù)返回地址后增加一些附加字節(jié),返回時要檢查這些字節(jié)有無被改動。 ?使堆棧不可執(zhí)行 ——非執(zhí)行緩沖區(qū)技術(shù),使入侵者無法利用緩沖區(qū)溢出漏洞。 95 為什么不寫出不受影響的代碼來? ? 編程的問題都可以在開發(fā)階段防止,事實上,并沒有這么簡單 ? 有些開發(fā)人員沒有意識到問題的存在 ? 有些開發(fā)人員不愿意使用邊界檢查,因為會影響效率和性能 ? 另一方面,許多遺留下來的代碼還很多 ? 在開發(fā)過程中,盡量使用帶有邊界檢查的函數(shù)版本,或者自己進行越界檢查 96 一些典型的 buffer overflows漏洞 ? NetMeeting buffer overflow ? 文章 “ The Tao of Windows Buffer Overflow”描述了漏洞發(fā)掘過程 ? Outlook ? 當(dāng)客戶接收郵件的時候,畸形的郵件頭信息會導(dǎo)致 buffer overflows,然后就可以執(zhí)行惡意代碼或者拒絕服務(wù) ? Linuxconf ? Linuxconf允許遠程通過 Web對系統(tǒng)進行管理,當(dāng)收到的 頭中包含過量的信息時,會產(chǎn)生緩沖區(qū)溢出 ? ToolTalk ? ToolTalk是一個 RPC服務(wù),攻擊者連接到 ToolTalk端口,然后發(fā)送包含惡意代碼的命令,可導(dǎo)致緩沖區(qū)溢出 ? …… (大量的服務(wù)器應(yīng)用程序都包含 buffer overflows漏洞 ) 97 格式化字符串攻擊 ? 格式化字符串攻擊也稱為格式化字符串漏洞,同其他許多安全漏洞一樣是由于程序員的疏漏造成的。不過,這種疏漏來自程序員使用格式化字符串函數(shù)的不嚴謹。 98 格式化字符串攻擊 ? 1. 格式化字符串函數(shù)族 ? ANSI C定義了一系列的格式化字符串函數(shù),如 ? printf——輸出到一個 stdout流。 ? fprintf——輸出到一個文件流。 ? sprintf——輸出到字符串。 ? snprintf——輸出到字符串并檢查長度。 ? vprintf——從 va_arg結(jié)構(gòu)體輸出到一個 stdout流。 ? vfprintf——從 va_arg結(jié)構(gòu)體輸出到一個文件流。 ? vsprintf——從 va_arg結(jié)構(gòu)體輸出到一個字符串。 ? vsnprintf——從 va_arg結(jié)構(gòu)體輸出到一個字符串并檢查長度。 ? 基于這些函數(shù)的復(fù)雜函數(shù)和非標準函數(shù),包括 setproctitle、 syslog、 err*、 verr*、warm、 *vwarm等。 ? 這些函數(shù)有一個共同的特點,就是都要使用一個格式化字符串。例如對于大家熟悉的 prontf函數(shù),它的前一個參數(shù),就是格式化字符串。 99 格式化字符串攻擊 ? 2. 格式化字符串漏洞 ? 為了說明對格式化字符串使用不當(dāng)而產(chǎn)生的格式化字符串漏洞,請先看下面的程序。 – 例 2 – include – int main() – { – char *name。 – gets(s)。 – printf(s)。 – } 100 abcde abcde%08x,%08x,%08x 000002e2,0000ffe4,0000011d 格式化字符串攻擊 下面是該函數(shù)的兩次運行結(jié)果 101 格式化字符串攻擊 ?也就是說,當(dāng)輸入 “ abcde‖時,輸出仍然是 “ abcde‖。而當(dāng)輸入“ %08x,%08x,%08x‖時,輸出的卻是 “ 000002e2,0000ffe4,0000011d‖。這就是格式化字符串漏洞所造成的問題。因為,在 printf函數(shù)中, s被解釋成了格式化字符串。當(dāng)調(diào)用該函數(shù)時,首先會解析格式化字符串,一次取一個字符進行分析:如果字符不是 “ %‖,就將其原樣輸出;若字符是 “ %‖,則其后面的字符就要按照格式化參數(shù)進行解析。當(dāng)輸入 “ abcde‖時,由于沒有包含 “ %‖,所以每個字符都被原樣輸出了。而當(dāng)輸入 “ %08x,%08x,%08x‖時,就要將每個 “ %‖后面的 “ x‖都解釋為一個十六進制的數(shù)據(jù)項,但函數(shù)沒有這樣 3個數(shù)據(jù)項。于是,就將堆棧中從當(dāng)前堆棧指針向堆棧底部方向的 3個地址的內(nèi)容按十六進制輸出出來,這就是 “ 000002e2,0000ffe4,0000011d‖。 ?這就給人們一個啟發(fā):當(dāng)格式化字符串中包含有許多 “ %‖時,就會有機會訪問到一個非法地址。 102 格式化字符串攻擊 ? 3. 格式化字符串攻擊的幾種形式 ? ( 1)查看內(nèi)存堆棧指針開始的一些地址的內(nèi)容 由例子可知,使用類似于 printf (―%08x,%08x,%08x‖)。 的語句,可以輸出當(dāng)前堆棧指針向棧底方向的一些地址的內(nèi)容,甚至可以是超過棧底之外的內(nèi)存地址的內(nèi)容。 ? ( 2)查看內(nèi)存任何地址的內(nèi)容 所查看的內(nèi)存地址內(nèi)容,也可以從任何一個地址開始的內(nèi)存內(nèi)容。例如語句 printf (―\x20\02\x85\x08_%08x,%08x,%08x‖)。 將會從地址 0x08850220開始,查看連續(xù) 3個地址的內(nèi)容。 103 格式化字符串攻擊 ? ( 3)修改內(nèi)存任何地址的內(nèi)容 ? 格式化字符串函數(shù)還可以使用一個格式字符 “ %n‖。它的作用是將已經(jīng)打印的字節(jié)數(shù)寫入一個變量。請觀察下面的程序。 – 例 3 – include – int main() – { – int i。 – printf(―china \%n\n‖,(int*)amp。i)。 – printf(―i = %d\n‖,i)。 – } 104 程序運行的結(jié)果如下: 即 i的值為前面已經(jīng)打印的字符串 “ china”的長度 —— 5。利用這一點,很容易改變某個內(nèi)存變量的值。 格式化字符串攻擊 105 格式化字符串攻擊 – 例 4 – include – int main() – { – int i = 5。 – printf(―%108u%n\t‖,1,(int*)amp。i)。printf(―i=%d\n‖,i)。 – printf(―%23s123%n\t‖,‖‖,amp。i)。print(―i=%d\n‖,i)。 – } ? 程序執(zhí)行結(jié)果如下: 106 格式化字符串攻擊 語句 printf(―%108u%n\t‖,1,(int*)amp。i)。 %108u表示以 108的寬度來以無符號十進制的形式輸出 “ 1‖, %n則表示用數(shù)據(jù) “ 1‖的寬度 ——108來修改變量 i的值。 而語句 printf(―%23s123%n\t‖,‖‖,amp。i)。 是用字符串 “” 加上字符串 “ 123‖的存放寬度 ——23+3來修改變量 i的值。 使用同樣的辦法,可以向進程空間中的任意地方寫一個字節(jié)。以達到下面的目的: – 通過修改關(guān)鍵內(nèi)存地址內(nèi)容,實現(xiàn)對程序流程的控制; – 覆蓋一個程序儲存的 UID值,以降低和提升特權(quán); – 覆蓋一個執(zhí)行命令; – 覆蓋一個返回地址,將其重定向到包含 shell code的緩沖區(qū)中。 107 欺騙類攻擊 108 電子欺騙 ? 電子欺騙 ( spoofing)就是在兩臺建立了信任關(guān)系的計算機之間,冒充其中一臺,對另一臺進行欺騙性連接,而后對其發(fā)起攻擊。這種欺騙可以通過不同的網(wǎng)絡(luò)協(xié)議漏洞進行。 ? 常見的電子欺騙 ? IP欺騙 ? TCP會話劫持 ? ARP欺騙 ? DNS欺騙 ? WEB欺騙 109 IP欺騙 ? IP欺騙的動機 ? 隱藏自己的 IP地址,防止被跟蹤 ? 以 IP地址作為授權(quán)依據(jù) ? 穿越防火墻 ? IP欺騙的形式 ? 單向 IP欺騙:不考慮回傳的數(shù)據(jù)包 ? 雙向 IP欺騙:要求看到回傳的數(shù)據(jù)包 ? 更高級的欺騙: TCP會話劫持 ? IP欺騙成功的要訣 ? IP數(shù)據(jù)包路由原則:根據(jù)目標地址進行路由 110 IP欺騙:改變自己的地址 ? 用網(wǎng)絡(luò)配置工具改變機器的 IP地址 ? 注意: ? 只能發(fā)送數(shù)據(jù)包 ? 收不到回包 ? 防火墻可能阻擋 ? 在 Linux平臺上 ? 用 ifconfig 111 用程序?qū)崿F(xiàn) IP欺騙 ? 發(fā)送 IP包, IP包頭填上假冒的源 IP地址 ? 在 Unix/Linux平臺上,直接用 socket就可以發(fā)送,但是需要 root權(quán)限 ? 在 Windows平臺上,不能使用 Winsock ?可以使用 winpcap ? 可以用 lib構(gòu)造 IP包 ? 代碼示例 ? 在 Linux平臺上,打開一個 raw socket,自己填寫 IP頭和傳輸層數(shù)據(jù),然后發(fā)送出去 112 用程序?qū)崿F(xiàn) IP欺騙代碼示例 sockfd = socket(AF_INET, SOCK_RAW, 255)。 setsockopt(sockfd, IPPROTO_IP, IP_HDRINCL, amp。on, sizeof(on))。 struct ip *ip。 struct tcphdr *tcp。 struct pseudohdr pseudoheader。 ip = xxx。 // 填充 IP和 TCP頭的其他字段,并計算校驗和 = ip。 tcpcheck = tcpchksum((u_short *)amp。pseudoheader, 12+sizeof(struct tcphdr))。 //計算校驗和 sendto(sockfd, buf, len, 0, (const sockaddr *)addr, siz
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1