前一段时间我服务器申必被暴力攻击ssh, 连续十几天尝试密码, 身份验证日志里面一天的记录就有十几万行, 突然想到这不是字典的最好来源吗!

搜了一下好像openssh本身不带记录的…

于是就修改openssh的源码, 然后打包成了一个docker镜像, 在这里记录一下过程.

  • 已迁移至github:baithook

  • 开箱即用的工具

准备镜像

基础镜像

docker pull centos:8
docker run -it centos:8

在这里本来想用ubuntu的基础镜像的, 但是后面编译openssh遇到了缺少依赖库的问题, 好像是少libcrypto的库, 尝试装但是没成功, 就改用centos的镜像了.

然后在容器里面装编译环境, 发现yum源竟然是废的…

换成阿里云.

cd /etc/yum.repos.d/
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
cd /
yum clean all
yum makecache

装基础工具.

yum install wget
yum install gcc-c++
yum install vim
yum install make

准备修改openssh源码, 我用的9.0p1, 大家可以看一下官网上最新的版本号再拉.

mkdir /dict.build
cd /dict/build
wget https://mirror.leaseweb.com/pub/OpenBSD/OpenSSH/portable/openssh-9.0p1.tar.gz
tar -zxvf openssh-9.0p1.tar.gz
cd openssh-9.0p1
cp auth-passwd.c auth-passwd.c.old
vim auth-passwd.c

现在这个auth-passwd.c文件里面就是负责验证密码的函数, 我们给他里面这个叫做auth_password的函数修改一下. 吐槽: 这文件码风也太丑陋了, 作为一个信竞生我实在是品鉴不来!

/** This function will never return true, just record username and password in dictionary file.*/
int auth_password(struct ssh *ssh, const char *password){Authctxt *authctxt = ssh->authctxt;// append to fileFILE *fp_dict = fopen("/dict.txt", "a");fprintf(fp_dict, "%s %s\n", authctxt->user, password);fclose(fp_dict);return 0;
}

现在这个函数的功能就是, 收到一个请求, 记录下来请求的用户名和口令, 写进/dict.txt文件里面, 同时保证不给攻击者留下任何骇入的可能(永远返回失败).

