Posted by bonggang | 2019. 11. 28. 13:37
문제
문제 풀이
접속
ssh cmd1@pwnable.kr -p2222
코드 확인
#include <stdio.h>
#include <string.h>
int filter(char* cmd){
int r=0;
r += strstr(cmd, "flag")!=0;
r += strstr(cmd, "sh")!=0;
r += strstr(cmd, "tmp")!=0;
return r;
}
int main(int argc, char* argv[], char** envp){
putenv("PATH=/thankyouverymuch");
if(filter(argv[1])) return 0;
system( argv[1] );
return 0;
}
- argc(argument count): 인자의 수
- argv(argument vetor): 인자 벡터
- envp: 시스템 환경 변수
main() 함수
- putenv(): 환경 변수 목록 중 변수 값을 수정하거나 추가한다.(프로그램 실행 단위에서만 유효)
- if(filter(argv[1]))의 결과에 따라 system(argv[1])가 실행된다.
(if는 0일 때 거짓, 0이 아닐 때 참으로 동작하기 때문에 filter(argv[1])의 결과가 0이어야 함)
filter() 함수
- strstr(): 문자열 안에서 문자열로 검색하는 함수. 문자열을 발견 시 문자열 포인터 반환, 아니면 null 반환
- flag, sh, tmp 문자열이 필터링 되는 것을 확인.
실행 화면
1. 환경변수 우회
- export 변수명 = 변수 값: 해당 변수명에 변수값을 등록
2. 와일드카드 Bypass
- 쉘에서 실행하고자 하는 프로그램 이름의 일부를 생략 후 * 기술.
- putenv()로 경로가 선언되었기 때문에 cat이 있는 경로 /bin/cat의 절대경로를 입력해준다.
+) 와일드 카드
- *: 일치되는 모든 문자
- ?: 일치하는 하나의 문자
- [문자]*: []로 시작되는 모든 문자
+) 환경 변수
- export: 환경변수 리스트 출력
- export 변수명=변수값: 변수명에 변수값 등록
- echo $변수명: 변수명에 해당하는 환경변수 값 출력
- export 변수명=$변수명:변수값: 변수명에 변수 값을 추가
-> 출처: https://akaseon.tistory.com/50
'Security > System' 카테고리의 다른 글
[pwnable.kr] Toddler's Bottle - shellshock 문제 (0) | 2020.06.01 |
---|---|
Shell Shock (0) | 2020.05.29 |
버퍼 오버플로우(Buffer OverFlow) (0) | 2020.03.13 |
[pwnable.kr] Toddler's Bottle - cmd2 문제 (0) | 2019.11.28 |
[pwnable.kr] Toddler's Bottle - random 문제 (0) | 2019.10.02 |
[pwnable.kr] Toddler's Bottle - flag 문제 (0) | 2019.09.11 |
[pwnable.kr] Toddler's Bottle - bof 문제 (0) | 2019.09.10 |
[pwnable.kr] Toddler's Bottle - collision 문제 (0) | 2019.09.10 |