write-up
-
[Toddler's Bottle] random write-upSystem hacking training/pwnable.kr 2018. 7. 21. 20:50
pwnable.kr Toddler's Bottle 6번째 문제 random 을 풀이하였습니다. 아버님이 프로그래밍을 할때 random 값을 어떻게 사용하는지 가르쳐줬다고 하는것으로 보아 난수에 대한 문제로 추정을 했습니다. 그리고 ssh로 바로 접속을 하였고 바이너리의 소스 코드를 확인해보면 다음과 같습니다. rand()를 사용하여 난수를 생성하고 key값을 사용자로 부터 입력받아 xor 연산 후 0xdeadbeef와 같다면 쉘을 띄워줍니다. 만약 다르다면 2의 32제곱의 경우의 수를 생각해야될것이라고 언지를 해주면서 프로그램이 종료됩니다. rand()로 난수를 생성하는 것은 어쩌면 상관없을 것 같지만 이와 같이 key값을 인증하는곳에 쓰인다면 문제가 될 수 있습니다. 왜냐..! 저도 처음 알게된 사실이..
-
[Toddler's Bottle] shellshock write upSystem hacking training/pwnable.kr 2018. 7. 14. 19:39
오늘은 shellshock write up 을 작성해보겠습니다. Mommy, there was a shocking news about bash. I bet you already know, but lets just make it sure :) ssh shellshock@pwnable.kr -p2222 (pw:guest) shellshock 문제 이름에서도 알 수 있듯이 이 문제는 CVE-2014-6271, bash 쉘 4.3 이하 버전에서 원격 명령을 실행 할 수 있는 취약점을 다룹니다. 이 취약점이 bash shell 에 대한 취약점인만큼 bash에 대한 이해가 필요합니다. bash는 유닉스, 리눅스, 맥 계열에서 주로 사용되는 프로그램 명령어로 컴퓨터 작업을 할 수 있는 환경을 제공하는 소프트웨어입니다..
-
[Toddler's Bottle] flag write-upSystem hacking training/pwnable.kr 2018. 7. 4. 03:27
오늘은 toddler's bottle 4번째 문제인 flag를 풀이를 작성해보겠습니다. 어떤 아버지가 이런 선물을 줄까요... 다운로드 링크에 들어가면 flag 바이너리를 받으실 수 있습니다. ELF 64bit 실행파일이고, statically linked가 되어있네요. 그리고 stripped되어있습니다. stripped 되어있다는 것은 실행 가능한 이진 프로그램들과 목적 파일들로부터 모든 디버깅과 상징 정보가 지워졌다는 것을 의미합니다. 이로인해서 디버깅이 불가능한 상태입니다. gdb로 까봐도 소용없었습니다. checksec 으로 바이너리에 걸린 메모리 보호기법을 확인해보니 보통 보이지 않던 Packer라는것이 보였습니다. 내용은 UPX로 packed 되었다는군요. UPX(Ultimate Packer ..
-
[Toddler's Bottle] bof write-upSystem hacking training/pwnable.kr 2018. 7. 1. 22:57
toddler's bottle 의 세번째 문제 bof를 풀이하겠습니다. (사실 순서대로 풀이하려고 했는데 MD5 해쉬 충돌...? collision문제를 아직 풀지 못해서 먼저 작성하겠습니다.) 5pt로 간단한 문제입니다. buffer overflow 는 가장 일반적인 소프트웨어 취약점 중 하나라고 알려주면서 bof 바이너리와 소스코드를 줍니다. 먼저 소스코드를 확인해보면 아래와 같습니다. #include #include #include void func(int key){ char overflowme[32]; printf("overflow me : "); gets(overflowme);// smash me! if(key == 0xcafebabe){ system("/bin/sh"); } else{ prin..
-
[Toddler's Bottle] collision write-upSystem hacking training/pwnable.kr 2018. 7. 1. 22:56
Toddler's Bottle의 두번째 문제 collision이라는 문제를 풀었다. Daddy told me about cool MD5 hash collision today. 라고 해서 해시 충돌 공격에 관한 문제인듯 했다. 그래서 열심히 구글링을 했고 얻은 결과는 MD5는 MD4를 대체하기 위해 나왔고 노트북 한 대의 계산 능력으로 1분 내에 해시 충돌을 찾을 정도로 빠른 알고리즘이 되었다는 사실 정도..? 이 해시 충돌이라는 것은 서로 다른 두 입력값에 대해 동일한 출력값을 내는 상황을 의미한다. 해시 함수가 무한 가짓수의 입력값을 받아 유한한 가짓수의 출력값을 생성하는 경우, 비둘기집 원리에 의해 해시 충돌은 항상 존재한다. https://ko.wikipedia.org/wiki/%ED%95%B4%E..
-
[Toddler's Bottle] fd write-upSystem hacking training/pwnable.kr 2018. 7. 1. 02:47
pwnable.kr fd 문제를 풀었습니다. file descriptor 에 대한 문제임을 예상할 수 있었습니다. ssh로 remote 연결을 하여 진행을 하는 방식입니다. 접속하여 ls 명령어로 어떤 파일들이 있는지 보니 fd라는 실행파일에 setuid가 걸려있습니다. fd.c는 fd에 대한 소스코드인듯 합니다. LOB와 비슷합니다 ㅎㅎ 바이너리 이름에서부터 알 수 있듯이 이 문제는 fd 즉 파일 디스크립터에 관한 문제입니다. 먼저 코드 분석을 해보았습니다. 1. argc 즉 인자가 파일명 빼고 하나 더 있어야 합니다. 2. fd라는 변수에 atoi()로 argv[1]을 받아 정수형으로 반환하고 0x1234를 뺀 뒤 저장합니다. 3. len 변수에 read()의 return 값을 저장합니다. 4. re..
-
LEVEL 18 nightmare write-upSystem hacking training/Hackerschool LOB 2018. 6. 27. 09:03
succubus -> nightmare nightmare문제를 풀었으니 LOB도 얼마 남지 않았네요 ㅎ 생각해보면 꽤 오래 끌었군요...! FTZ 는 6개월 정도가 걸린것 같은데 LOB도 3개월 정도 걸리겠네요 ㅎㅎ (언제 갓되는지..) 암튼 문제는 이렇습니다. 코드 분석부터 하겠습니다. 1. 인자에 바이너리명 빼고 한개 더 줘야한다. 2. check address에서 char 형 포인터 변수 addr에 strcpy()의 PLT를 받아와서 argv[1]+44 즉 ret 공간의 주소값과 memcmp()를 통해 비교를 하여 다르다면 예외처리를 하며 바이너리를 종료한다. 3. overflow! 부분에서 strcpy()를 이용하여 buffer에 argv[1]의 값을 때려박는다. 4. dangerous water..
-
LEVEL 16 zombie_assassin write-upSystem hacking training/Hackerschool LOB 2018. 5. 13. 17:09
assassin -> zombie_assassin 소스코드를 분석해보면 힌트부분에 FEBP라는 중요한 힌트가 있다. Fake EBP라는 기법을 이용하면 풀릴것같다. 인자는 2개 이상이여야하고, argv[1][47]이 이전 문제와 동일하게 \xbf, \x40이면 예외처리가 된다. 그리고 strncpy()로 buffer에 argv[1]의 값을 48개 받기 때문에 bof가 터진다. 이 문제의 의도에 맞게 Fake ebp 기법을 이용하여 문제를 풀면된다. Fake ebp에 대해서는 자세하게 따로 다루기로 하고 페이로드를 짜는 요령만 먼저 익혀보자. 사실 Fake ebp 는 FPO와 매우 유사하기 때문에 풀이가 쉬웠다. 먼저 페이로드의 구성은 다음과 같다. `python -c 'print "dummy(4byte)..