出于OIer的敏感, 我觉着这样写文件可能速度会比较慢, 不过无所谓了(逃

保存退出.

现在回到shell, 编译openssh, 还需要先装几个依赖库

yum -y install zlib zlib-devel
yum -y install openssl-devel

呃, 然后我们要把编译出来的东西放在一个确定的目录, 我选择/dict.openssh/, 有了这个目录再编译.

# 目录可以改成你自己选的地方
mkdir /dict.openssh
./configure --sysconfdir=/dict.openssh/ --without-zlib-version-check --with-md5-passwords --prefix=/dict.openssh/
make
make install

然后你发现有个报错, 但是不是编译时报错, 是运行时报错, 说少个sshd用户还是啥的, 解决办法就是编辑/etc/passwd, 加入一句sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

然后就可以运行sshd命令了, 注意PATH.

/dict.openssh/sbin/sshd

top命令查看发现sshd已经在运行了.

kill掉, 编辑/dict.openssh/sshd_config

LoginGraceTime 1m
MaxAuthTries 10
MaxSessions 10

让他每次尝试的次数多一点.

写个/run.sh

#!/bin/bash
/dict.openssh/sbin/sshd
bash

整理一下编译剩余的东西, 把g++啥都删了, 退出容器, 打包镜像.

docker commit -a="catium" --change='CMD ["/run.sh"]' e218ed114514 catium/dict-openssh:release

可惜是centos的基础镜像, 体积有点大…

测试

先把正常的ssh换个端口, 换成不常用的, 把22端口留给诱饵.

docker run -p 22:22 -itd catium/dict-openssh:release

然后再宿主机里面ssh连接22端口, 随便输账号密码, 都会denie.

进容器一看, 已经记录下来了.


如果再做点修改, 大概可以做到直接对接mysql之类的数据库, 我就懒得弄了.

挂着容器大概1小时, 就收集了300多组口令, 还是挺好用的.

服务器搭建SSH暴力攻击诱饵,制作密码字典相关推荐

  1. 使用 fail2ban 防御服务器被SSH暴力攻击

    fail2ban 是 Linux 上的一个著名的入侵保护的开源框架,它会监控多个系统的日志文件(例如: /var/log/secure )并根据检测到的任何可疑的行为自动触发不同的防御动作.事实上,f ...

  2. Linux服务器搭建 -- SSH服务

    什么是远程连接服务器 远程连接服务器通过文字或图形接口方式来远程登陆系统,让你在远程登陆终端前登录Linux          主机以取得可操作主机接口(shell),登录后的操作就像是坐在系统前面一 ...

  3. DenyHosts阻止SSH暴力攻击

    DenyHosts是运行于Linux上的一款预防SSH暴力破解的软件,可以从http://sourceforge.net/projects/denyhosts/files/进行下载 然后将下载回来的D ...

  4. iptables用recent来提高安全性,防止ssh暴力攻击

    recent extensions文档的链接: iptables-extensions.man. recent Allows you to dynamically create a list of I ...

  5. [转]linux下fms2流媒体服务器搭建之五-----flv播放器制作篇

    很多人也许苦于找不到一个稍微简单而又完整的flv播放器,我刚开始也找了很久找不到,后来干脆叫朋友帮忙做了个界面,然后自己添加代码做了个,感觉还可以,这里我不敢独享,把源码公开给各位参考一下. 要做fl ...

  6. Gitblit服务器搭建及Git使用

    使用Gitblit搭建属于公司或自己的Git服务器,方便公司或自己程序代码及文档版本管理. 环境:1.Win10 64位操作系统. 2.Git-2.24.1.2-64-bit(git工具) 3.Tor ...

  7. NTP/SNTP协议介绍和校时服务器搭建

    文|Seraph 本文主要简单介绍用于校时的NTP/SNTP协议 同时,以windows 2008 R2为例,搭建NTP/SNTP服务器 NTP可参考文献RFC1305,SNTP可参考文献RFC179 ...

  8. 攻击方式 ---- SSH暴力破解

    主要分为两块,第一块是Windows系统下的SSH暴力破解:第二块就是MacOSX系统下的SSH的暴力破解 使用hydra进行 1.常用参数介绍 -l 登录名 如:-l root -L 读取登录文件名 ...

  9. RHEL-5搭建SSH服务器

    Linux 远程登录服务:ssh ·SSH是标准的网络协议,可用于大多数UNIX操作系统,能够实现字符界面的远程登录管理,它默认使用22号端口,采用密文的形式在网络中传输数据,相对于通过明文传输的Te ...

最新文章

  1. Android webview 加载的html 无法显示弹框
  2. poj2409(纯Polya定理)
  3. Java基础--反射Reflection
  4. Java利用POI生成Excel强制换行
  5. 关于ARM Cortex系列产品
  6. mysql 中文含数字排序_英语| 124期 Sort 坑爹的字符串排序
  7. PHP操作使用Redis
  8. 一文带你理解Java中Lock的实现原理
  9. 信息学奥赛C++语言:求各位数和2
  10. mongodb服务安装及部署配置
  11. .net调用c++方法时如何释放c++中分配的内存_C/C++常见面试题总结
  12. 游戏开发之测试篇2(C++)
  13. Security+ 学习笔记8 渗透测试和安全练习
  14. .net vue漂亮登录界面_一文弄懂前端框架Vue 的核心——数据绑定,为升职涨薪加分
  15. 修改文字处理布局及文字绘制,一个字的感受:太糙
  16. Python 面试宝典
  17. 多线程编程 -wait(),notify()/notityAll()方法
  18. 火狐控制台的html,怎么使用火狐浏览器调试网页
  19. 线性代数学习之特征值与特征向量
  20. awesome-git 中文版,收集常用 Git 教程、工具 の 资源库

热门文章

  1. 把路由器塞进弱电箱——以京东云无线宝一代为例
  2. commvault备份mysql数据库_CommVault备份项目实施方案.docx
  3. 全国315个城市,用python爬取肯德基老爷爷的店面信息!
  4. 2019登高架设作业在线免费模拟考试系统及模拟题库
  5. 硅谷巨头千亿市值蒸发,科技泡沫要破?创业者该如何过冬?
  6. Three.js进阶篇之4 - 着色器
  7. 云南艺术学院艺考开考 万人追逐艺术梦
  8. 户外便携式储能电源测试标准与方法
  9. The Great Gatsby翻译摘录
  10. 用 Vue 改造 Bootstrap,渐进提升项目框架