본문 바로가기
  • Show the world what you can do

포너블11

[Dreamhack] Return to Shellcode (canary) 풀이 새로안것 : shellcraft.sh(), string.ljust(폭, 나머지문자), p.recvline()[:-1] 먼저 문제의 c언어 코드는// Name: r2s.c// Compile: gcc -o r2s r2s.c -zexecstack#include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0);}int main() { char buf[0x50]; init(); printf("Address of the buf: %p\n", buf); printf("Distance between buf and $rbp: %ld\n", (char*)__builtin_frame_address(0) - buf); .. 2022. 7. 1.
[Dreamhack] basic_exploitation_000 풀이 C언어 개념이 확실해야 한다는걸 느끼게 해주는 문제였다... 문제의 C코드를 보면이러하다!프린트로 버퍼의 주소를 알려주고..따라서 그냥 버퍼의 처음부터 쉘코드를 박아놓고 sfp까지 의미없는 주소를 넣고 ret에 버퍼의 주소(=쉘코드의 주소) 를 넣기로 했다.계획한건 하도 간단해서 오히려 sf1보다도 쉽겠구나~했는데...코드를 짜는데 시행착오를 또 너무 많이 겪었다.  이건 성공한 코드지만 처음에는 payload=b'이런 b를 어디서 왜 넣어야하는지 감을 못잡아서 자꾸 오류가 났었다.b'를 넣는게 바이트임을 알려주는 걸로 알고 있었기에 '\x31'이라고만 적으면 바이트 하나를 리틀 엔디언방식으로 인식하지 못해 b'\x31'로 적어 컴퓨터가 리틀엔디언 방식으로 표현된 0x31로 알아듣게 해주는 용도인가보다~.. 2022. 6. 7.
[Dreamhack] Stack buffer Overflow (함께 실습) 풀이 이 문제는..자꾸 코드를 짜도 항상 그렇듯이 got EOF while reading interactive가 나와서 미치는줄 알았던 문제..익스플로잇 코드짤때 context.arch=~ 이걸 안넣은것도 한몫했다  버퍼의 크기가 0x28, 여기는 64비트니 sfp, ret의 크기는 8비트 그럼 간단하게 'A'*0x28, 'B'*0x8, get_shell()의 주소를 보내주면 되겠다고 생각했다. (참고로 get_shell의 주소는 gdb rao해서 print get_shell 하면 뜬다) 근데 저렇게 익스플로잇 코드를 짜봤더니 got EOF 어쩌구만 무한반복해서 gdb로 rao를 까보니 하찮던 내 예상과는 다르게 버퍼의 크기를 0x30만큼으로 취급하는걸 볼 수 있었다.코드에는 0x28만큼이랬는데 왜 0x30만.. 2022. 6. 6.