너무 더워서... is it new years yet...
android 취약점 점검때 써야되서
하는데... 블로그를 아무리 뒤져봐도 안된다.
왜그르냐.
일단 prerequisites 다운로드
https://developer.android.com/tools/releases/platform-tools?hl=ko
https://portswigger.net/burp/communitydownload
https://slproweb.com/products/Win32OpenSSL.html
설치는 알아서 했을거라 가정하고.
안드로이드 7 기준으로 작성하였다.
0. 버프 프록시 잡기 (가상 네트워크 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
시스템파일 read only 해소 (mount rw,remount /system)
https://stackoverflow.com/questions/6066030/read-only-file-system-on-android
환경변수 안먹는 현상 해결 참고 (OpenSSL -> CMD 창 닫고 다시 열기로 적용확인)
https://oingdaddy.tistory.com/302
adb shell 접속 방법 참고
https://liveyourit.tistory.com/151
(걍 참고)
https://fascination-euna.tistory.com/entry/NOX-...
(이대로 안됨. der 인증서 파일을 cer로 확장자 변경하여도 설정앱에서 터치가 안됨)
https://cago-young.tistory.com/159
End of Document. 끝.
'1.A. High Level Computing > Et Cetera' 카테고리의 다른 글
[토막글] 디스크 레코드 초기화하기 (feat. DISKPART | MBR, GPT - 윈도우 설치시 디스크 안 보일 때) (0) | 2024.07.16 |
---|---|
웹개발 환경 구축 (Eclipse, Apache, Tomcat) on Windows (0) | 2024.05.10 |
[토막글] 파일 이름 변경, 여러개 변경하기 (Windows PowerToys) (0) | 2023.08.01 |
[토막글] 폴더 터트리기 (child 디렉토리 제거 + 파일은 그대로) (0) | 2023.08.01 |
[토막글] AI에게 나는 이제 밀려나는건가요... 지피티 형님이 너무 쎄지 말입니다.. (0) | 2023.03.27 |
VM + 모두의 프린터로 TOEIC, OPIc 성적표 뽑기 (뻘짓) (win + *nix) (4) | 2023.03.18 |
티스토리 스킨 호작질기 (미완성) (0) | 2023.02.27 |
파일 관리 프로그램 작성기 (feat. 가내 서버) (폐기.) (0) | 2023.02.02 |
Comment(s)