본문 바로가기

시스템/pwnable.kr

cmd2

cmd2


cmd2.c


포인트

1. echo 명령어

2. command 명령어

3. read 명령어


삽질 1

 filter함수에 걸리진 않지만 /bin/cat hey3를 실행한 결과값을 출력하는 것이기 때문에 Permission denied 된다.


삽질 2

이것 또한 filter함수에 걸리진 않지만 \57bin\cat hey3 출력 후, system("57bin57cat") 실행 실패


* hey3 : flag의 심볼릭 링크


삽질 3 

echo -e 를 써서 바로 입력도 가능한데 쉘이 -e옵션을 인식하지 못한다.


정답


1. echo 명령 사용해서 /bin/cat flag 실행한 결과 출력


$(echo "\57")bin$(echo "\57")cat fla* 그대로 출력된다.

"\57"가 '/'로 변경된 후, $(echo /)bin$(echo /)cat fla* 실행된 결과 출력


2. command -p 명령 사용해 디폴트 환경변수 적용해 cat flag 실행한 결과 출력



3. read 명령 사용해 /bin/cat flag 입력받고 실행한 결과 출력


  

 read로 한 줄 읽은 후 x에 넣고 x에 있는 명령 실행

 



참고


1. 싱글쿼트('') 쌍쿼트("") 차이 - 문자열의 변형

싱글쿼트로 문자열을 감싸면 어떤 해석도 거치지 않고 문자열 그대로 인식

언제 사용? 특수문자 많을 때 유용

쌍쿼트로 문자열을 감싸면 문자열에서 몇 가지 특수 문자(ex. $, `, \)를 재해석함 -> filter에서 걸러지는 것

언제 사용? 변수와 함께 사용할 때, 명령어의 인수로 사용할 문자열에 공백이 포함되어 하나의 인수가 둘로 인식되는 것을 막을 때


ex1. 

'$(echo "\57")' : 보내지는 문자열 - $(echo "\57")

"$(echo "\57")" : 보내지는 문자열 - /


 ex2.

 

쌍쿼트로 감싸진 문자열 안에 특수문자('$')를 재해석해서 전달


2. $(echo /) : /을 실행한 후의 값


3. echo -e : 문자열에서 '\'와 조합되는 이스케이프 문자를 인용부호(")로 묶어 인식


4. $(echo /)bin$(echo /)cat fla* 결과


5. 명령 실행 후 오류값 확인

$로 두번 감싸면 filter로 걸러진 오류 결과 출력


6. command 함수 

command -p : 명령에 디폴트 환경변수 사용해 실행


7. read 명령어 - 쉘 내부 명령어

                                                                               

 

read 명령은 한 줄 읽어들여서 x로 넣는다.

echo $x는 문자열 그대로 출력, $x은 명령 실행한 결과 출력 

* 쉘 내부 명령어는 PATH 환경변수 없어도 실행 가능


                                                                              


                                                                            

'시스템 > pwnable.kr' 카테고리의 다른 글

uaf  (0) 2018.11.06
cmd1  (0) 2018.11.05
lotto  (0) 2018.11.05
blackjack  (0) 2018.11.05
coin1  (0) 2018.11.05