CTF Python Jail tips - 3
해당 글은 지난번에 작성한 CTF Python Jail의 advanced한 글이다.
Python module
import 로 가져오는 것이 바로 모듈이며, 이 모듈은 C++에서의 namespace와 약간 비슷한 개념이다. (제가 C++를 많이 배운 편이 아니라, 만약 아니라면 댓글로 지적 부탁드립니다.)
만약 모듈을 import 했다면, 우리는 모듈 내의 변수, 함수 등의 자원들을 사용할 수 있다. dir() 함수로 확인 가능하다.
모듈 안에 있는 자원은 . (dot) 을 통해서 접근 가능하다.
파이썬 Jail Break 문제에서 system이 막혔을 때, system 함수를 사용하지 못할 것이다. os.system이 막혔으니까. (물론, system command를 실행시키는 함수가 여러개 있지만, 사용 가능한 함수가 system() 함수 밖에 없다고 가정할 때) 그럼 우리는 어떻게 system() 함수를 실행시킬 수 있을까?
Javascript Object의 하위 계층 접근
다른 프로그래밍 언어와 비슷하게 . 으로 하위 계층에 접근 가능하다. 여기서도 비슷하게 Javascript Jail이 있다고 가정했을때, console 이 막혔으면, console.log() 함수를 사용할 수 없을 것이다.
하지만, 자바스크립트에서는 하위 계층에 접근하는 다른 방법이 존재한다.
똑같이 console.log 함수가 실행되었다. 자바스크립트에서는 이런 식으로 하위 계층에 접근이 가능하다. 해당 방법을 이용하면 아무리 console이나 log가 필터링되어도 다음과 같은 방법으로 우회가 가능하다.
문자열의 우회는 쉬우니까. 쉽게쉽게 실행할 수 있다.
Python에서는?
파이썬에서 어떤 방법을 사용해서 하위 계층에 접근할 수 있을까. 파이썬에서는 __dict__라는 것이 있다. dir() 함수와 약간 비슷한 면이 없지 않아 있지만, dir() 함수로 해당 module, object, class의 하위 계층 elements를 string형의 형태로 반환한다고 하면, __dict__는 상태 그대, dictionary형으로 들어있다.
그럼 이렇게 접근이 가능하다. 아래는 __dict__를 이용해서 system 함수에 접근한 뒤, 실행한 코드이다.
dict에서 받는 문자열은 비교적 우회하기 쉬운 편이니 . (dot)과 _ (underbar)만 막지 않았다면, 유용히 사용할 수 있겠다.
'Hacking > App.' 카테고리의 다른 글
ls, dir 막혔을때 파일 리스팅 (0) | 2018.09.26 |
---|---|
command injection 공백 우회 (0) | 2018.08.17 |
CTF Python Jail tips 2 (1) | 2018.02.16 |
CTF Python Jail Tips (0) | 2018.02.08 |
System overall (0) | 2018.01.05 |