안녕하세요, 아오바 스터디 숙제로 웹해킹 문제의 롸업(Write up)을 쓰게 되었습니다.
이번에 풀이할 문제는 Hand of Plus 입니다. 게시물의 내용은 정준영(Joon)님이 수업해주신 내용 거의 그대로입니다.
https://wargame.aover.team/challenges 이 링크에는 아오바 워게임 문제들이 있습니다. 문제를 참고하시기 바랍니다.
Scripts
1
2
3
4
5
6
7
|
<?php
extract($_SERVER);
extract($_COOKIE);
if($HTTP_ACCEPT_ENCODING == "I" && $HTTP_USER_AGENT == "need" && $HELLO == "a" && $WORLD == "flag"){
echo "<script>alert('[Suzukaze aoba says]\\nWow! I finally my graphics card mined the beatcoin!\\nHere\'s a little prize!\\n[FLAG HERE]');</script>";
}
?>
|
cs |
문제에 들어가면 위와 같은 코드가 적혀있습니다. 이 문제는 PHP의 기본 함수인 extract()에서 발생하는 취약점을 이용하는 것입니다.
Extract 함수
extract($var) 을 예시로 들면, 변수 $var의 array에 존재하는 모든 값을 새로운 변수로 선언하는 내장함수입니다.
이 취약점은 잘 일어나지 않지만 취약한 곳이 많으며, 서버가 받는 클라이언트에 대한 정보를 변조할 수 있다는 취약점이 있습니다.
이 취약점을 방어하는 방법으로는
- 변수를 선언하기 전에 extract 함수 사용하기
- extract 이후에 다시 변수 덮어쓰기
- EXTR_SKIP이 옵션으로 사용되도록 하기
가 있습니다.
문제풀이
문제를 푸는 방법은 두 가지가 있습니다. 하나는 피들러를 이용하는 방법, 하나는 쿠키를 변조하는(?) 방법입니다.
사실, 수업 피들러 사용을 잘 모르는 터라... 쿠키에 대해서만 하겠습니다.
먼저, 쿠키를 편집하기 위해서 크롬 확장 프로그램인 EditThisCookie를 설치하였습니다.
https://chrome.google.com/webstore/detail/editthiscookie/fngmhnnpilhplaeedifhccceomclgfbg?hl=ko
위 링크에서 EditThisCookie를 설치한 후,
다시 Hand of Plus 사이트에 접속합니다.
접속 후, EditThisCookie를 열면 이런 화면이 나옵니다.
다시 코드에 주목하다보면 변수 HTTP_ACCEPT_ENCODING의 값은 I 이고, HTTP_USER_AGENT의 값은 need, HELLO의 값은 a, WORLD의 값은 flag 이면 if문의 조건을 충족시킵니다.
따라서, 위 EditThisCookie에서 새 쿠키 만들기를 선택하고 아래 사진과 같이 추가해 나갑니다.
이런 식으로 하여금, if문을 충족시키면 flag를 얻을 수 있습니다.
갑사합니다.