본문 바로가기

웹/sfw

sfw8 (페이지 변조 XSS)

sfw8입니다. 문제를 보면 admin을 alert하면 될 거 같긴합니다.

위의 그림처럼 단순히 admin을 script태그로 alert할려고 하면 필터링 되어서 안되는 것 같습니다. 그리고 아무 글자를 입력해서 버튼을 누르면 화면에 그대로 출력되는 것 같습니다. 그렇다면 일단 소스코드를 보겠습니다.

 

script부분을 주목해야 할 것 같습니다. admin이 일단 필터링 되는 것처럼 보이고 onload, onerror의 핸들러, write나 char을 통해 함수를 사용하는 방법 등도 필터링 되어 있는 것 같습니다. 간단하게 필터링 하는 방법으로는 admin을 hex값으로 바꾸어서 우회하는 방법이 있습니다.

먼저 hex값으로 바꾼 코드는 아래의 코드였습니다.

<script>alert('\x61646d696e');</script> 이렇게 넣은 이유는 sql injection을 할 때 이렇게 넣으면 알아서 admin으로 인식했기  때문입니다. 하지만 이렇게 넣으면

이렇게 뜹니다. a는 뜬 거보니 하마 한 hex값 앞에 \x를 붙여줘야하는 것 같습니다. 그래서 두 번째 글자도 시험해보았습니다.

예상대로인 것 같습니다. 그래서 admin을 하나하나 '\xhex 값'으로 사용해서 우회한 코드인 

<script>alert('\x61\x64\x6d\x69\x6e');</script>로 admin을 띄울 수 있었습니다.

 

생각보다 너무 간단히 우회가 되서 먼저 푼 친구들의 라업을 보니 다른 풀이법도 있어서 그것을 참고해서 다시 풀어보았습니다.

 

#새로운 풀이법

소개하는 풀이법은 홈페이지를 변조하는 방식을 사용하는 것이었습니다. 이 방법은 xss challenges 문제들을 풀 때 많이 사용했던 방법입니다. 필터링 등의 조건이 존재할 때 홈페이지 변조를 통해 조건을 해제하거나 우회해서 기본 script태그를 이용해서 푸는 것입니다.

 

이 문제에서 <form>을 입력하게 되면 기존 페이지 코드의 form태그가 덮이게 되는 것이었습니다. 이것을 이용해서 이 문제를 푼 친구는 form 태그의 return 부분을 필터링하는 함수를 거치지 않고 무조건 그냥 입력된 값을 실행하거나 값을 적히게 만들어준 뒤

<script> alert('admin'); <scrip>를 넣어주어서 문제를 해결하는 방법이었습니다. 원래의 소스코드에서 form 태그는

<form name="whoUR" action="check.php" method="post" onsubmit="return myfunction()"> 으로 값이 입력되었을 때 myfunction 함수를 통해 필터링 되는 구조인 것 같은데 아래의 값을 입력해주어서 form태그를 변경 해 주었습니다.

 

<form name="whoUR" action="check.php" method="post" onsubmit="return true">

 

위 태그처럼 입력하게 되면 무조건 입력된 값이 실행되거나 적히게 되고, 그렇게 되면 필터링 조건이 무의미해지기 때문에 문제가 해결되는 구조였습니다.(굉장히 똑똑한것 같습니다...)

' > sfw' 카테고리의 다른 글

sfw6 (XSS)  (0) 2021.01.08
sfw5 (information schema SQL injection)  (0) 2021.01.08
sfw4 (error based SQL injection)  (0) 2021.01.08
sfw3 (time based SQL injection)  (0) 2021.01.08
sfw2 (blind SQL injection)  (0) 2021.01.08