成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一個HTTP請求,把網站打裂開了!

開發 前端
今天給大家看一段神奇的代碼。利用這幾行神奇的代碼,居然能把網站打崩潰,這是怎么一回事呢?就是下面這個函數,根據傳進來的開始和結束位置,讀取文件數據。

 [[432030]]

今天給大家看一段神奇的代碼。

利用這幾行神奇的代碼,居然能把網站打崩潰,這是怎么一回事呢?

就是下面這個函數,根據傳進來的開始和結束位置,讀取文件數據: 

  1. char* Read(int fd, int start, int end) {  
  2.     unsigned int length = end - start + 1;  
  3.     if (length > 1024)  
  4.         return NULL;  
  5.     return ReadFile(fd, start, end);  

函數中最大只支持一次讀取1024個字節,所以增加了一個判斷邏輯。

現在請大家思考一下,這個函數有沒有什么問題?

---思---

---考---

---5---

---秒---

---鐘---

來思考一下,假設我像這樣來調用這個函數: 

  1. Read(0, 0, 4294967295); 

會發生什么事呢?

你可能已經注意到了,這里傳了一個很特殊的參數過去,這個數乍一看很大,遠遠超過了1024,按理說會通不過函數內部的檢查對吧?

但事情不是這么簡單,這個特殊的數字——4294967295,是32位無符號整數所能表示的最大范圍。

但是請注意Read這個函數的參數,start和end都是int型變量,把4294967295傳遞給end的時候,會被當作有符號的整數解析,也就是 -1 !

現在來看Read函數中計算長度的這行代碼: 

  1. unsigned int length = end - start + 1; 

計算結果就是-1 - 0 + 1 = 0!

length的結果會是0!

很自然逃過了下面對長度的檢查: 

  1. if (length > 1024)  
  2.     return NULL; 

上面這段代碼不只是一個假想的模型,實際上,它曾經真實存在過!

它的漏洞編號是:CVE-2015-1635。

這是一個微軟的互聯網服務器IIS中的一個漏洞,更要命的是,這個漏洞位于IIS處理HTTP請求的HTTP.sys驅動程序中。

你知道的,驅動程序是運行在操作系統內核之中,一旦內核驅動執行出現異常,那后果,輕則藍屏崩潰,重則直接被攻擊者遠程執行代碼,控制服務器!

在HTTP 1.1版本的協議中,可以通過請求頭中的Range字段,請求或上傳指定資源的部分內容,比如像這樣: 

  1. GET /bg-upper.png HTTP/1.1  
  2. User-Agent: curl/7.35.0  
  3. Host: 127.0.0.1:8180 
  4. Accept: */*  
  5. Range: bytes=0-10 

其中的Range字段格式如下:

Range: bytes=start-end

微軟的IIS為了提高性能,將HTTP協議的解析放在了內核驅動HTTP.sys中實現。

而其中對range字段的處理,就存在我們文章開頭的那個邏輯錯誤,不同的是,我們上面的那個示例是一個32位整數的版本,而IIS這個真實的漏洞是64位整數產生的問題,但原理是一樣的。

通過向存在漏洞的IIS服務器發送對應的HTTP請求,即可將目標服務器打藍屏,實現DOS——拒絕服務攻擊。

這種攻擊方式就是——整數溢出攻擊。

接下來,咱們在搭建一個環境來驗證一下。

在虛擬機中搭建一個IIS7的Web服務器:

64位無符號整數能表示的最大數是:18446744073709551615,通過向服務器發送包含range參數的請求,有很大可能會導致服務器藍屏。

使用神器metasploit來利用這個漏洞發起攻擊:

現在來看,服務器已經掛了:

為什么是很大可能,而不是一定藍屏呢,如何實現穩定把服務器打藍屏呢?這就需要進一步了解這個漏洞更詳細的情況。

實際上這個漏洞原理比文章開頭的那個邏輯要更復雜一些,這里只是做了一個簡單入門介紹,關于這個漏洞的更詳細情況,大家可以看一下360大神MJ0011當年寫的一篇技術分析(PS:有點硬核,想要看懂得反復多看幾次):

《MS15-034/CVE-2015-1635 HTTP遠程代碼執行漏洞分析》

 https://blogs.360.cn/post/cve_2015_6135_http_rce_analysis.html

我們平時在編程的時候,一定要注意變量的數據類型,特別是涉及到數據類型轉換的地方要格外留神。比如符號數與無符號數的互轉,32位整數和64位整數的轉換等等。

在處理外界傳入的參數處理時,要慎之又慎,一個小小的變量類型可能就會給服務器計算機造成毀滅性打擊。 

 

責任編輯:龐桂玉 來源: 良許Linux
相關推薦

2020-11-19 06:55:39

微信表情移動應用

2020-10-20 14:01:16

HTTP

2017-11-02 11:05:20

HTTP網站HTTPS網站免費

2022-04-08 08:26:03

JavaHTTP請求

2018-01-23 12:03:57

阿里雙11超級工程

2013-11-01 10:23:37

Web程序

2024-11-19 08:36:16

2019-12-20 09:31:23

TCPHTTP瀏覽器

2019-05-29 15:17:43

TCPHTTPSSL

2018-07-30 16:31:00

javascriptaxioshttp

2015-07-28 10:19:27

創業邦雜志

2019-07-09 06:13:09

TCPHTTP網絡協議

2021-12-14 09:00:42

Swift HTTP 代理服務器

2021-09-26 15:59:47

支付寶移動應用

2024-04-29 13:05:00

AI自動駕駛

2021-06-24 06:00:51

EleventyJavaScript靜態網站

2022-03-24 14:49:57

HTTP前端

2020-05-27 14:07:56

HTTPServer編譯器

2020-07-09 14:57:24

HTTP瀏覽器協議

2021-07-20 10:30:46

Golanghttp語言
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲一区二区三区四区五区中文 | xx性欧美肥妇精品久久久久久 | 国产精品精品久久久久久 | 欧日韩在线观看 | 亚洲欧美日韩国产综合 | 一区二区福利视频 | 女女爱爱视频 | 日韩免费看片 | 国产一级在线观看 | 亚洲高清免费视频 | 狠狠综合久久av一区二区老牛 | 欧美xxxx色视频在线观看免费 | 日韩在线不卡视频 | 91色视频在线观看 | 亚洲视频www| 亚洲欧洲激情 | 国产yw851.c免费观看网站 | 蜜桃精品在线 | 久久久91 | 久在线观看 | 一区二区在线观看av | 日本不卡一区二区三区在线观看 | 国产区在线看 | 亚洲国产精品久久久久婷婷老年 | 免费a国产| 久久久国产一区二区三区 | 69堂永久69tangcom | 欧美电影一区 | 毛片在线免费 | 99热在线播放 | 日韩视频一区二区 | 亚洲成人福利视频 | 精产国产伦理一二三区 | 欧美色综合网 | 久久久亚洲 | 亚洲免费精品 | 中文字幕视频一区 | 男女国产网站 | 欧美一区二区在线观看 | 免费黄色的网站 | 国产精品无码专区在线观看 |