본문 바로가기
1.A. High Level Computing/Et Cetera

Nox - Burp Suite 연동 (Android 7 & 인증서 & 루프백 프록시 잡기)

by Never Settle Down 2024. 8. 19.
반응형

 

 

 

너무 더워서... is it new years yet...

 

 

android 취약점 점검때 써야되서

하는데... 블로그를 아무리 뒤져봐도 안된다.

 

왜그르냐.

 

 

일단 prerequisites 다운로드

 

https://www.bignox.com/

 

Noxplayer – Fastest and Smoothest Android Emulator for PC & Mac – Free and Safe

Play the most popular mobile games and run apps on PC with NoxPlayer, the best Android Emulator. Supports Android 9. Compatible with Windows & Mac. Much faster and more stable.

www.bignox.com

 

https://developer.android.com/tools/releases/platform-tools?hl=ko

 

SDK 플랫폼 도구 출시 노트  |  Android Studio  |  Android Developers

Android SDK 플랫폼 도구는 Android SDK의 구성요소입니다.

developer.android.com

 

https://portswigger.net/burp/communitydownload

 

Download Burp Suite Community Edition - PortSwigger

Burp Suite Community Edition is PortSwigger's essential manual toolkit for learning about web security testing. Free download.

portswigger.net

 

https://slproweb.com/products/Win32OpenSSL.html

 

Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions

Minimum system requirements: Windows XP or later 32MB RAM 200MHz CPU 30MB hard drive space Recommended system requirements: Windows XP or later 128MB RAM 500MHz CPU 300MB hard drive space April 11, 2024 - OpenSSL 3.3 is available. Users should currently in

slproweb.com

 

 

 

설치는 알아서 했을거라 가정하고.

 

안드로이드 7 기준으로 작성하였다.

 

0. 버프 프록시 잡기 (가상 네트워크 IP로)

 

더보기

 

일단 안드로이드에서 버프스위트로

이 놈이 프록시 서버다 라고 알고있어야

거기로 패킷을 보낸다.

 

여기서 공인IP는 걍 아무거나 친 것이다. 의미없음. 그리고 안드로이드 ip 오타나서 수정하려고 하는데 개불편하다 진짜 그지같네

엄밀히 하자면 저기서 라우터가 아니라

NAT gateway이긴 한데... 뭐 가상 네트워크 내부끼리 통신하면 라우팅 해주니까

라우터로 잡은 것이다.

 

네트워킹이 핵심이 아니니까 그냥 넘어가자.

 

 

여기서 네모 박스에 해당하는 IP;

- NOX의 게이트웨이(GW) 172.16.102.2

- VMWare NAT옵션 먹인 인터페이스의 GW 192.168.164.1

- WSL의 GW 172.20.128.1

- Windows의 네트워크 사설IP 192.168.0.33

를 수신자로 잡고 패킷을 보내면

(e.g. ICMP echo, http request, ssh request...)

윈도우즈가 수신자가 된다.

 

 

윈도우즈 방화벽은 제끼고,

버프스위트가 윈도우즈에 달라붙어서 패킷을 수신하는 것도 일단 제끼고 (실제 네트워크상에선 방화벽 연계임)

 

 

그럼 윈도우즈에게 프록시 전달 요청 (http 리퀘스트 패킷)을 보내면

윈도우즈는 버프 스위트에게 해당 패킷을 전달해주고

버프스위트는 그 패킷을 잡든지 (intercept) 아님 패스스루를 하고 기록을 남기든지 (proxy - HTTP history) 한다.

 

 

 

네트워크 잘 모르곘으면 그냥 그러려니 하면 된다.

 

 

처음에 녹스를 깔고나서 안드로이드 VM을 생성하고나면

녹스 프로그램 내부의 가상 네트워크가 어떻게 생겨먹은지 알기가 어렵다.

 

그럼 일단은 프록시를 Windows의 IP (실제 네트워크 사설)로 잡으면 된다.

 

