wise saying
1) html injection 시도
위와 같이 id 로 입력한 값을 통하여 인젝션을 시도해 봄
php 코드를 삽입하려 시도했으나, <? 문자에 대한 필터링을 우회 x
소스 코드 아래에 위치한, ?phpinfo=1를 발견하여, 해당 url을 통하여 phpinfo() 출력한 결과를 볼 수 있었음.
또한 로그인 후, ?page= 와 같은 형식으로 page 인자가 존재하는데, 끝 문자가 "say" 가 아닐 때에는 다음과 같은 필터링이 적용됨을 볼 수 있음
phpinfo 를 통하여는, 다음과 같은 정보들을 알 수 있음
위와 같이 현재 위치의 절대 경로를 파악할 수 있다.
2) php wrapper + say 필터링
wrapper 를 이용함과 동시에, %00과 같은 공백 문자를 활용하여 say 문자를 필터링하는 방식으로 /etc/password 파일을 열람하려 했으나, 성공 x
-> php5 이후에는 패치된 취약점이라고 함.
3) session 이용
로그인 후, 위와 같은 세션에 대한 정보를 제거하면 자동으로 로그인 상태가 풀리므로, 세션 페이지를 이용한 공격을 시도해 봄.
session.save_path 의 값이 no value로 설정되어 있으므로, 디폴트 위치인 /tmp에 세션 페이지가 존재함을 예상할 수 있음.
(ubuntu/Debian : /var/lib/php5
centOS : /var/lib/php/session)
(+ php.ini 설정 파일에서도 저장 위치를 확인할 수 있음)
따라서 세션 페이지에 접근하기 위하여, 쿠키 값을 다음과 같이 변경하였다.
page 인자를 통하여 접근하면
위와 같이 계정 정보 id 가 출력됨을 볼 수 있다.
따라서 기존에 html injection을 방식을 통하여는 필터링되었던 <?php 와 같은 키워드를 세션 페이지에 삽입하고, 페이지 값을 가져오는 방식을 생각할 수 있다.
이 때 디렉토리 정보를 확인하기 위하여, shell_exec 함수를 삽입함.
<?php $r=shell_exec("ls"); echo $r; ?>
(php 파일이 아닌 세션 파일이므로, wrapper 사용하지 않아도 됨.)
f14g__NGA 를 열람하여 보면
<?php $r=shell_exec("cat f14g__NGA"); echo $r; ?>
를 이용하여 플래그를 획득 가능함.