nginx header参数丢失_某Nginx后门分析与重现
安全分析與研究
專注于全球惡意軟件的分析與研究
背景
前幾天,接到一個nginx后門樣本,本著就分析和復現的思路,完整的將整個過程做一次復現,不料最終還獲取到了后門的核心代碼部分,遂將其整理發(fā)布,僅供學習研究之用。
在后續(xù)分析之前先來了解下nginx后門的功能。通過在Cookie中包含特征字符串lkfakjfa,并填寫需要反彈的ip和端口,完成shell反彈,這就是后門的一個大致情況。
樣本分析
1.在已有的分析情報的幫助下,得知nginx后門位于ngx_http_header_filter,IDA裝載樣本,發(fā)現樣本帶有符號信息,如下所示:
2.找到ngx_http_header_filter函數,找到了關鍵字符串lkfakjf,如下所示:
3.F5之后,發(fā)現之后調用了一個connect_shell的函數,如下所示:
4.通過對connect_shell進行分析發(fā)現,是一個反彈shell的功能,利用socket編程完成shell反彈,如下所示:
后門復現
1.首先啟動后門nginx文件,由于nginx會綁定80端口,如果多次啟動會提示80端口被占用而無法啟動,如下所示:
2.接著進行本地監(jiān)聽9999,如下所示:
3.使用curl來觸發(fā)漏洞,如下所示:
4.此時nc里已經得到了shell,如下所示:
原理分析
1.通過gdb調試和IDA分析發(fā)現,要判斷cookies中是否存在特征字符串lkfakjf,用到了一個這樣的結構體ngx_http_request_t,使用source insight打開nginx源碼,定位到ngx_http_header_filter,發(fā)現參數就是ngx_http_request_t,查看該結構體的情況,如下所示:
2.該結構體相對比較大,這里截圖只留下要使用的部分header_in,如下所示:
3.通過header_in的結構繼續(xù)尋找,找到cookies的定義,如下所示:
4.最后找到關于cookies的結構體情況,如下所示:
5.結合IDA中代碼分析,v4就是cookies結構體,通過結構體偏移+32字節(jié)定位到輸入的特征字符串,在這里我也沒有分析的特別清楚,初步判斷應該是ngx_pool_t結構體,如下所示:
重現后門
1.首先,我們要先獲取cookies的結構,通過r->headers_in.cookies.elts即可獲得,然后取到void *elts的內容,最后通過32字節(jié)偏移得到存儲輸入特征碼的地址,取其值即可拿到輸入的特征字符串的值,最后的代碼形式,如下所示:
對這代碼做個解釋,首先v1和v2是long *的指針。
第一句代碼(long *)r->headers_in.cookies.elts;將void *的elts指針轉化為long *的指針。
第二句代碼v2=(long *)*v1;*v1是取其值,在將其值轉化為long*的指針。
第三句代碼cookie =(char *)*(v2+4);v2+4是表示在v2的基礎上,偏移4個long*個字節(jié),如果你的v2定義為char *這里就是v2+32;*(v2+4)取該偏移的內容,最后轉化為char *的指針。
以上代碼只適用于64位linux,以上代碼只適用于64位linux,以上代碼只適用于64位linux,重要的事情說三遍。
2.使用nginx的configure配置,只需要配置--prefix=/root/nginx即可,當configure運行完成后會生成Makefile文件。配置過程中,可能缺少很多的依賴,逐個安裝即可,如下所示:
3.然后修改位于objs里的Makefile文件,修改為如下配置,否則編譯會報錯,如下所示:
4.此時使用make編譯,等待編譯完成,如下所示:
5.make install安裝一下,安裝的位置為之前配置的prefix路徑,如下所示:
6.運行和調試nginx文件,能夠成功獲取輸入的特征字符串,如下所示:
7.其中rsi為觸發(fā)漏洞的輸入,rdi為內置特征字符串,這里選擇了printf打印,能夠成功獲取到輸入的特征字符串,如下所示:
8.接下來準備復現反彈shell,添加功能代碼,代碼只能適用于帶有nc命令的系統,編譯后進行復現操作,如下所示:
9.現在的特征字符串被修改為123456,現在來觸發(fā)該后門,如下所示:
10.成功接收到反彈的shell,如下所示:
自此后門重現成功,整個分析和復現過程到此結束。
后門排查
目前后門排查只能針對特定的版本,如果出現新nginx后門,排查手段大概率會失效。
1.本地驗證 通過grep命令判斷當前運行對nginx里面是否存在"/bin/sh"可疑字符串
$ which nginx |xargs grep "/bin/sh" –la
2.將nginx文件提取出來,使用IDA分析查找ngx_http_header_filter,下載nginx源碼和IDA F5做對比判斷是否存在后門。
最好的效果是下載nginx對應的源碼對比是否有增加或改動的地方,但是這份方法比較耗時耗力,但是效果比較好。
威脅情報
HASH
ab498686505dfc645e14c6edad280da7
這篇文章作者很早之前就發(fā)給我了,一直沒時間編輯發(fā)布,后面作者也發(fā)布在了看雪論壇,鏈接地址:
https://bbs.pediy.com/thread-260954.htm
安全分析與研究專注于全球惡意軟件的分析與研究,追蹤全球黑客組織攻擊活動,不忘初心,專注,專業(yè),堅持,歡迎關注。
總結
以上是生活随笔為你收集整理的nginx header参数丢失_某Nginx后门分析与重现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: maven不配置环境变量可以使用吗_哪些
- 下一篇: swift 原生给h5发消息_Swift