사설IP는 보통 바뀔 수 있다.

(사설IP를 고정으로 쓸 수 있는 사람이면 뭔지 알 터이니 이하 생략한다)

 

그럼 윈도우 PC 껏다 켜면 프록시 설정 또하고, 또하고, ...

 

그래서 일단은 윈도우 PC의 실제 네트워크상 IP로 프록싱을 하고,

nox 설정 마무리하고나서 루프백이 가능한 ip,

nox의 가상네트워크상 ip로 재설정하면 된다.

 

둘 다 설명을 추가하였으니 참고하면 된다.

 

 

cmd 실행 후 ipconfig 명령어 수행

물론 Wifi랑 Ethernet이랑 같이 꽂았다든가,

듀얼/쿼드 이더넷이라 IP가 여러개든가 하면

알아서 그냥 하나 선택하면 된다.

 

 버프스위트에서 프록시 설정으로 가서

리스닝 설정을 해주면 된다.

 

기존은 localhost (127.0.0.1):8080으로 되어있을 것이고

 

 

loopback only에서 All interfaces 로 변경한다.

(Windows PC의 사설IP로 잡을경우, nox의 가상네트워크로 잡을 경우 루프백으로 둬도 된다.)

 

 

 

그럼 안드로이드를 켜고 프록시 설정을 해주러 가자.

 

 여기서 세팅 앱 진입

 

 

와이파이 진입 후 해당 인터페이스 길게 클릭하여 (롱 터치)

modify network 옵션 표출 후 진입

 

 Proxy: Manual 선택

Proxy Hostname: 윈도우 ipconfig로 찾아낸 윈도우pc의 ip 기입

Proxy port: 디폴트 포트 기입 8080, 화면에 분명 떠있으나 다시 써주지 않으면 안넘어감..

IP settings: 그냥 둠.

 

save 버튼 클릭

 

 

 웹 브라우저 켜서 google 들어가보면

 

이렇게 패킷이 잡힐 것이다.

 

 

 

* Nox 가상네트워크의 gateway로 프록싱하기

(이렇게 하면 굳이 윈도우즈에서 실제 인터페이스를 프록시 서버로 개방할 필요가 없다)

 

 

adb shell로 안드로이드에 접속하면

(이건 아래에 기재되어있으니 보고 올라오면 된다)

- ip a

- ifconfig

둘 중 하나로 현재 안드로이드 폰 NIC의 상태를 볼 수 있다.

 

그럼 gateway는 172.16.102.1 일 것으로 추정할 수 있다.

아니다.

ㅋㅋ ㅜ

 

traceroute로 192.168.0.1이나 1.1.1.1 등을 찍어서

게이트웨이 ip가 뭔놈인지 보는 것을 추천한다.

 게이트웨이 (버프, 윈도우OS의 IP)는

172.16.102.2이다.

 

 

그럼 이 ip로 안드로이드 프록시를 잡는다.

 

그러고 웹을 띄워보면

버프에서 패킷이 우수수 잡힐 것이다.

 

그럼 버프스위트 프록시 설정에 들어가서

 기존에 All interfaces로 설정하였던 것을

Loopback Only로 다시 변경한다.

 

 

그러고 안드로이드에서 패킷을 다시 보내본다.

(검색을 하든지, 새로고침을 하든지, ...)

 

우수수 잡힌다.

 

굿.

 

 

이렇게하면 Windows PC의 IP가 바뀌더라도

프록시를 만지지 않아도 된다.

 

 

물론 nox 가상네트워크에서 ip가 바뀌어버리면 문제긴 한데

안 그럴것같다.

 

 

만약에 그러면 기재하겠음.

 

 

 

인터넷에 있는 블로그들은 줴다 어디서 배껴 붙여놓은 것들이라

솔직히 저거 이해하고 쓴건지 그냥 시키는대로 해서 된건지 의문이 드는 수준이다.

 

근데 나도 인증서 부분은 걍 시키는대로 했다.

