잊기전에 적어두는 bash trick
최근 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 |