Wargame, CTF (113) 썸네일형 리스트형 heap1 malloc이 4번있고 strcpy가 두 번있음 더블strcpy를 이용해서 winner를 샐행시켜야함 인자를 2개 주어야함 첫 malloc이후 bp를 걸어 동적 할당된 메모리 주소를 찾음 인자로 aaaa bbbb를 준고 run 2번째 strcpy가 실행된 이후 heap의 상태를 확인 4개의 malloc이후 정상적으로 aaaa와 bbbb가 삽입됨 앞의 코드에서 name은 포인터 변수이기 때문에 aaaa와 bbbb는 빨간 동그라미의 주소에 들어간 것을 알 수 있음 첫번째 인자다음 i2->name의 주소까지 20바이트 그래서 첫번째 인자로 20바이트를 채운다음 3번째로 동적할당 받은 i2->name의 주소를 printf의 got로 바꿔서 두번째 인자를 winner의 주소를 주면 두번째 strcpy로 인해 pr.. heap0 heap overflow를 이용해 winner()를 실행시키면 pass 그림처럼 malloc으로 128바이트를 동적할당 할 시 앞에 type과 size가 8바이트를 차지하고 밑의 data가 동적할당한 크기만큼 생성이되며 더 밑에 footer가 붙을 수도 있음 일단 첫 malloc과 2번째 malloc으로 할당된 메모리의 주소 d와 f가 가진 주소를 찾음 이 주소는 위의 heap의 구조 그림에서 type의 시작번지가 아닌 data의 시작번지를 반환해서 eax에 넘겨줌 main+21, 37에 bp를 걸어주고 AAAA를 인자로 주고 run d의 data주소는0x804a1a0 f의 data시작 주소는 0x804a1f0 strcpy가 동작한 후인 main+107부분에 bp를 걸고 d의 data주소-0x8 (typ.. 리버싱 https://codeengn.com/challenges/ CodeEngn.com [코드엔진] - Challenges 코드엔진은 국내 리버스엔지니어링 정보공유를 위해 2007년 부터 리버스엔지니어링 컨퍼런스 및 비공개 워크숍을 현업 실무자들과 함께 운영하고 있습니다. 리버스엔지니어링이라는 하나의 큰 주제로 소프트웨어 보안에 대한 다양한 시각과 연구주제에 대한 정보공유를 추구하고 있으며, 상업적 이익 없이 작은 예산으로 운영하고 있어 큰 예산으로 운영하는 다른 컨퍼런스에 비해 여러 가지로 부족 할 수 있습니다. codeengn.com http://reversing.kr/challenge.php Reversing.Kr Copyright © 2012-2020 Gogil All Right Reserved. re.. 시스템 https://old.liveoverflow.com/binary_hacking/protostar/index.html Protostar - LiveOverflow This video introduces http://exploit-exercises.com, how to connect to the VM with ssh and explains what setuid binaries are. old.liveoverflow.com http://pwnable.kr/ http://pwnable.kr/ there are flag files corresponding to each challenges (similar to CTF), you need to read it and submit to pwnable.kr to get .. format4 FSB를 이용해 exit()가 아닌 hello함수가 실행되게함 exit의 got를 hello의 got로 변조 시키면 exit가 아닌 hello를 실행 가능 이전 문제처럼 3부분으로 나누어서 넣음 08/484/b4 b4먼저 vuln의 exit를 call하는 부분에 브레이크 포인트 걸어두고 gdb 에서도 파일을 인자로 줄 수 있음 b4가 들어감 다음 484 484도 잘 들어감 마지막 08 hello의 주소를 다 넣음 continue해보면 format3 target의 값을 0x01025544로 만들면 pass AAAA는 12번째 'AAAA'+target의 주소를 넣고 13번째에는 %n을 넣어 변조 target의 값이 68로 바뀜 이전 문제처럼 0x01025544를 바로 넣어도 되고 3부분으로 나누어서 01/0255/44 이렇게 넣어줘도됨 3부분으로 나누어 넣어줄 땐 밑줄친 부분 AAAA, BBBB, CCCC 다음이 01/ 0255/ 44 가 들어갈 주소임 target의 주소+1,2,4 이렇게 3부분으로 넣음 4부분으로 나누어서 넣는 것도 가능 44를 넣어주어야 하는데 이미 70임 데이터를 빼줄수는 없기 때문에 144가 되게함 0x144 - 0x70 = 212 212+8 144가 되어도 다음 255를 넣을때 1이 255에 덮혀지기 때문에 상관 없음 14C.. format2 target의 값을 64로 만들면 pass AAAA가 4번째에 위치하니까 AAAA+(target의 주소)해서 5번째(target의 주소)에 값을 씌어주면 됨 target의 주소가 잘 들어감 AAAA 4바이트 target의 주소 4바이트 %8x*4 = 8*4->32바이트 40바이트로 target에 64를 넣어야하니 64 - 40 = 24 56이 나오는데 %x는 기본 8자리로 나오니까 24에 8을 더해주어야함 32 format1 %x153번해서 딱 맞춰서 나왔고 151번째에 있으니까 41414141 -> 151번째 target의 주소 -> 152번째에 오게 해서 target의 값을 변조 시키면 됨 152번째에 target의 주소가 잘 들어감 target의 값이 0만 아니면 되기 때문에 마지막 152번째 %x를 %n으로 바꿔주어 target의 주소에 값을 써준다 target변조 성공 이전 1 2 3 4 5 ··· 15 다음