티스토리 뷰
이번학기 목표를 pwnable.kr 를 hacker's secret 빼고 다 풀어 보는 것으로 잡았다.
그래서 오늘도 포너블문제 두개를 풀었는데 그것을 한번 풀이 해 보도록 하겠다.
이 문제에서 알아야 할 개념은 리눅스의 환경변수와 C의 strstr()함수 인데 문제를 풀면서 같이 공부해보자.
풀어볼 문제는 cmd1 리눅스의 환경변수를 이용하는 문제이다.
접속해보면 위와 같이 cmd1 cmd1.c flag 파일이 있다.
코드를 읽어보면 다음과 같은데 사용자에게 입력받은 문자열을 시스템 함수에 넣고 실행시키는 코드이다.
이때 strstr()함수를 통해 몇가지의 문자열이 필터링 된다. flag, sh, tmp
-strstr(string1, string2)
string2가 string1에 나타나는지를 검사하는 함수. 아니면 NULL. string2에서 끝나는 널문자(\0)를 무시함.
이를 우회하기 위해서 문제의 힌트에서 나와 있듯이 리눅스의 환경변수를 이용한다.
-리눅스의 환경변수
윈도우와 마찬가지로 리눅스에도 환경변수가 존재하는데 리눅스에서 환경변수를 설정하기 위해서는 크게 두가지 방법이 있다.
1. 환경변수를 설정할 홈 디렉토리의 ~/.bash_profile 에 PATH=를 추가해 주는 것.
2. export 명령어를 이용해 환경변수를 지정해 주는 것.
이렇게 두가지가 있는데 먼저 시도한 ~/.bash_profile 수정은 파일 수정 권한이 없어서 사용할 수 없는 방법이고,
두번째 export 명령어를 이용해 환경변수를 지정해 주는 것을 자세히 살펴 보자.
-export
리눅스에서 환경변수를 다루기 위해 사용 되는 명령어.
=사용법
export |
전체 시스템 상의 설정 출력 |
export $PATH |
현재의 패스가 걸린 디렉토리가 전부 출력 |
export 변수명=변수값 |
변수 등록 |
export 변수명=$변수명:변수값 |
변수명에 변수값 추가 |
printenv | 등록되어 있는 환경변수 확인 |
그래서 위의 배경 지식을 바탕으로 문제를 풀면
export hi=~/flag
./cmd1 "/bin/cat \$hi"
flag 값^^
다음과 같이 플래그 값을 얻을 수 있다.
해당 문제를 통해서 리눅스 환경변수를 설정하는 방법과 자주 사용한 적 없었던 strstr() 함수에 대해서 알 수 있었다.
'Write Up > pwnable.kr' 카테고리의 다른 글
pwnable.kr)shellshock (0) | 2019.04.02 |
---|---|
pwnable.kr)flag_리눅스 upx 언패킹 (2) | 2019.03.31 |
pwnable.kr)bof_버퍼오버플로우 (2) | 2019.03.29 |
pwnable.kr)cmd2_command함수_필터우회 (0) | 2019.03.25 |
pwnable.kr) fd write up (0) | 2019.01.08 |
- Total
- Today
- Yesterday
- 코드로 배우는 스프링 부트
- Android
- 포너블.kr
- 정보보안
- exception
- androidstudio
- 펌웨어 분석
- 동적분석
- 모바일리버싱
- reversing.kr풀이
- 리버싱.kr
- NumberFormatException
- 앱분석
- 안드로이드
- 뷰모델
- Java
- 웹 MVC
- 칼리리눅스
- DataBinding
- 자바
- writeup
- MVVM
- reversing.kr
- pwnable.kr
- 에러
- Spring
- 리버싱기초
- AndroidX
- CTF
- 스프링부트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |