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.' 카테고리의 다른 글

잊기전에 적어두는 bash trick  (0) 2018.11.06
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