war game Write up
-
level 16war game Write up/ FTZ 2018. 11. 14. 17:37
이 문제는 이전 문제들과 다르게 함수를 사용해서 코딩을 해놓았다.. 덕분에 황당함을 감추지 못했다고,,간단하게 코드분석부터 해보면 main() 함수부터 crap 변수를 int형(4) 로 선언해주고 printit()함수의 호출 주소를 call에 저장하고 buf 변수를 char형(20)으로 선언했다. 그리고 fgets 함수를 이용해 표준입력을 받는다. 그 후에는 call 을 불러와 printit()함수를 호출한 후 프로그램이 종료된다. 여기서 생각해볼 수 있는것이 printit함수의 호출 주소를 저장하는 변수가 있는데 이곳을 shell() 함수를 호출하는 주소로 오염시켜버리면? 쉘을 얻을 수 있을것이다.근데 지금 손목이 너무나도 아프다, 그렇다 이건 의식의 흐름이니 무시하고 gdb로 분석을 해보자. 함수가 ..
-
level15war game Write up/ FTZ 2018. 11. 14. 05:09
이 문제는 14번 문제와 90% 동일 하다. 다른 것이라고는 포인터라는게 추가됬는데변수의 메모리 주소값이 같으면 풀리는 문제이다. 이 코드가 문제코드!!!! 그렇다,, ㅇ,, 피곤해죽을거같다.. main+32을 보면 eax와 비교하는 부분이 있는데 0xdeadbeef의 값이 하드코딩되어 있으므로 여기서의 주소값을 잡아서 뽑아내다보면 0xdeadbeef의 주소ㅓ값이 나오는다. 그럼 이전 문제와 스택구조는 같을테니까 그대로 익스하면 된다.나도 내가 뭔말을 하는건지 모르겠다.. 오늘 오후에 다시 풀어봐야되겠다.. 그럼 20000 ++ 2018.11.14 오늘 새벽에 했는데 잠결에 문제를 풀었다.. 근데도 풀렸,,///check 변수의 메모리 주소값과 0xdeadbeef이 일치하면 문제가 풀린다.그럼 check..
-
level 14war game Write up/ FTZ 2018. 11. 14. 02:38
이 문제는 그냥 간단하게 스택구조만 만들어 낼 수 있다면 풀 수 있는 문제였다, 문제는 다음과 같다. fgets 함수로 45byte 까지 표준입력으로 받는다.그 다음 if문에서 check의 변수를 0xdeadbeef와 같은지 다른지 검사한 후 /bin/sh를 띄어주는 형식이다. gdb로 분석을 해보면 오른쪽과 같이 스택구조를 그려낼 수 있다. x038 -> 56에서 4를 더 추가한다,그런 후 fgets 에서 입력을 받고 29에서 검사를 하는 구조이다.총 스택값은 56이다. 28byte는 선언된 변수 값이고 나머지 28은 더미값으로 봐도 무관하다. int 형은 각 4byte 이고 buf값은 20 그런데 입력값은 45 그럼 더미 값은 20~21?이라고 추측이 가능했다..(뭔,,)따라서 공격 코드는 아래와 같다.
-
-
level13war game Write up/ FTZ 2018. 11. 1. 02:18
이 문제는 이전 문제와 다르게 스택가드라는 개념이 추가된 문제이다.소스코드를 보면 아래와 같다. buf string value에 1024 byte 를 할당시켜주고 인자값을 buf 변수에 copy하는데 strcpy함수는 길이 체크를 하지 않기 때문에 취약점이 존재하므로 이곳을 노려야 한다.if문은 i 값이 0x1234567이 아니면 에러를 뿜는다. kill 함수를 보면 signal(11, SIGEGV)를 전달하므로 세그먼트 폴트를 반환한다.따라서 i 값 즉, 스택가드 부분은 건드리지 않은채 버퍼오버플로우를 일으켜야 한다는 말이다. 먼저 gdb로 분석을 해보자.. 빨간줄을 그어 놓은 곳이 바로 비교하는 어셈인데 이 곳을 브포로 잡은 후 실행을 시켜본다. 시작 지점은 0xbffff1c0 0x1234567이 있..
-
leve12war game Write up/ FTZ 2018. 11. 1. 00:26
와아아ㅏ아아아아ㅏ아아아 혼자 풀었다!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!,,, 뭐 다른 문제도 웬만해선 다 혼자 풀었지만서도 이건 검색을 1도 안하고 풀었,, (물론 쉘코드 빼고!!!) 짱쉽다..ㅈㅅ 사실 11번 문제랑 다를게 없어서 그랬다는게 함정,,ㅇㅁㅇ 먼저 attackme의 소스코드가 힌트로 주어진다. 이전 문제와 다르게 인자값으로 받는게 아닌 입력값으로 받아들인다.gets 함수를 써서 입력을 받는데 gets함수의 경우 값의 길이 체크를 하지 않기 때문에 취약점이 발생한다. 따라서 fgets라는 함수를 사용한다고 한다. 먼저 str 이라는 string value에 256 byte를 할당시켜준다. 그리고 setreuid에서는 level13을 말하는 것 같다.입력..
-
level11war game Write up/ FTZ 2018. 10. 28. 00:57
음,, 이 문제는 FTZ를 하면서 버퍼오버플로우에 대한 기초를 알려주기 위한 문제라고 보고 풀었다. 먼저 ls를 한 후에 파일들을 살펴본다. attackme라는 프로그램이 존재하고, hint파일이 존재한다.위의 코드를 간단하게 분석해보면setuid가 걸려있고 str이라는 string 변수는 256byte를 가진다.argv[1]을 str에 카피하고 그것을 출력해준다. attackme를 실행할 때 인자값을 함께 넣어줬을 때 정상적으로 스택에 들어가는 것을 확인할 수 있다. 이 파일을 먼저 tmp/ 폴터에 카피한 후 gdb로 분석을 해보자.main+3까지는 str 이 스택에 들어가는 값이다. 0x100은 256이고 0x8은 8 따라서 더미값은 8byte이다.strcpy 함수 밑에 main+53을 브포로 잡고 ..
-
level10war game Write up/ FTZ 2018. 10. 9. 17:40
음,, 이 문제를 접하면서 공유 메모리라는 것을 공부하게 되었다. 공유 메모리 즉 shared memory 는 컴퓨터 환경에서 여러 프로그램이 동시에 접근할 수 있는 메모리과다한 복사를 피하거나 해당 프로그램 간 통신을 위해 고안됨환경에 따라 프로그램은 하나의 프로세서에서 여러 개의 프로세서에서 실행 가능함. 공유 메모리 즉 shared memory 는 여러 IPC 중에서 가장 빠른 수행 속도를 보여준다고 한다.IPC 란 Inter-Process Communication 의 약자로 프로세스 간 통신이라고 하며 프로세스들 사이에 서로 데이터를 주고 받는 행위 또는 그에 대한 방법이나 경로를 뜻한다. CPU1 CPU2 CPU3 I/O ↓ ↓ ↓ ↙ System Bus or crossbar switch ↓ ↓..