일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- InsecureBank
- 파이썬
- Docker
- otter
- elasticsearch
- SQL Injection
- 인시큐어뱅크
- 안드로이드
- XSS
- lord of sql injection
- NTFS
- diva
- vulnhub
- logstash
- ESXi
- Strings
- frida
- 2018
- ctf
- igoat
- Suninatas
- kibana
- beebox
- Volatility
- foremost
- MFT
- Reflected XSS
- CTF-d
- base64
- Openstack
- Today
- Total
목록frida (12)
Information Security
루팅 패치 프로그램을 통해 디바이스 루팅을 진행할 때 해당 프로그램은 디바이스의 boot 이미지의 특정 설정 값을 수정하게 된다. 그리고 이러한 설정들은 시스템 속성 파일인 build.prop 파일에 반영되어 디바이스 부팅 시 참조하게 된다. Bypass Build-Tags 항목은 안드로이드 시스템 파일인 build.prop 파일의 속성 값을 검사하여 비정상 값이 존재할 경우 루팅 디바이스로 판단해 탐지하게 된다. 아래와 같은 내용을 확인 /system 디렉터리 위치에서 build.prop 파일 확인 build.prop 시스템의 속성 값을 확인 getprop 명령어로 속성 값 확인 isCheckRootingKeys() 함수는 Bypass Module 탐지 결과를 반환해 주는 역할을 한다. 시스템 속성 값..
모든 OS에는 운영체제가 어떤 프로세스를 실행시킬 때 경로를 참조할 수 있도록 PATH 환경 변수가 제공된다. 이는 리눅스 커널 기반인 안드로이드 OS도 동일하다. 셸에서 명령어 사용 시 시스템 환경 변수에 등록된 PATH를 참조해 명령어를 찾고 실행시킨다. Bypass Command Execution 항목은 이러한 특징을 이용하여 which 명령어를 사용해 PATH 변수에 등록된 디렉터리 경로에 "su" 바이너리 파일이 위치하는지 검사하고 파일 존재 시 루팅 디바이스로 판단하여 탐지하게 된다. 아래와 같이 내용 확인 PATH 환경변수에 등록된 내용 확인 Runtime.exec()는 Windows, Linux, Unix 등의 시스템 명령어를 Java를 통해 실행한 후 그 결과를 받아오는 기능을 가지고 있..
디바이스 루팅 시 사용된 응용프로그램 종류에 따라 특정 바이너리 파일들이 설치되거나, 공격자들의 악의적인 행위 및 시스템 설정 변경을 위하여 특정 명령어 파일들을 설치한다. 대표적인 명령어 파일에는 su, busybox, magisk 등이 있다. Bypass Binaries 항목은 디바이스 내의 바이너리 파일들을 검사하여 루팅 시 사용되는 명령어 파일들이 존재할 경우 루팅 디바이스로 판단하여 탐지한다. 아래와 같은 내용을 확인할 수 있다. busybox 명령어를 입력하면 아래와 같이 명령어를 확인할 수 있다. isCheckRootingBinary() 함수는 Bypass Binaries 탐지 결과를 반환해 주는 역할을 한다. 코드를 보면 rootingPath에서 시스템 디렉터리 목록을 가져오고 있으며 ro..
SSL Pinning.apk를 jadx파일을 열어 AndroidMainfest.xml에서 package 이름을 확인했다. PinnedSSLDemoActivity 클래스 내의 onSubmit() 메서드가 호출되었을 때, SSL Pinning 사용 체크박스에 체크가 되어 있다면 sslContext 라는 변수에 getPinnedSSLContext() 메소드의 반환 값이 저장된다. 체크가 되어 있지 않다면 기본값인 NULL이 저장된다. 이 sslContext 의 값에 따라 SSL Pinning이 적용된 암호화 통신을 할지 안 할지 결정하는 것을 알 수 있다. sslContext의 값을 결정하는 getPinnedSSLContext() 메서드의 로직을 확인해 볼 필요가 있다. 해당 메소드의 반환 값은 SSLCont..
SSL Pinning 클라이언트 측에서 사용하는 기법으로, SSL 통신에서 취약하다고 알려져 있는 중간자 공격을 방지할 수 있다. 클라이언트 측에 신뢰할 수 있는 인증서들을 저장하고, 이는 이후 실제 통신 과정에서 서버가 제공하는 인증서와 비교하는 데 사용된다. 만약 이 과정에서 미리 저장된 인증서와 서버가 제시한 인증서가 일치하지 않는다면, 연결은 중단될 것이고, 유저의 정보가 서버로 전송되지 않을 것이다. 이런 방식으로 클라이언트 측에 설치되는 다른 인증서로는 통신이 되지 않고 서버에서 제공하는 인증서로만 통신할 수 있게 하는 것이다. Burp Suite와 같은 프록시 도구를 사용해서 서버와 통신하는 패킷을 중간에 가로챌 수 있지만, 이 SSL Pinning이 적용된 클라이언트에서 보내는 패킷은 중간..
PIN번호를 BruteForce공격을 통해 얻어보자 ShortLoginActivity로 들어가서 확인해 보자 submit 메서드를 보면 입력된 값이 로그로 출력되는 것을 확인할 수 있다. 입력된 PIN이 workingPIN에 들어간다. checkPin메서드를 통해 전달되는 것도 확인할 수 있다. 입력한 값이 네 글자 PIN이므로 0000 ~ 9999까지 넣으면 될 것 같다. checkPin이 인자로 받고 있는 것은 string 이기 때문에 입력 값은 int형이기 때문에 string으로 변경하여 보낸다. slice(-4)의 역할 : 한자리 숫자인 경우 앞에 000을 붙여주지만 000333의 경우가 생길 수도 있다. 뒤의 네 자리를 제외한 앞자리를 제외시켜 준다. 스크립트를 실행하면 0000 ~ 99..
sieve.apk - 역할 : master password를 설정 -> pin번호 4자리 설정 - 앱 최초 실행 : master password 입력, 다른 앱이나 홈 접속 후 실행하면 pin번호 입력 - 단말기 재부팅 : master password 입력해야 앱의 내용 확인 가능 16자리 비밀번호를 입력했다. 비밀번호 입력후 PIN를 입력했다. 만들었던 비밀번호를 입력했다. 비밀번호 입력 후 [+] 버튼을 클릭했다. 서비스에 대한 정보를 입력했다. 서비스가 만들어진 것을 알 수 있다. 앱을 나간 후 들어오면 해당 핀 번호에 대한 BruteForce 공격은 후에 진행할 것이고 이번에는 초기에 입력했던 master password를 입력해서 내부 데이터 접근하는 과정 없이 바로 내부 데이터로 접근할 ..
이번 문제는 암호를 복호화하는 것이다. 임의 값인 test를 입력한 후 검증 버튼을 클릭하면 다시 시도해보라는 메시지를 보여준다. jadx 프로그램을 통해 text search에서 Nope 검색했다. MainActivity 클래스 내부에 Verify 메서드가 있고 해당 메서드 내부에 찾은 메시지를 볼 수 있다. 성공하면 Success! 문자가 실행된다. obj의 변수에 String 객체에 들어간다. a클래스 내부의 a메서드 내부의 인자 값으로 obj가 들어간다. true가 나오면 보이는 Success! 메시지가 보이고 false가 나오면 Nope 메시지를 보여준다. a클래스의 a메소드에 들어가면 string객체를 받고 있고 입력했던 값이 str에 들어가서 활용이 된다. bArr 더블클릭하면 byte ..