되면 됐지 ㅅㅂ 뭐가 문제임.

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ...

 

원래 Snarky한 사람이다. 나도 알고있다.

그러려니 하면 된다.

 

 

 

여튼 굳이 윈도우의 ip로 안 잡아도 된다.

 

 

 

1. 안드로이드 CA 인증서 넣기 (시스템)

1.A. 버프 인증서 다운로드

더보기

파일 이름은 중요하지 않다.

확장자는 der로 잡음.

 

저장 디렉토리의 경우 나는 바탕화면으로 잡았다.

(디렉토리 조금 중요)

 

1.B. 버프 인증서 변환 (openssl)

더보기

 

 openssl  설치

(중간에 설정하는거 그냥 기본값으로 두고 넘김)

 

 

환경변수 설정

 

 

동그라미 잘못 쳤다.

 

저것처럼 입력을 하면 된다.

(수정하기 구찮다)

 

 

 oenssl 설치된 곳의 bin 폴더 (실행 가능한 파일들 모인 디렉토리)로 잡아주면 된다.

 

C:\Program Files\OpenSSL-Win64\bin

 

진짜 저 위치에 설치된건지 확인하고 기입할 것.

 

cmd 창 켜서 명령어 확인해본다

(만약 openSSL 설치 전에 켜둔 CMD창이 있다면 커맨드창을 새로 띄워야 먹는다)

 

 

일단 해당 인증서가 위치한 디렉토리로 이동한다.

(커맨드에 절대경로를 넣어도 된다. 나는 귀찮다.)

 

나의 경우 C:\Users\NSD\Desktop에 두었다.

이 것 때문에 여기에 둔 것이다.

 

cd로 이동하면 됨.

 

Open SSL로 DER -> PEM 변환 수행

openssl x509 -inform DER -in cacert.der -out cacert.pem

 

 

변환 했으면, 변환한 파일을 해싱한다.

 

왜하는건진 모르겠다. 그냥 다른 사람들이 했다..

openssl x509 -inform PEM -subject_hash_old -in cacert.pem

 

 

여기서 저기 네모박스 친 값을 복사한다.

(다른 블로그의 사람도 해쉬 위에 저 문자열이 동일하게 나왔다)

 

 

 

pem 파일을 복사해서

파일명과 확장자를 수정한다.

 

파일명은 저 문자열로 하고, 확장자는 0 (제로, 영)으로 한다.

 

굳이 복사 안 하고 바로 바꿔도 된다.

 

1.C. adb로 녹스의 안드로이드 연결 (adb)

더보기

 

그냥 adb는 다운로드 받은 후 환경변수를 적용하였으나

(재기동하였음에도 불구하고)

안된다 ㅅㅂ

녹스의 adb 시도 (nox_adb)

 

 

 

 

환경변수 등록하니 녹스 adb는 잘 된다.

 

 

 

 cmd에서 nox_adb shell

로 기기에 접속한다.

 

나는 안드로이드 가상머신이 1개 켜져 있고

물리적으로 실물 안드로이드폰은 연결하지 않았다.

 

만약에 다중 연결상태라면

구글링을 하면 된다.

ㅋㅋ

 

모른다.

 

1.D. 버프스위트 인증서 업로드

더보기

 

whoami 명령어를 쳐보면

root로 접속이 되어있다.

 

/system/etc/security/cacerts

디렉토리에 저 인증서 파일을 올려야한다.

 

근데 분명 655 권한이 있음에도 불구하고

쓰기가 안된다. 읽기 전용이라고 거절당함.

 

(touch 명령어로 abcde.0 파일 생성 시도함)

 

 

그러면

 

mount rw,remount /system

 

명령어로 시스템 디렉토리를 재마운트 시킨다.

그럼 읽기 전용에서 풀림.

 

 

그 다음에 다른 cmd를 하나 더 띄운다

(지금 보고있는 cmd는 녹스 adb를 통해 안드로이드에 접속되어있음)

 

아님 걍 exit 하고 해도 되고...

 

 

