XSS 사용해보기
11306 단어 웹HTML크래킹은 절대 안됩니다.xss취약성
주의사항
이 검증은 자신이 관리하는 가상 머신의 웹 서버에서 수행됩니다.
자신의 통제하에 있지 않은 서버의 공격 행위는 죄에 묻힐 수 있습니다.
개요
크로스 사이트 스크립팅 (이하 XSS)을 실제로 시도하고 철저히 이해하는 목적.
간단한 XSS가 성립하는 환경의 구축과 XSS의 실행입니다.
이 기사에서는 서버에서 수행하는 처리 내용과 XSS 방법에 대해 설명합니다.
환경
VirtualBox 6.0.2.0
우분투 18.04.4 LTS
아파치 2.4.29
XSS 시도해보기
웹 서버에 다음 페이지를 준비했습니다.
내용으로서는, 입력을 5개 받고 Perl의 스크립트에 값을 건네주는 느낌입니다.
실제로 값을 전달하면
↓ 페이지 천이
라는 느낌으로 날아간 페이지에서 입력 내용을 그대로 표시하는 다음과 같은 페이지입니다.
<html>
<body>
your input<br>
1<br>
2<br>
3<br>
4<br>
5<br>
</body>
</html>
여기에서 공격자로
시험에 <>'"\$
등의 제어 문자를 입력해 보면
날아간 곳에서 그대로 표시되었습니다.
이것은 XSS가 될 것 같습니다!
시험에 다음 코드를 입력해보십시오.
이것은 곧바로 ayashii.html
로 날아가는 처리입니다.
<script>
setTimeout("location.href='http://サーバのIPアドレス/ayashii.html'",1);
</script>
이 스크립트를 입력하면 다음과 같은 HTML 페이지가 표시됩니다.
<html>
<body>
your input<br>
<script>
setTimeout("location.href='http://サーバのIPアドレス/ayashii.html'",1);
</script><br>
2<br>
3<br>
4<br>
5<br>
</body>
</html>
위의 페이지에서 ayashii.html(下の画像)
로 리디렉션됩니다.
수상한 처리가 이루어졌습니다.
왜 스크립트가 실행 되었습니까?
이번에 사용한 페이지에서는 입력된 내용을 그대로 HTML로 출력하는 처리가 이루어지고 있었습니다.
입력 내용에 스크립트가 입력되어 버린 것으로 그 부분도 포함하여 HTML 문장으로서 성립해 버렸군요.
대책으로서
입력되는 스크립트가 성립하지 않게 하면, 이 방법으로 임의의 스크립트가 실행할 수 없게 됩니다.
처리에서 <>'"\$
등의 제어 문자를 다른 문자로 바꾸어 버리거나 원래 제어 문자의 입력을 금지하는 등의 대책을 생각할 수 있습니다.
오시마
저는 웹 페이지를 구현하고 XSS를 사용해 보았습니다.
이 예에서는 입력 한 사용자 만 스크립트에 영향을받습니다.
실제로 이 공격이 의미를 이루는 것은 여기의 코멘트란과 같이, 입력한 것이 다른 유저에게도 공개되는 것 같은 장소일 것입니다.
코멘트에 공격자가 사이트를 본 사람을 악의가 있는 페이지 유도하는 스크립트를 입력하는 것과 같은 이미지로.
XSS는 여기서 소개한 것 외에도 몇 가지 종류가 있는 것 같기 때문에 조사해 보는 것도 좋을지도 모릅니다.
부록
입력 페이지
input.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>入力フォーム</title>
</head>
<body>
<form action="cgi-bin/cal.cgi" method="GET">
<h3>5つの数値を入力</h3>
<p>
num1 : <input type="text" name="value1" size="10"><br>
num2 : <input type="text" name="value2" size="10"><br>
num3 : <input type="text" name="value3" size="10"><br>
num4 : <input type="text" name="value4" size="10"><br>
num5 : <input type="text" name="value5" size="10"><br>
</p>
<p>
<input type="submit" value="OK"><input type="reset" value="reset">
</p>
</form>
</body>
</html>
입력한 것을 출력하는 사람
cal.cgi#!/usr/bin/perl
use CGI;
$q = new CGI;
$value1 = $q->param('value1');
$value2 = $q->param('value2');
$value3 = $q->param('value3');
$value4 = $q->param('value4');
$value5 = $q->param('value5');
print"Content-type: text/html\n\n";
print"<html><body>\n";
print"your input<br>";
print"$value1<br>";
print"$value2<br>";
print"$value3<br>";
print"$value4<br>";
print"$value5<br>";
print"</body></html>\n";
exit;
멍청한 사이트
ayashii.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>とても怪しいサイト</title>
</head>
<style>
h1{
color:red
}
</style>
<body>
<h1>なにかあやしい処理</h1>
</body>
</html>
Reference
이 문제에 관하여(XSS 사용해보기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/nushitoritarou/items/4df2fd8ad27af672190b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
<html>
<body>
your input<br>
1<br>
2<br>
3<br>
4<br>
5<br>
</body>
</html>
<script>
setTimeout("location.href='http://サーバのIPアドレス/ayashii.html'",1);
</script>
<html>
<body>
your input<br>
<script>
setTimeout("location.href='http://サーバのIPアドレス/ayashii.html'",1);
</script><br>
2<br>
3<br>
4<br>
5<br>
</body>
</html>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>入力フォーム</title>
</head>
<body>
<form action="cgi-bin/cal.cgi" method="GET">
<h3>5つの数値を入力</h3>
<p>
num1 : <input type="text" name="value1" size="10"><br>
num2 : <input type="text" name="value2" size="10"><br>
num3 : <input type="text" name="value3" size="10"><br>
num4 : <input type="text" name="value4" size="10"><br>
num5 : <input type="text" name="value5" size="10"><br>
</p>
<p>
<input type="submit" value="OK"><input type="reset" value="reset">
</p>
</form>
</body>
</html>
#!/usr/bin/perl
use CGI;
$q = new CGI;
$value1 = $q->param('value1');
$value2 = $q->param('value2');
$value3 = $q->param('value3');
$value4 = $q->param('value4');
$value5 = $q->param('value5');
print"Content-type: text/html\n\n";
print"<html><body>\n";
print"your input<br>";
print"$value1<br>";
print"$value2<br>";
print"$value3<br>";
print"$value4<br>";
print"$value5<br>";
print"</body></html>\n";
exit;
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>とても怪しいサイト</title>
</head>
<style>
h1{
color:red
}
</style>
<body>
<h1>なにかあやしい処理</h1>
</body>
</html>
Reference
이 문제에 관하여(XSS 사용해보기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nushitoritarou/items/4df2fd8ad27af672190b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)