#include <stdio.h>
int main(){
setresuid(getegid(), getegid(), getegid());
setresgid(getegid(), getegid(), getegid());
system("/home/shellshock/bash -c 'echo shock_me'");
return 0;
}
- setresuid, setresgid를 shellshock_pwn의 권한으로 부여
/home/shellshock/bash
를 실행하고echo shock_me
이 문제는 참… 처음 딱 보면 뭐 어쩌라는 건지 shellshock은 또 뭐고 뭐 진짜 어쩌라는 거임
이런 생각이 딱 들고 아예 아무 생각도 못하게 된다.
그래서 다른 라업들을 참고한 결과 shellshock, 환경변수, bash에 대해 좀 더 알아야 풀 수 있다는 것을 깨달았다.
shellshock → 환경 변수에 코드를 삽입해 예상치 못한 행위를 하는 취약점
환경 변수로 변수와 함수 등록 가능
함수명() {함수 body;} 로 함수 선언 가능
export를 사용하면 함수명 =’() {함수 body}’로 선언 → 변수로 등록
bash를 실행하면 등록된 환경변수 읽어 옴 → 함수 문법으로 되어 있으면 함수라고 판단 → 변수를 함수로 등록
bash를 실행하고 환경변수를 초기화 하는 과정에서 /bin/cat flag 실행
이런 과정들을 거쳐 이제 flag를 얻어 보자…
test를 변수로 등록하고, ;를 이용해 /bin/cat flag 명령어가 실행되도록 하였다.
bash의 동작 흐름
1. bash 실행
2. bash 환경 변수 초기화
3. shell prompt 출력
4. 명령어 대기 상태
5. 명령어를 문자열로 저장하여 문자열 parsing
6. 명령어 수행
'포너블' 카테고리의 다른 글
[포너블/pwnable.kr] input (1) | 2023.09.02 |
---|---|
[포너블/pwnable.kr] blukat (0) | 2023.08.30 |
[포너블/pwnable.kr] cmd2 (0) | 2023.08.30 |
[포너블/pwnable.kr] cmd1 (0) | 2023.08.30 |
[포너블/pwnable.kr] passcode (0) | 2023.08.30 |