nox_adb push 이상한문자열.0 /data/local/tmp

 이 명령어로 (윈도우에서 리눅스로) 파일을 하나 보낸다.

 

 그럼 안드로이드의 저 디렉토리에 저 파일이 들어간다.

 그 다음에 파일을 cp하든지 mv하든지 하면 된다..

 

 

나는;

 

cd /system/etc/security/cacerts; mv /data/local/tmp/9a5ba575.0

명령어로 파일을 옮겼다.

 

(세미콜론은 여러 명령어를 한 번에 수행하는 접합기호?이고

cd로 먼저 디렉토리를 이동한 것이다)

 

 

 

그럼 저렇게 다른 인증서들 사이에 낑겨있는 버프 인증서가 보일 것이다.

 

 

 

 

참고블로그

 

(전적으로 따라한 블로그. 누락된 부분이 좀 있음. adb shell 연결하는 부분)

https://lyk00331.tistory.com/84

 

안드로이드(Nox) Burp 프록시 환경 구성 | Burp 인증서

※ Frida가 PC와 모바일(에뮬레이터 - Nox 사용)에 동일 버전으로 설치되어있다는 전제 하에 진행된다. 1. Burp 인증서 설치 1.1. Burp Suite에서 다음과 같이 진행한다. Next 버튼을 누른 후 나타나는 Select

lyk00331.tistory.com

 

 

시스템파일 read only 해소 (mount rw,remount /system)

https://stackoverflow.com/questions/6066030/read-only-file-system-on-android

 

Read only file system on Android

I recently rooted my Droid X and everything seems to be working perfectly. I made some changes to build.prop and when I do adb push build.prop /system/ I get the following error: failed to copy 'c:...

stackoverflow.com

 

 

환경변수 안먹는 현상 해결 참고 (OpenSSL -> CMD 창 닫고 다시 열기로 적용확인)

https://oingdaddy.tistory.com/302

 

JAVA_HOME (환경변수) 설정이 잘 안되는 오류 조치

내가 새로운 JDK를 받아서 JAVA_HOME 설정을 변경했는데 제대로 반영이 안된 경우가 몇번 있었다. 물론 생각해보면 다 내 실수였다. 어떤 실수들을 저질렀나 한번 추억을 곱씹어 보자. 1. Path 설정 실

oingdaddy.tistory.com

 

adb shell 접속 방법 참고

https://liveyourit.tistory.com/151

 

adb를 사용한 실제 단말기와 PC 연결, shell 접속

adb는 PC에서 안드로이드 쉘을 이용하기 위해 필요한 툴이다. 이 adb를 사용해 실제 단말기(갤럭시S10e)와 PC를 연결해보자. SDK(Software Development Kit) 설치 adb를 사용하기 위해서는 먼저 안드로이드 어

liveyourit.tistory.com

 

 

(걍 참고)

https://fascination-euna.tistory.com/entry/NOX-...

 

[NOX] 안드로이드(Nox) 버프 스위트(burp suite) 보안 인증서 등록 방법

[NOX] 안드로이드(Nox) 버프 스위트(burp suite) 보안 인증서 등록 방법 기존 녹스 앱플레이어를 사용하면 버프 스위트 실행 및 프록시 연결 후 http://burp에 접속하여 인증서를 다운해 실행하면 됐으나

fascination-euna.tistory.com

 

(이대로 안됨. der 인증서 파일을 cer로 확장자 변경하여도 설정앱에서 터치가 안됨)

https://cago-young.tistory.com/159

 

Nox 애뮬레이터 burp suite 연결 하는법

Nox 애뮬레이터에다 burp suite를 연결하여 네트워크 트래픽 감시, 조작, 인증서 검사, 세션 관리등 네트워크 동작을 분석 하고, 취약점을 찾을 수 있고 분석 시(특정 앱) 동작 테스트를 해 볼 수 있

cago-young.tistory.com

 

 

 

 

 

End of Document. 끝.

반응형

Comment(s)