본문 바로가기

WARGAME/Lob

(20)
LOB FC3 evil_wizard 안녕전 문제랑 비슷한데지금까지 local BOF를 했지만 이문제는 remote BOF를 해야한다 먼저 데몬의 2가지 실행 모드에 대해 조금 알아보면xined 슈퍼 데몬에 의해 제어되는 서비스 데몬이 있고독립적으로 실행되는 Standalone환경의 서비스 데몬이있다 이 둘의 가장 큰 차이점은xinetd의 경우 표준 입출력의 주체가 서버에 접속한 클라이언트가 되지만Standalone의 경우는 socket을 생성하고 send recv로 데이터 입출력을 한다 그럼 전처럼 엄청 구해보자 이렇게 하고 페이로드를 짤 때 /bin/sh까지 하자
LOB FC3 hell_fire 안녕사진 두장이 마치 한장 처럼 보인다이번 문제는 GOT overwrite이다 printf@got 주소를 system 주소로 덮어주고printf@plt를 사용해 system함수를 호출한다 우선 가젯들을 구해보자strcpy@plt ppr printf@plt,got system 주소 /bin/sh 주소 strcpy@plt ppr&system printf@plt printf@got 코딩해서 /bin/sh c0 07 75 다 구했다역대급 사진많이 들어간 포스팅이다 이렇게 코딩했다 눈 개따갑네 성공
LOB FC3 dark_eyes 안녕Remote BOF 포트는 7777 이번 풀이는 do_system()을 이용해서 풀어보자 system함수를 보면 위처럼 do_system 함수가있다 거의 끝부분에 있다 RET을 do_system+1124 (execve인자를 받기 시작하는 부분)이부분으로 하면 그냥 성공이다 성공
LOB FC3 iron_golem 안녕이번에는 힌트로 RET 썰매를 줬다 소스를 보자 이거 보면 주석이 너무 친철해Fake EBP는 못써 보면 알겠지만 SFP를 저장했다가 다시 복원하니깐 버퍼는 0x118로 280임 일단 RET 썰매니깐 RET 주소부터 RET주소는 0x080484b9 그다음 execve함수의 주소는 0x7a5490스택에 주소가 바뀌니깐 고정주소로 쓸만한곳을 찾아야하는데어디가 좋을까..................ret부분에 브레이크 포인트를 걸고 3번 실행해본결과 저기 0x0070eab6이랑 0x0083eff4는 변경되지않는다 문제가 개쩔어딱 편하게 쓰라고 저기 NULL부분을 만들어주셨어0x0083eff4이 주소의 값을 사용하자 이렇게 하고 자 이제 페이로드를 구성하자면버퍼 268 + ret 12 + execve 4 응..
LOB FC3 gate 안녕하세요이번 문제는 Fedora core 3문제 1번 gate입니다 페도라 환경에는 메모리 보호 기법이 추가되어있습니다 NX(Non-Executable stack)스택에 실행 권한이 없는 걸 볼 수 있습니다 rw-p라고 나와있는데 (x)execute 실행 권한이 없습니다 Ascii Armor라이브러리 영역의 주소를 무조건 16MB 이하로 만들어최상위 주소 1바이트는 무조건 \x00이 들어가게한 보호기법입니다주소 첫 자리가 00으로 값이 되므로연속적인 함수 호출을 불가능하게 만들었습니다 ASLR(Address space layout randomization)스택의 주소 값이 랜덤하게 변함....아까 위의 사진과 스택 영역을 보면 주소가 다른걸 볼 수 있습니다 자 그럼 문제의 소스를 봅시다소스를 보면 버퍼..
LOB LEVEL20(xavious ==> death_knight) 안녕하세요 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667/* The Lord of the BOF : The Fellowship of the BOF - dark knight - remote BOF*/ #include #include #include #include #include #include #include #include #include main(){ char buffer[40]; int server_fd, client_fd; struct sockaddr_in server_addr; struct sockaddr_in clie..
LOB LEVEL19 (nightmare ==> xavious) 안녕하세요 사진을 보면 알겠지만 안되는게 너무 많다buffer+47에 \xbf, \x08을 못하게 함으로 스택 영역이나 코드 영역의 주소를 사용 못한다LD_PRELOAD 안됨leave-ret도 사용 불가 (\x40을 제한하진 않았음)그러니 라이브러리도 사용 못한다그냥 다 사용하지말라는거다 그럼 어떻게 풀수있냐면fgets()사용하면read라는 함수를 통해 일정 영역에 버퍼로 잠시 넣어둔다 $(python -c 'print "A"*48';cat) | strace ./파일 이름이렇게 하면 중간에 old_mmap으로 0x40015000부터 0x40016000까지 할당해 임시 버퍼로 사용하고있다 A 48개를 read로 읽은 뒤에 0x40015000 임시버퍼영역에 넣어준다그럼 이제 쉘코드를 임시버퍼에 넣어주고 re..
LOB LEVEL18 (succubus ==> nightmare) 안녕하세요 ret 값이 &strcpy가 아니면 아래의 메세지를 띄운다소스 마지막에 memset의 AAAA로 buffer+48부분을 덮는다그럼 우리는 strcpy인자를 통해 AAAA주소를 덮어쓴다 dummy[44]&strcpy[4]dummy[4]&buffer[4]&argv2[4] &system[4]&exit[4]&/bin/sh[4] 몇시간동안 주소를 못맞추고있다풀이를 보고 페이로드를 파이썬 소스도 돌렸는데 안나온다bash2도 입력했는데 극혐이다