안녕하세요
이번 문제는 Fedora core 3문제 1번 gate입니다
페도라 환경에는 메모리 보호 기법이 추가되어있습니다
NX(Non-Executable stack)
스택에 실행 권한이 없는 걸 볼 수 있습니다
rw-p라고 나와있는데 (x)execute 실행 권한이 없습니다
Ascii Armor
라이브러리 영역의 주소를 무조건 16MB 이하로 만들어
최상위 주소 1바이트는 무조건 \x00이 들어가게한 보호기법입니다
주소 첫 자리가 00으로 값이 되므로
연속적인 함수 호출을 불가능하게 만들었습니다
ASLR(Address space layout randomization)
스택의 주소 값이 랜덤하게 변함....
아까 위의 사진과 스택 영역을 보면 주소가 다른걸 볼 수 있습니다
자 그럼 문제의 소스를 봅시다
소스를 보면 버퍼가 256바이트이고
밑에 strcpy에서 취약점이 발생합니다
스택의 구조
힌트에 fake ebp가 있으므로
RTL과 fake ebp 기법을 사용해 보겠습니다
그전 LOB redhat은 system함수를 사용해서 풀었는데
fedora core는 system함수 내부 루틴중에
geteuid를 재설정 해주는 부분이 있기 때문에
이를 유지할 수 없습니다 따라서 execl 함수를 사용합니다
int execl( const char *path, const char *arg, ...);
execl(실행할 파일, 인자1, 인자2, ..., NULL)
execl 함수 마지막 인자가 NULL이 와야하는데
이 부분은 GOT주소로 덮습니다
우리는 스택주소가 랜덤이라...사용할 수 없으므로
고정주소인 GOT를 사용하겠습니다
objdump로 GOT 주소를 구해봅시다
GOT 주소는 0x8049618입니다
이 때 -8을 해줘야합니다
ebp를 기준으로 인자를 참조하기 때문에 그렇습니다
더 자세히 보겠습니다
0x0804954c가 첫 번째 인자 파일이름이 되고
세 번째 인자가 NULL이 되므로 인자로 사용하기에 적합합니다
첫번째 인자로 쓸 파일명이 0x01값입니다
이걸 /bin/sh로 향하게 해줘야합니다
이렇게 코딩을 하고
이렇게 심볼릭을 사용하도록하겠습니다
그리고
execl 함수의 주소를 구했습니다
0x7a5720
이 때 주의할 점은 fake ebp는 ebp를 조작하는 기법인데
execl함수의 프롤로그가 실행되면 조작한 ebp가 쓸모없어지므로
execl_adress+3을 해야합니다
이제 페이로드를 구성해보자면
[Buffer*264] + [GOT_address-8] + [execl_address+3]
뭔가 안되서 처음부터 다시하니깐 잘됬습니다~~
'WARGAME > Lob' 카테고리의 다른 글
LOB FC3 dark_eyes (0) | 2016.01.14 |
---|---|
LOB FC3 iron_golem (0) | 2016.01.12 |
LOB LEVEL20(xavious ==> death_knight) (0) | 2016.01.04 |
LOB LEVEL19 (nightmare ==> xavious) (0) | 2016.01.03 |
LOB LEVEL18 (succubus ==> nightmare) (0) | 2016.01.03 |