Hacking/Pwn.

잊기전에 적어두는 bash trick

2018. 11. 6. 12:43




 최근 CTF 들에 bash trick 이 너무 많이 올라오는 것 같아서 이참에 한 번 정리해놓고 가야겠다. 


- sh, bash, dash 등이 필터링 되어있는 경우 : 

$1 을 붙이는 것으로 우회 가능 (s$1h)



* $1 에는 아무런 내용이 없기 때문에 bash에서는 sh 만 인식하게 된다. 

* 동일한 원리로 다음과 같은 상황도 가능하다. 



- vi가 필터링 되어있지 않은 경우 : 

* vi안에는 :! [command]로 쉘을 실행시킬 수 있는 기능이 있기 때문에 이것으로 쉘을 획득할 수 있다. (Layer7 Talmoru Party 문제에서 처음 알게 되었다.)


- flag 등 파일 이름이 필터링 되어있는 경우 : 

* bash에서 기본으로 제공하는 regex 를 이용하면 된다. 다음과 같은 형식으로 우회 가능하다. (https://www.networkworld.com/article/2693361/operating-systems/unix-tip-using-bash-s-regular-expressions.html)



- cat이 필터링 되어있는 경우 : 

* head, tail, more, nl 등 다소 생소한 명령어들은 막히지 않았을 가능성이 다소 농후하기 때문에 생소한 명령어를 사용한다. 


- 띄어쓰기가 필터링 되어있는 경우 : 

* bash에 기본적으로 정의되어있는 $IFS를 사용한다. (DIMICTF 2018 예선 웹 문제에서 알게되었다.)



- 홈디렉터리를 가르키는 또 다른 것

* ~[user_name] 식으로 접근할 수 있다.



- . (dot) 사용

* dot은 실제로 존재하는 명령어이다. 상황에 맞게 사용하면 될 것 같다.



- `` 사용 (backtick 이라고 한다.)

* LOB 를 풀어본 사람은 대충 알겠지만, `` 안에 있는 command를 실행시킨 후 command 를 실행시킨다. 

* 제일 첫번째에서 필터링을 우회할 때 s$1h 처럼 썼듯, s``h 로 우회할 수 있다. 


- <filename

* <./flag 로 플래그의 내용을 알 수 있다. flag 파일 안에 있는 내용을 bash로 실행시키기 때문에 에러 메시지를 확인할 수 있는 경우 쉽게 사용가능하다. 


- SQL에서 sub-query 같은 무언가를 사용 (명칭을 정확히 모르겠다.)

* echo $(ls)



 - flag가 여러 파일로 쪼개져있는 경우 

* echo {1..9}

* echo flag{1..9}를 상황에 따라서 이용하면 된다.




'Hacking > Pwn.' 카테고리의 다른 글

ROP with libc leak  (0) 2018.09.19
FSB 공격시 유용한 것들  (0) 2018.07.27
LoB에서 bash2 명령을 사용하는 이유  (0) 2018.07.13
python jail  (0) 2018.06.21
Shell Escaping tips  (0) 2018.04.17