[ ★ ]Study/War Game29 [Toddler's Bottle] pwnable.kr input 풀이 아래는 input.c 의 코드입니다. 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768#include #include #include #include #include int main(int argc, char* argv[], char* envp[]){ printf("Welcome to pwnable.kr\n"); printf("Let's see if you know how to give input to program\n"); printf("Just give me correct inputs then you will get the .. 2017. 9. 13. [Toddler's Bottle] pwnable.kr random 풀이 간단한 소스코드네요. 어떤 랜덤값이 나오는지 확인하기 위해서 main+18부분에 break를 걸었습니다. +18부분에서 eax를 rbp-0x4에 값을 넣습니다. 즉, 브레이크를 걸고 레지스터를 확인하면 빠르겠죠 ? 아래 그림있습니다. 0x6b8b4567이라는 값이네요. 몇번을 확인해도 똑같은 값입니다. rand() 함수는 범위를 지정해주지 않으면 같은 값을 뽑아내기 때문이죠. 때문에 정말 랜덤값을 뽑고싶다면 srand를 사용하도록 합시다. xor의 원리에 따라서 key ^ random = 0xdeadbeef a b c a ^ b = c b ^ c = a rand ^ deadbeef = key rand = 0x6b8b4567 = 1804289383 c = 0xdeadbeef = 3735928559 3039.. 2017. 8. 17. [Toddler's Bottle] pwnable.kr passcode 풀이 문제를 푸시기 전에 PLT, GOT를 공부해 봅시다. https://bpsecblog.wordpress.com/2016/03/07/about_got_plt_1/ 제가 제일 만족하면서 봤던 블랙펄 사이트이구요. 위 링크만 봐서는 부족하고, 따로 구글에서 찾아보면서 공부하시길 바랍니다. 보기엔 단순한 코드입니다. 과연 컴파일 할 때 어떤 경고가 나타났던 것일까요? 뭐… 소스코드를 잘보셨다면, passcode 입력 받는 부분에 & 연산자가 없습니다. 이는 변수 주소에 입력값을 넣는 행위이죠. 출력하면 쓰레기 값이 나올 겁니다. 실제로 제 환경에서는 쓰레기 음수가 출력되고, pwnable.kr 환경에서는 쓰레기 양수 값이 나오네요. 사진은 첨부하지 않겠습니다. login 함수 입니다. ebp-0x10 = pas.. 2017. 8. 17. [Toddler's Bottle] pwnable.kr flag 위 적혀있는 주소에서 파일을 다운로드 해봅시다. 리버싱을 해보라고 하네요 %_% 파일을 다운받고 hex editor로 열어보았습니다. 기본적으로 파일을 다운 받았으면, 어떤 파일인지는 알아봐야겠죠..? 리눅스 실행파일임과 동시에 UPX로 패킹되어 있음을 알 수 있습니다. UPX는 Tool과 Manual 2가지 방법을 Unpacking 할 수 있는데 간단하게 Tool로 하겠습니다. UPX 툴을 다운합니다. https://github.com/upx/upx/releases 현재 날짜 기준으로 최신으로 다운 받습니다. 현재 기준입니다. 가장 대표적인게 위 두 가지 이며, Win32라고해서 64비트에서 못쓰는 것이 아니므로, 64비트인 분들도 Win32로 다운받아줍시다. 압축 해제하고, CMD(명령 프롬프트)를 .. 2017. 8. 17. [Toddler's Bottle] pwnable.kr bof 5점짜리 bof 문제이군요. bof에 대해서 공부하고 오세요 ! 위 주소로 들어가서 파일을 다운 받고 C 코드를 보면 핵심은 key == 0xcafababe 가 되도록 하는 것입니다. func 함수로 인자가 0xdeadbeef가 넘어가고 그것이 변수 key가 받고 있으므로, bof 취약점을 이용해 deadbeef를 cafebabe로 바꾸어주면 될 것 같습니다. 여기서 gets 함수를 보고 빠르게 bof라는 것을 알아채야 되는데… gets는 온전히 user input에 관련한 함수이므로 이 함수를 그대로 사용하면 오버플로우취약점에 노출되게 되는 것이다. 이와 관련해서 strcpy, strcat … 등 여러 함수들도 취약하다는 것을 알았으면 한다. 우선, overflow 이 변수에 값을 입력하고 메모리를 한.. 2017. 8. 16. [Toddler's Bottle] pwnable.kr collision main 함수부터 차근차근 보면, 총 20길이의 입력값을 받으며, 4개씩 쪼개어 5번을 더하게 된다. 1111 2222 3333 4444 5555 각 칸을 더하게 된다. 궁금하면 GDB로 확인해보시길 바란다. 즉, 첫 번째 4개 + 그 다음 4개 + 4개 + 4개 .... = 0x21DD09EC가 성립되어야 한다. 0x21DD09EC를 5로 나누면 0x06C5CEC8 값이 나오며, 마지막 한 개의 값에는 4를 더하여 주어야 한다. 딱 나누어 떨어지지 않으니! (0x06C5CEC8 + 0x06C5CEC8 + 0x06C5CEC8 + 0x06C5CEC8 + 0x06C5CECC) 즉, 페이로드는 ./col `python -c 'print "\xc8\xce\xc5\x06"*4 + "\xcc\xce\xc5\x06".. 2017. 8. 16. 이전 1 2 3 4 5 다음