간단한 xss필터링을 우회하는 문제이다.
소스코드
각 페이지 별로 기능을 정리한 코드이다.
/vuln : 파라미터값을 리턴하는 함수
/flag : 파라미터 값을 입력받고 flag를 가져와 쿠키로 만드는 함수
/memo : 파라미터에 입력받은 값을 출력하는 함수
xss공격 필터링을 위해 _filter리스트에 문자열을 나열해 둔 후 해당 문자열이 입력되면 ''로 치환하는 함수다.
해당 문제를 해결하기 위해서는 flag페이지를 통해 파라미터값에 xss공격을 시도하고 입력받은 공격은 vuln페이지로 가서 실행이 되고 memo페이지를 통해 flag값을 확인하면 된다.
flag 페이지에서 파라미터 값으로 공격코드를 입력해야 한다.
쿠키값을 확인해야 하므로 document.cookie를 실행하면 되지만 해당 코드는 자바 스크립트이기에 script태그가 있어야 한다. filter에 script가 있기에 그대로 사용을 하게 된다면 필터링되어 ""로 변환될 것이다.
이럴 경우 script를 사용하기 위해 변환이 되어도 script가 남아 있도록 하면 된다.
<scscriptript>를 사용할 경우 필터링에서 script가 있음을 확인하고 ''로 변환할 것이다.
그럼 남은 코드는 <script>이므로 자바 스크립트가 실행될 수 있다.
<scrscriptipt>document.cookie</scrscriptipt>
근데 해당 코드만 실행을 하면 우리가 cookie값을 확인할 방법이 없다.
그러므로 출력을 하는 페이지인 /memo로 이동하여 해당 값을 출력해야 한다.
이때 자바스크립트에 다른 페이지로 이동하는 코드인 location을 사용하면 된다.
하지만 location에는 on이라는 문자열이 포함되기 때문에 또다시 필터링에 걸릴 것이다.
아까와 동일한 방법으로 on을 하나 더 사용해 준다면 필터링을 우회하는 데 성공할 것이다.
<scrscriptipt>locatioonn.href="/memo?memo="+document.cookie</scrscriptipt>
위의 명령어를 입력하고 memo페이지로 이동하게 되면
flag를 확인할 수 있다.
'Hacking > DreamHack' 카테고리의 다른 글
[DreamHack] 드림핵 out of money (0) | 2024.01.19 |
---|---|
[DreamHack]드림핵 File Vulnerability Advanced for linux (1) | 2024.01.05 |
[DreamHack] 드림핵 amocafe (0) | 2023.11.17 |
[DreamHack] 드림핵 random-test (1) | 2023.11.17 |
[DreamHack] 드림핵 Type c-j (0) | 2023.11.14 |