ROOTME] PHP - assert()

woounnan·2020년 3월 2일
0

wargame

목록 보기
5/59
post-thumbnail

문제

Home, about, contact로 구성된 홈페이지가 주어지며
각 페이지는 GET 파라미터인 page로 전달된다.

풀이

PHP의 assert()와 관련된 문제이다.
assert는 전달된 인자의 표현의 참, 거짓을 판단해서 등록된 콜백함수를 호출해준다.
핸들러 기능과 같기 때문에 디버깅 용도로 사용될 수 있다.

의도하지 않은 값을 입력해보자.
'
../
assert에 의해 에러메시지가 출력되며 표현식이 어떻게 구성되어있는지 확인할 수 있다.

Warning: assert(): Assertion "strpos('includes/..php', '..') === false" failed in /challenge/web-serveur/ch47/index.php on line 8 Detected hacking attempt!

assert는 값을 판단할 때 전달된 표현식을 실행한다.
전달되는 값은 문자열로 표현되기 때문에, sql인젝션처럼
싱글쿼터로 표현식을 망가뜨려, 원하는 함수를 실행할 수 있다.

strpos('includes/[입력값].php', '..') === false

system 함수를 중간에 삽입해서 원하는 명령을 실행한다.

strpos('includes/[aaa'.system('ls').'].php', '..') === false

위와 같은 방식으로 .passwd 파일을 찾아서 플래그값을 획득한다.

0개의 댓글