#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
void init() {
setvbuf(stdin, 0, 2, 0);
setvbuf(stdout, 0, 2, 0);
}
int main()
{
char cmd_ip[256] = "ifconfig";
int dummy;
char center_name[24];
init();
printf("Center name: ");
read(0, center_name, 100);
if( !strncmp(cmd_ip, "ifconfig", 8)) {
system(cmd_ip);
}
else {
printf("Something is wrong!\n");
}
exit(0);
}
카나리가 없다.
코드를 분석하면 read를 통해 bof가 발생하고, cmd_ip 변수가 ifconfig 문자열과 일치하는지 확인 후 system 함수를 실행한다.
따라서 bof를 통해 dummy + ifconfig + ;/bin/sh 입력하면 ifconfig 명령어 수행 후 /bin/sh을 실행할 것이다.
gdb로 분석하여 스택을 그리면 [그림 1-2]가 나온다.
성공
사용자의 입력을 적절한 검사 없이 명령어를 사용할 때 발생하는 Command Injection이다.
이런한 취약점을 막으려면 입력 값에 대해 메타 문자의 유무를 철저히 검사해야 합니다. 그리고 꼭 필요한 상황이 아니라면 system과 같은 성격의 함수를 사용하지 않으려 해야 합니다.
'Dreamhack - pwnable' 카테고리의 다른 글
master_canary (1) | 2023.02.15 |
---|---|
seccomp (0) | 2023.02.13 |
sint (0) | 2023.02.03 |
tcache_dup2 (0) | 2023.02.01 |
tcache_dup (0) | 2023.02.01 |