본문 바로가기

Pwnable.kr8

[Toddler's Bottle] pwnable.kr blukat 귀여운 이미지의 새로운 문제가 추가되었다. 숙련된 플레이어가 아니라면 금방 풀 수 있다.... 난 금방 풀 것 같았다(숙련된 포너가 되고싶다)아무튼 풀기전에 생각한 것은가벼운 코드 장난이 있을 것이다. 라고 생각했다 #include #include #include #include char flag[100]; char password[100]; char* key = "3\rG[S/%\x1c\x1d#0?\rIS\x0f\x1c\x1d\x18;,4\x1b\x00\x1bp;5\x0b\x1b\x08\x45+"; void calc_flag(char* s){ int i; for(i=0; i 2018. 8. 13.
[Toddler's Bottle] pwnable.kr coin1 import time from pwn import * HOST = 'pwnable.kr' PORT = 9007 conn = remote(HOST, PORT) time.sleep(3) #coin print conn.recv() for i in range(0,100): conn.recvuntil('N=') n = int(conn.recvuntil(' ')) conn.recvuntil('C=') c = int(conn.recv()) print n, c start = 0 end = n msg = "" while(start 2018. 8. 12.
[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.