티스토리

260
검색하기

블로그 홈

260

lyk00331.tistory.com/m

09337 님의 블로그입니다.

구독자
23
방명록 방문하기

주요 글 목록

  • BoB 12기 수료 후기(를 빙자한 일기) | 보안컨설팅 트랙 아직 수료식은 안 했지만 아무튼 이제 다 끝났으니 써본다. (사실 안 끝남. 자문단 발표 준비 중임...^-^)개인적으로 난 이번에 겪은 모든 경험들이 운이 많이 따라줬다고 생각한다. 이전 후기보다 더한 TMI(거의 일상 블로그 급임. 진짜 일기임. 너무 일기라서 공개로 올려도 되나 싶을 정도~)가 포함되어 있다.BoB 생활팁은 딱히 없기 때문에 정보를 얻으러 온 사람이라면 도움이 안 될 것 같다.워크샵 및 발대식 + 1차 교육 후기최종 합격 후, 본격적인 교육을 듣기 전에 친목 도모를 목적으로 워크샵이 진행된다.같은 기수 교육생들과 조를 이루며 이런저런 게임도 하고, 이전 기수분들의 팁과 덕담도 들으며 시간을 보낸다. 개인적으로 워크샵은 매우매우 추천한다. 다른 조는 어땠는지 모르겠으나, 내가 있던 A.. 공감수 38 댓글수 4 2024. 2. 25.
  • BoB 12기 최종 합격 후기(를 빙자한 일기) | 보안컨설팅 트랙 오랜만에 포스팅인데, 양심 없이 공부 내용도 아니고 합격 후기 ^^ 오늘은 10기 탈락 이후 다시 12기에 지원해서 최종 합격한 후기를 풀어볼까 한다. TMI 개많음~ 10기 때는 내가 하고 싶은 게 뭔지도 모르고 취분이 제일 유명하다는 이유 하나로 취분 트랙에 지원했었다. 12기에 지원할 때는 컨설턴트로 진로를 확실히 했기 때문에, 고민도 없이 보안컨설팅 트랙에 지원했다. 이 글을 보는 여러분도 만약 BoB에 지원할 생각이 있다면, 정말 자신이 공부하고 싶은 분야가 무엇인지 잘 고민해 보고 선택하길 바란다. 1. 서류 합격 사실 처음에는 BoB 12기에 지원할 생각이 없었다. 현재 4학년이기도 하고, 취업을 해야 될 것 같았다. 근데 성격상 한 번 하고 싶다고 생각한 거는 죽어도 해야 했다. 그래서 미.. 공감수 9 댓글수 6 2023. 6. 24.
  • 파이썬 클래스(Class) 클래스는 자체 속성 및 동작 집합이 있는 새로운 유형의 객체를 정의하기 위해 사용된다. 예를 들어, 다양한 종류의 동물을 나타내는 프로그램을 만들고자 하면 다음과 같이 나타낼 수 있다. class Animal: def __init__(self, name, species, age): self.name = name self.species = species self.age = age def eat(self, food): print(f"{self.name} is eating {food}.") def sleep(self, hours): print(f"{self.name} is sleeping for {hours} hours.") 이 클래스에서는 name, species, age 세 가지 속성을 정의했고, eat,.. 공감수 0 댓글수 1 2023. 3. 14.
  • Union SQL Injection 1. 취약점 개요 1.1. 정의 SQL Injection에는 여러 종류가 있다. Non Blind Sql Injection, Blind Sql Injection, Union Sql Injection 등... 이번 포스팅은 Union Sql Injection에 대한 내용이다. SQL Injection은 웹 어플리케이션에서 많이 발생하는 보안 취약점 중 하나다. Union SQLi는 다수의 SELECT 문을 하나의 결과로 합쳐서 출력하는 방법이다. 이를 사용하면 데이터베이스의 테이블을 병합할 수 있다. 1.2. 예시 다음과 같은 쿼리가 있다고 가정한다. SELECT id, password FROM user WHERE idx=1 위 쿼리를 Union SQL로 변환할 경우, 다음과 같이 작성할 수 있다. SEL.. 공감수 0 댓글수 1 2023. 3. 1.
  • 불충분한 인가 (IN) 목차 1. 취약점 개요 2. 점검 방법 3. 보안 방안 1. 취약점 개요 1.1. 정의 페이지 접근을 위한 인증기능이 구현되지 않을 경우, 해커나 인가되지 않는 사용자가 페이지에 접근 및 중요 정보의 변조를 할 수 있는 취약점이다. 1.2. 보안 위협 접근제어가 필요한 중요 페이지의 통제수단이 미흡한 경우, 비인가자가 URL 파라미터 값 변경 등의 방법으로 중요 페이지에 접근하여 민감한 정보 열람 및 변조 가능하다. 2. 점검 방법 - 마이페이지 등 본인만 접근 가능한 페이지에서 다른 사용자와의 구분을 일련번호 등의 단순한 값으로 하는지 확인한다. ex) https://example.com/mypage.html?post=111 (내 게시글) - 일련번호가 들어가는 파라미터의 값을 변조하여 다른 사용자의 .. 공감수 1 댓글수 1 2022. 12. 11.
  • 쿠키 / 세션 / 토큰 / JWT 쿠키 / 세션 / 토큰 쿠키 인증: key-value 형식의 문자열 / 클라이언트가 어떠한 웹사이트를 방문할 경우, 그 사이트가 사용하고 있는 서버를 통해 클라이언트의 브라우저에 설치되는 작은 기록 정보 파일이다. 요청 시 쿠키의 값을 그대로 보낸다는 취약점이 존재한다. 세션 인증: 쿠키의 보안적 이슈 때문에 비밀번호 등 클라이언트의 민감한 인증 정보를 브라우저가 아닌 서버 측에 저장하고 관리한다. 민감한 정보는 클라이언트에 보내지 않고 서버에서 모두 관리한다. 토큰 인증: 클라이언트가 서버에 접속을 하면 서버에서 해당 클라이언트에게 인증되었다는 의미로 '토큰'을 부여한다. 이 토큰은 유일하며 토큰을 발급받은 클라이언트는 또 다시 서버에 요청을 보낼 때 요청 헤더에 토큰을 심어서 보낸다. 그러면 서버에서.. 공감수 3 댓글수 0 2022. 10. 15.
  • CI / DI / SSO CI / DI CI: Connecting Information (연계정보) 본인 확인 기관 등에서 개인별로 고유하게 부여하는 개인 식별정보로, 어느 업체에서 발급해도 유일하게 발급되므로 이 값이 같으면 동일인으로 판단할 수 있다. 주민등록번호 수집이 금지되면서 인터넷 서비스업체에서는 휴대폰 본인인증, 공인인증, 신용카드 인증을 통해 CI를 제공받고 있으며, 주민등록번호를 대신해 고객을 구별하는 데이터로 사용한다. 구조: 88byte, 영어 대소문자와 특수문자의 조합으로 표현 DI: Duplication Information (중복정보 또는 중복가입확인정보) 인증 업체별로 사용자에게 부여하는 고유번호이며 동일인이라 하더라도 인증업체가 다르면 DI가 다르다. 한 사람이 여러 개의 계정을 만드는 것을 방지하고.. 공감수 2 댓글수 0 2022. 10. 15.
  • [MySQL] UNION, JOIN 차이 1. SQL 이란? MySQL, ORACLE 등 데이터베이스에서 데이터를 관리하기 위해 설계된 프로그래밍 언어 2. UNION 2-1. UNION 정의 2개 이상의 쿼리 결과를 단일 결과 세트로 연결한다. UNION ALL: 중복 항목을 포함한다. UNION: 중복 항목을 제외한다. 2-2. 규칙 열의 개수와 순서가 모든 쿼리에서 동일해야 한다. 단일 결과 세트로 나오기 때문이다. 데이터 형식이 호환되어야 한다. 즉, 숫자면 숫자, 문자면 문자라는 조건이 성립되어야 한다. 3. JOIN https://lyk00331.tistory.com/107 https://lyk00331.tistory.com/108 https://lyk00331.tistory.com/109 참고하기 !! 4. 차이점 UNION: 하나.. 공감수 2 댓글수 0 2022. 3. 3.
  • [MySQL] JOIN - OUTER JOIN (LEFT+RIGHT) 1. SQL 이란? MySQL, ORACLE 등 데이터베이스에서 데이터를 관리하기 위해 설계된 프로그래밍 언어 2. JOIN 2-1. JOIN 정의 둘 이상의 테이블을 연결해서 데이터를 검색하는 방법 연결하기 위해 테이블이 적어도 하나의 컬럼을 공유하고 있어야 한다. 이때, 공유하는 컬럼을 PK 또는 FK 값으로 사용한다. 2-2. PK(Primary Key), FK(Foreign Key) PK: 기본 키라고 하며, 엔티티를 식별하는 대표 키다. NULL일 수 없다. FK: 다른 테이블의 PK를 참조하는 키다. 어떠한 테이블에서 존재하는 다른 테이블의 정보이기 때문에 왜래 키이다. 참조하고자 하는 컬럼은 PK 또는 UK이여야 한다. PK와 FK는 테이블의 필수 요소로써, 모든 테이블은 이들 둘 중 하나 .. 공감수 0 댓글수 0 2022. 3. 3.
  • [MySQL] JOIN - LEFT/RIGHT JOIN 1. SQL 이란? MySQL, ORACLE 등 데이터베이스에서 데이터를 관리하기 위해 설계된 프로그래밍 언어 2. JOIN 2-1. JOIN 정의 둘 이상의 테이블을 연결해서 데이터를 검색하는 방법 연결하기 위해 테이블이 적어도 하나의 컬럼을 공유하고 있어야 한다. 이때, 공유하는 컬럼을 PK 또는 FK 값으로 사용한다. 2-2. PK(Primary Key), FK(Foreign Key) PK: 기본 키라고 하며, 엔티티를 식별하는 대표 키다. NULL일 수 없다. FK: 다른 테이블의 PK를 참조하는 키다. 어떠한 테이블에서 존재하는 다른 테이블의 정보이기 때문에 왜래 키이다. 참조하고자 하는 컬럼은 PK 또는 UK이여야 한다. PK와 FK는 테이블의 필수 요소로써, 모든 테이블은 이들 둘 중 하나 .. 공감수 0 댓글수 0 2022. 3. 2.
  • [MySQL] JOIN - INNER JOIN 1. SQL 이란? MySQL, ORACLE 등 데이터베이스에서 데이터를 관리하기 위해 설계된 프로그래밍 언어 2. JOIN 2-1. JOIN 정의 둘 이상의 테이블을 연결해서 데이터를 검색하는 방법 연결하기 위해 테이블이 적어도 하나의 컬럼을 공유하고 있어야 한다. 이때, 공유하는 컬럼을 PK 또는 FK 값으로 사용한다. 2-2. PK(Primary Key), FK(Foreign Key) PK: 기본 키라고 하며, 엔티티를 식별하는 대표 키다. NULL일 수 없다. FK: 다른 테이블의 PK를 참조하는 키다. 어떠한 테이블에서 존재하는 다른 테이블의 정보이기 때문에 왜래 키이다. 참조하고자 하는 컬럼은 PK 또는 UK이여야 한다. PK와 FK는 테이블의 필수 요소로써, 모든 테이블은 이들 둘 중 하나 .. 공감수 0 댓글수 0 2022. 3. 2.
  • [MySQL] SUM, MAX, MIN 1. SQL 이란? MySQL, ORACLE 등 데이터베이스에서 데이터를 관리하기 위해 설계된 프로그래밍 언어 2. SUM, MAX, MIN 2-1. 집계 함수 계산을 수행하고 단일 값을 반환한다. Count() 함수를 제외한 집계 함수는 NULL 값을 무시하며, SELECT문 혹은 HAVING 절에만 사용할 수 있다. 2-2. Count() * NULL 포함 여부에 관계없이 대상 테이블의 모든 행을 카운트한다. ALL 모든 값에 적용된다. NULL이 아닌 값의 수를 반환한다. DISTINCT 중복 값을 무시한다. 즉 유니크하며 NULL이 아닌 값의 수를 반환한다. expression 단일 상수, 변수, 스칼라 함수 또는 열 이름으로 구성된 식이며 값을 다른 값과 비교하는 SQL 쿼리일 수도 있다. 텍스.. 공감수 1 댓글수 0 2022. 2. 27.
  • 디버그 로그 내 정보 노출, 화면 강제 실행 인증단계 우회 1. 디버그 로그 내 정보 노출 shell에서 logcat 명령어를 치면 디버깅 로그 내에서 저장된 정보를 볼 수 있다. 개발하는 과정에서 로그를 찍어가며 확인하기 위해 넣고, 빼지 않고 그대로 출시했을 경우 확인된다. 2. 화면 강제 실행 인증단계 우회 패스워드 저장 후, 인증단계에서 패스워드가 틀리면 데이터를 볼 수 없고, 패스워드가 일치하면 저장되어있는 데이터들을 볼 수 있다. 이때 2번째 사진에서 하는 인증단계를 우회하여 패스워드가 달라도 데이터를 볼 수 있는지 진단한다. Manifest.xml 소스코드를 보면 exported 값이 true로 나타난다. exported가 true로 되어있다면 앱 외부에서의 접근이 가능다는 뜻이다. 이전 포스팅 중, injured.apk 분석할 때 잠깐 언급한 적 .. 공감수 0 댓글수 0 2021. 11. 1.
  • Uncrackable Level 1 Uncrackable 은 Owasp에서 제공하는 모바일 어플리케이션이다. Uncrackable-Level1.apk를 다운받은 후, Nox 애뮬레이터에 Drag&Drop으로 설치한다. 1. Manifest.xml apk easy tool로 Uncrackable-Level1을 디컴파일 해주고 디컴파일된 파일 중, AndroidManifest.xml 파일을 열어보면 package명과 MainActivity를 알 수 있다. 상위루트 manifest에 있는 package : AndroidManifest.xml 파일의 루트 요소다. 나중에 프리다를 사용할 때 이 패키지명이 사용된다. 상위루트 activity에 있는 MainActivity : 액티비티 구성 요소를 선언한다. jadx로 어플리케이션을 분석할 때 Mai.. 공감수 1 댓글수 0 2021. 11. 1.
  • 함수, 배열 | 스택프레임 1. 함수, 배열 실습 내용 정리 1-1. 함수 call PRINT → PRINT 함수로 이동 1-2. 덧셈 함수 call ADD→ ADD 함수로 이동 1-3. 작은 값 구하는 함수 call MIN→ MIN 함수로 이동 어셈블리 JL: Operand 1 < Operand 2 일 때 점프 MIN 함수) eax와 ebx 비교 후, eax가 더 작으면 LABEL_1로 점프. eax가 더 크다면 ebx 값을 ecx에 옮긴 후, LABEL_2로 점프. 최종적으로 ecx 값 출력 1-4. 함수 안의 함수 call ADD → ADD 함수로 이동 → PRINT 함수로 이동 함수가 호출될 때마다 스택에 쌓이고, 함수가 끝나면 스택이 비워지면서 또 다른 함수로 스택이 채워진다. 1-5. 배열 WORD: 2byte DWOR.. 공감수 0 댓글수 0 2021. 10. 18.
  • 어셈블리, 레지스터 정리 1. 어셈블리어 PUSH: 스택에 값을 저장 POP: 스택에서 값을 뺌 CALL: 지정된 주소의 함수 호출 INC: 값을 1 증가 DEC: 값을 1 감소 JMP: 지정된 주소로 점프 CMP: 주어진 두 값을 비교 JE: 조건 분기(같으면 점프) JNE: 조건 분기(같지 않으면 점프) MOV: 앞 오퍼랜드에 뒤 오퍼랜드의 값을 저장 LEA: 앞 오퍼랜드에 뒤 오퍼랜드의 주소 값을 저장 ADD: 두 개의 오퍼랜드를 더해서 앞의 오퍼랜드에 저장 SUB: 앞 오퍼랜드에서 뒤 오퍼랜드를 뺀 다음 앞의 오퍼랜드에 저장 2. 레지스터란? : CPU 내에서 자료를 보관하는 빠른 기억 장소로, 변수와 같은 역할로 메모리에서 연산을 할 때 사용 32bit 기준 EAX: 사칙연산 등 산술 연산 용도로 사용한다. 함수의 반환.. 공감수 2 댓글수 0 2021. 10. 11.
  • AndroGoat.apk | 바이너리 패치 (smali) 0. 기본 세팅 AndroGoat.apk 파일을 다운받은 후, 에뮬레이터(Nox)로 옮겨준다. 1. 바이너리 패치 apk를 실행한 후 Binary Patching을 확인해보면 권한이 없다고 나타난다. 2. apk 디컴파일 apk easy tool을 사용해서 해당 apk 파일을 디컴파일 해준다. 2.1. package명 및 Binary Patching 탐지 영역 체크 디컴파일 후 나온 AndroidManifest.xml 파일을 통해 package명과 Binary Patching을 하는 영역을 확인한다. jadx로 위에서 확인한 영역을 보면 아래와 같은 코드가 있다. //owastp.sat.agoat.BinaryPatchingActivity if (this.isAdmin) { TextView textView.. 공감수 1 댓글수 1 2021. 9. 20.
  • AndroGoat.apk | 에뮬레이터 탐지 (Frida) 초반 내용은 이전 글과 동일하다. https://lyk00331.tistory.com/97 AndroGoat.apk | 에뮬레이터 탐지 (smali) 0. 기본 세팅 AndroGoat.apk 파일을 다운받은 후, 에뮬레이터(Nox)로 옮겨준다. 1. 에뮬레이터 탐지 나는 녹스를 사용 중이기 때문에 원래는 "This is Emulator" 라고 떠야하지만, (아마도..) 해당 APK가 외국 lyk00331.tistory.com 위 게시물을 참고하여 2번까지 진행한 후, 이번 글은 Frida와 관련된 내용으로 3번부터 작성했다. 3. frida 서버 실행 adb shell에 접속한 후, 안드로이드 기기에 설치해둔 frida server를 실행한다. (이때 frida가 PC와 모바일에 동일 버전으로 설치되어있.. 공감수 1 댓글수 0 2021. 9. 20.
  • AndroGoat.apk | 에뮬레이터 탐지 (smali) 0. 기본 세팅 AndroGoat.apk 파일을 다운받은 후, 에뮬레이터(Nox)로 옮겨준다. 1. 에뮬레이터 탐지 나는 녹스를 사용 중이기 때문에 원래는 "This is Emulator" 라고 떠야하지만, (아마도..) 해당 APK가 외국 앱이기 때문에 녹스를 탐지하지 않아서 "This is not Emulator"라는 문장이 나타난다. 어차피 목적은 탐지를 우회하는 것이기 때문에, is not Emulator → in Emulator 가 되도록 해본다. 2. apk 디컴파일 apk easy tool을 사용해서 해당 apk 파일을 디컴파일 해준다. 2.1. package명 및 Emulator Detection 탐지 영역 체크 디컴파일 후 나온 AndroidManifest.xml 파일을 통해 packag.. 공감수 0 댓글수 2 2021. 9. 20.
  • AndroGoat.apk | SSL 피닝 (Frida) SSL 피닝을 위해서는 초기 설정이 필요하다. Burp 프록시 환경 구성이 되어있지 않다면 아래 링크를 따라 진행하길 바란다. https://lyk00331.tistory.com/84 안드로이드(Nox) Burp 프록시 환경 구성 | Burp 인증서 ※ Frida가 PC와 모바일(에뮬레이터 - Nox 사용)에 동일 버전으로 설치되어있다는 전제 하에 진행된다. 1. Burp 인증서 설치 1.1. Burp Suite에서 다음과 같이 진행한다. Next 버튼을 누른 후 나타나는 Select lyk00331.tistory.com 0. 기본 세팅 AndroGoat.apk 파일을 다운받은 후, 에뮬레이터(Nox)로 옮겨준다. 1. HTTP(S) 통신 및 SSL 피닝 1.1. HTTP 1.2. HTTPS 1.3. C.. 공감수 0 댓글수 0 2021. 9. 20.
  • AndroGoat.apk | 루팅 탐지 (Frida) 초반 내용은 이전 글과 동일하다. https://lyk00331.tistory.com/93 안드로이드 AndroGoat.apk | 루팅 탐지 (smali) 0. 기본 세팅 AndroGoat.apk 파일을 다운받은 후, 에뮬레이터(Nox)로 옮겨준다. 나는 Nox 자체 설정에서 루팅을 켜놓았다. 1. 루팅 탐지 어플리케이션을 실행한 후, Root Delection에 들어가 루팅 탐지를 해 lyk00331.tistory.com 위 게시물을 참고하여 2번까지 진행한 후, 이번 글은 Frida와 관련된 내용으로 3번부터 작성했다. 3. frida 서버 실행 adb shell에 접속한 후, 안드로이드 기기에 설치해둔 frida server를 실행한다. (이때 frida가 PC와 모바일에 동일 버전으로 설치되어있어.. 공감수 0 댓글수 0 2021. 9. 20.
  • AndroGoat.apk | 루팅 탐지 (smali) 0. 기본 세팅 AndroGoat.apk 파일을 다운받은 후, 에뮬레이터(Nox)로 옮겨준다. 나는 Nox 자체 설정에서 루팅을 켜놓았다. 1. 루팅 탐지 어플리케이션을 실행한 후, Root Delection에 들어가 루팅 탐지를 해보면 "Device is rooted"라며 제대로 탐지되는 것을 확인할 수 있다. 2. apk 디컴파일 apk easy tool을 사용해서 해당 apk 파일을 디컴파일 해준다. 2.1. package명 및 Root Detection 탐지 영역 체크 디컴파일 후 나온 AndroidManifest.xml 파일을 통해 package명과 Root Detection을 탐지하는 영역을 확인한다. jadx로 위에서 확인한 영역을 보면 아래와 같은 코드가 있다. // owasp.sat.ag.. 공감수 1 댓글수 0 2021. 9. 17.
  • injured.apk | FLAG SEVEN - SQLITE 이 문제는 플래그와 패스워드를 입력해야한다. FlagSevenSqliteActivity 파일의 31~32번 라인을 보면 base64로 암호화되어있다. 디코딩하면 x ="sqlite" y = "f1ag-pa55" 이다. 코드를 보면 알 수 있듯이, DB를 생성하고 데이터가 기록이 된다. 191번 라인의 VGhlIGZsYWcgaGFzaCE= 를 base64로 디코딩해보면 The flag hash! 라는 값을 얻어낼 수 있다. 이것은 md5 암호화 방식이다. 공감수 0 댓글수 0 2021. 9. 13.
  • injured.apk | FLAG SIX - LOGIN 3 FlagSixLoginActivity 파일을 확인해보면 73번 라인에서 k.a() 함수에서 반환된 값과 비교한다. k3FElEG9lnoWbOateGhj5pX6QsXRNJKh///8Jxi8KXW7iDpk2xRxhQ== 값이 인자로 넘어가는 것을 알 수 있다. k.a() 함수를 확인해보면 다음과 같다. 이 함수는 복호화 작업을 진행고, 함수를 frida와 연결하고 스크립트를 작성하여 암호화된 값을 넘기기 때문에 우리가 입력하는 값이 어떤 값이 되든 상관 없다. nox_adb shell 접속해서 frida 서버 실행 javascript 파일 제작 7번 라인에서는 k 클래스의 함수를 오버로드해서 클래스를 변수에 할당해준다. 디코딩 기능을 오버로드 해주고, 8번 라인에서 디코드를 진행할 문자열을 정의해준다. 이 .. 공감수 0 댓글수 0 2021. 9. 13.
  • injured.apk | FLAG FOUR - LOGIN 2 FlagFourActivity의 submitFlag함수를 확인하면 60번 라인에서 obj 문자열에 입력받은 값을 저장하고, 61번 라인에서 g.a() 메서드의 값을 a2라는 byte 배열에 할당한다. g클래스의 a 함수는 아래와 같다. 여기서 base64로 체크된 문자열을 디코딩하고 f1911a로 반환해준다. 첫번째 사진의 62번 라인에서는 a2에 값이 들어왔는지 확인해주고, 63번 라인에서 if문을 통해 입력한 값이 디코딩된 값과 일치하는지를 비교한다. NF9vdmVyZG9uZV9vbWVsZXRz 값을 디코딩해주면 다음과 같이 flag가 나타나는 것을 확인할 수 있다. 공감수 0 댓글수 0 2021. 9. 13.
  • injured.apk | FLAG THREE - RESOURCES 1번과 마찬가지로 FlagThreeActivity 파일을 열어보면 다음과 같이 플래그가 들어가있는 자리에 cmVzb3VyY2VzX3lv 값이 들어있다. 62번 라인에서는 문자열 비교함수를 통해 우리가 입력한 값과 리소스로부터 받은 문자열을 비교한다. R.string.으로 cmVzb3VyY2VzX3lv를 참조한다. APK Easy Tool로 디컴파일 한 파일들을 전체 검색기능을 통해 문자열 검사로 플래그를 찾을 수 있다. 공감수 0 댓글수 0 2021. 9. 13.
  • injured.apk | FLAG TWO - EXPORTED ACTIVITY 2번은 첫 화면에서 우회하여 다른 화면을 불러올 수 있다고 알려준다. 147번 라인을 보면 Manifest에서 exported 값이 true로 설정되어있는 것을 볼 수 있다. 인텐트를 허용하면 다른 곳에서 이 활동을 호출할 수 있다. 보통 false로 기본값 설정이 되어있지만, 외부에서의 접근을 허용할 때 true로 설정해준다. exported가 허용되어있기 때문에 adb로 am 명령어를 사용하여 패키지명과 b25lActivity를 입력하면 외부에서 activity 관리자로 접근하여 실행시킬 수 있다. 명령어를 통해 접근할 수 있으므로 인가된 허용자만 접근이 가능한게 아니라는 것이 노출되었기 때문에 취약점이라고 판단한다. 위와 같이 입력하면 flag가 나타난다. 공감수 0 댓글수 0 2021. 9. 13.
  • injured.apk | FLAG ONE-LOGIN AndroidManifest에서 1번 문제의 코드가 적혀있는 FlagOneLoginActivity 파일을 확인해본다. onCreate 함수가 실행된 후, submitFlag 함수가 실행된다. 60~61번 라인에서 editText 변수에 우리가 입력하는 값을 받아오는데, 62번 라인에서 if문을 통해 해당 값이 만약 "F1ag_0n3"이라면 FlagOneSuccess 함수를 실행시켜 intent 변수에 저장한다. 66번 라인에서 intent에 저장된 해당 값이 화면에 나타나게 된다. 공감수 0 댓글수 0 2021. 9. 13.
  • injured.apk | XSS 다음과 같이 태그를 입력할 경우 자바스크립트가 실행되는 것을 확인할 수 있다. XSS가 실행되는 부분의 코드를 확인하기 위해 XSSTextActivity 파일을 열어봤다. 19번 라인에 인자가 두 개가 들어간다. 뒷 인자가 해당 함수를 통해 문자열로 전달된다. DisplayPostXSS 파일을 확인해보면 17번 라인의 아이디 값과 XSSTextActivity 파일의 19번 라인 아이디 값이 같다. stringExtra 변수에 해당 값을 불러온다. 20번 라인은 자바스크립트를 허용하는 함수이다. 해당 값이 true로 설정되어있고, apk 내에서 내가 입력한 스크립트가 문자열로 인식되어 자바스크립트가 동작하기 때문에 XSS가 실행된다. 공감수 0 댓글수 0 2021. 9. 13.
  • injured.apk | smali 변조 안드로이드는 MainActivity의 onCreate 함수를 시작으로 동작한다. jadx를 사용하여 MainActivity를 확인하고, 원하는 값을 변조한다. 우선 AndroidManifest.xml 파일을 확인하면 메인으로 확인되는 코드가 있다. 위 박스에 적혀있는 MainActivity를 들어가보면 프로그램이 시작되는 onCreate 함수를 볼 수 있다. smali 코드 변조를 위해 apk easy tool로 디컴파일하고, smail/b3nac/apk명 폴더 속 MainActivity.smali 파일을 다음과 같이 수정한다. 사진 속 체크 된 내용을 수정 및 추가해줬다. ccit test 라는 문장이 출력되게 하는 smali 문법이다. .locals 0을 1로 바꿔준 이유는 레지스터를 사용하기 위함이.. 공감수 1 댓글수 0 2021. 9. 13.
    문의안내
    • 티스토리
    • 로그인
    • 고객센터

    티스토리는 카카오에서 사랑을 담아 만듭니다.

    © Kakao Corp.