여기에서의 목표는 XSS취약점을 찾아서 alert를 띄우는 것이다.
이 페이지에서 클라이언트측의 입력이 출력되는 곳은 오직 게시글 검색 한곳이다.
검색창에 값을 입력하게 되면 다음과 같은 응답이 나오게 된다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="./css/style.css" rel = "stylesheet"/>
<title>Free Talking</title>
</head>
<body>
<div class = "column">
<div id = "search">
<form method = "post">
<select name = "option_val">
<option value = "username">작성자</option>
<option value = "title">제목</option>
<option value = "content">내용</option>
</select>
<input id = "search_addr" name = "board_result" type = "text" placeholder="Search" />
<input type = "submit" name = "board_search" value = "🔍" id = "search_btn" />
<i class="far fa-calendar-alt"></i><input type = "date" name ="date_from" />
<i class="far fa-calendar-alt"></i><input type = "date" name = "date_to" />
</form>
</div>
<div>
<table>
<thead>
<tr>
<th>User ID</th>
<th>Title</th>
<th>Views</th>
<th>Date</th>
</tr>
</thead>
<tbody>
<script>alert('ㅁㅁ에 대한 검색 결과가 존재하지 않습니다.');</script> </tbody>
</table>
</div>
<button class = "writeBtn" onclick = "location.href = 'notice_write.php'">글쓰기</button>
<div class = "paginations">
<form method = "post">
<input type = 'submit' class = 'pagination' name = 'page' value = '1'/> </form>
</div>
</div>
<script
src="https://kit.fontawesome.com/6478f529f2.js"
crossorigin="anonymous"
></script>
</body>
</html>
script태그 사이에 있는 alert함수로 입력값이 출력이 되고 있다. XSS가 성공하기 위해서는 get 방식의 전송이 필요하므로 burp swip의 repeater에서 change response method로 전송방식을 get으로 전송하였더니 같은 응답이 나왔다.
즉 현제 페이지에서는 XSS취약점이 있다는 것이다.
태그를 쓰기위한 특수문자인 <,>,',"을 넣어서 전송을 해 보았다. 그 결과는 다음과 같다.
즉, 위에서 사용한 특수문자들은 전부 entity로 처리한다는 것이다.
위의 문자의 bypass를 위해서 여러 인코딩을 사용해보았다.
첫번째로는 url인코딩이다. %27을 사용할 경우에 결국 entity로 처리 되었다.
두번째는 이중url인코딩이다.%를 의미하는 %25에 27을 붙인 결과 %27이 출력되었다.
세번째는 HTTP hex인코딩이다. 입력 그대로 '이 나왔다.
결국 특수 문자의 bypass는 실패하였으나 생각해보니 alert창이 뜨는것은 검색결과가 존재하지 않아서 뜨는것이라는 것을 깨닫고 바로 aaaa라는 제목으로 글을 써서 검색을 해보았더니 다음과 같은 응답값이 나왔다.
사진이 크기가 작아 잘 보이지는 않지만 a태그 사이에 aaaa가 존재했다.
글을 쓸때에도 <,>,",'가 entity로 변환되어 신경을 안쓰고 있었는데, 목록에서는 entity가 아닌 문자 그대로 출력이 되고있었다.
바로 제목에 다음 코드를 작성하였다.
<script> alert(1) </script>
이제 get형식 전송의 url을 복사하면 끝이다.
'Nomaltic's Hacking Traning!!' 카테고리의 다른 글
CSRF_1,2 문제풀이 (0) | 2023.05.25 |
---|---|
XSS 7 (0) | 2023.05.17 |
DB데이터 추출 1,2,3 문제 풀이정리 (0) | 2023.05.02 |
DB 데이터 추출 3_blind sqli 이진탐색 (0) | 2023.05.01 |
db 데이터 추출 2 (0) | 2023.04.26 |