일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- foremost
- Reflected XSS
- NTFS
- Openstack
- Volatility
- 안드로이드
- base64
- lord of sql injection
- Docker
- beebox
- InsecureBank
- 인시큐어뱅크
- 파이썬
- vulnhub
- CTF-d
- ctf
- Suninatas
- MFT
- logstash
- 2018
- igoat
- ESXi
- frida
- SQL Injection
- Strings
- XSS
- diva
- kibana
- otter
- elasticsearch
- Today
- Total
목록모바일/Frida (14)
Information Security
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 ..
해당 apk파일을 jadx로 불러와서 디컴파일된 코드를 확인할 수 있다. Text Search 기능을 통해 root detected 메시지를 찾았다. MainActivity 부분에서 a메서드를 호출하면서 루팅 탐지 메시지를 전달해주고 있다. [Ctrl]을 누른 상태에서 a를 클릭하여 어떤 메서드인지 찾아보았다. Main Activity 코드내에 a라는 메서드가 존재하며 인자 값으로 string을 받고 있다. 이 메서드는 alert dialog라고 해서 dialog창을 만들면서 메시지를 만들고 있다. 이 메시지는 해당 앱에서 보여주는 것과 같다. system.exit(0) 코드는 앱을 종료 create.setButton으로 [OK]버튼 하나 만든다. 이 버튼이 OnClickListener()를 받..
FridaLab 앱의 [CHECK] 버튼을 [Confirm]으로 바꾸는 문제인 것 같다. boolean은 참/거짓으로 return한다. findViewById 메서드를 사용하고 있으며, 값을 가져와서 getText() 메서드를 사용한다. equals() 메서드를 통해 Confirm 문자열과 비교 후, 동일하다면 문제를 해결할 수 있다. 객체 클래스가 Button인 것을 확인할 수 있고 반환 자료형은 button, 최종 값은 String이 되어야 한다. check 값이 2131165231로 설정되어 있는 것을 확인할 수 있다. Java.cast(handle, klass) - Java.use로부터 받은 클래스라는 이름이 담긴 변수가 존재 -> 이 값을 handle에 준다. (checkid) - butto..
uk.rossmarks.fridalab.MainActivitiy 내부에 chall07() 메서드가 존재하며 내부에 if, else문이 있다. 어떤 메서드를 호출했을 때 값이 참이 되면 7번째 값을 1로 setting 하여 빨간색 글씨를 초록색으로 변화시킨다. (문제 chall07() 메소드에서 String 자료형을 받아온 것을 if문 내부에 있는 check07Pin() 메서드를 호출할 때 인자 값으로 주어지고 있다. 이 값을 true로 만들어 보자. [Ctrl] 버튼을 누른 상태에서 challenge_07을 클릭하면, 해당 클래스로 이동할 수 있다. 클래스 내부에 check07Pin()이 동작한다. 인수로 받아온 String 값이 chall07과 같으면 true를 반환한다. chall07 값은 ..