用Python构建一个SSH僵尸网络-02 手动与SSH交互 — 登录SSH服务器端的 root 用户


我的电脑(攻击者)的系统:Ubuntu14.04 ; 用户名: aobosir@ubuntu:~$

被攻击对象电脑(模拟的SSH服务端)的系统:Ubuntu16.04 ; 用户名:aobo@ubuntu:~$


这一节,我们来手动的使用 SSH 连接目标电脑。

构建僵尸网络的第一件事情你知道是什么吗?嘿嘿,就是找一个目标服务器做为攻击对象。目标服务器就是一个启动了SSH服务端的电脑。(后面我们都将目标电脑称为:被攻击的电脑)

所谓我需要先找一个电脑,将它搭建成被攻击的电脑。


我找了一台 安装了 Ubuntu 16.04.10 LTS 系统的电脑,准备用它来模拟被攻击的对象。

我们先查看 被攻击对象我的电脑IP 地址都是什么:(执行 ifconfig 命令就可以得到电脑的 IP 地址。)

被攻击对象的 IP

inet addr:192.168.14.128

我的电脑的 IP

inet addr:192.168.14.130

现在将它们相互 ping ,看看能不能正常 ping 通。如果可以正常 ping 通,我们继续进行下一步。(我现在的情况,它们两个是同一个局域网里面的两个虚拟机,当然是可以 ping 得通啦。)


接下来,在 我的电脑 上执行下面的命令,来测试通过 SSH 连接被攻击对象。

$ ssh root@192.168.14.128

输出错误:

ssh: connect to host 192.168.14.128 port 22: Connection refused

Q: 对于:执行 ssh localhost 命令,会输出错误信息:ssh: connect to host localhost port 22: Connection refused 的问题,要如何解决?

A:

原因,我们在 被攻击对象上找。

先来分析可能的原因:

1 . 是不是因为被攻击对象 的ssh 服务端 没有启动?我们在服务器电脑上执行下面的语句:

ps -e | grep ssh

输出:可能是什么都没有;或者是下面这样的输出:

 3091 ?         00:00:00 ssh-agent

这就说明:被攻击对象(目标电脑) 没有启动 SSH 服务端。

知识点:

ssh 是客户端

sshd 是服务器端的

ssh-agent ssh-agent是一种控制用来保存公钥身份验证所使用的私钥的程序。ssh-agent启动之后,如果通过公钥做身份验证,只需第一次输入密码,以后ssh-agent会帮你自动输入。

现在知道了导致 Connection refused 问题的原因:被攻击对象电脑没有启动 sshd 。所以,在被攻击对象电脑上,执行下面的命令,启动它:

$ sudo /etc/init.d/ssh start

如果你的输出是下面这个样子的,说明被攻击对象电脑 没有安装 ssh 服务端

sudo: /etc/init.d/ssh: command not found

这个时候安装 openssh-server 就可以。就执行下面的语句:

sudo apt-get install -y openssh-server

下载完成后,启动它。

成功的输出:

$ sudo /etc/init.d/ssh start
[sudo] password for aobo:
[ ok ] Starting ssh (via systemctl): ssh.service.
$

现在我们查看一下,被攻击对象电脑是否真的启动了 SSH 服务端。在被攻击对象电脑上执行 ps -e | grep ssh 命令。输出下面的一条信息,说明 SSH 服务端 已经在 被攻击对象电脑 上成功启动了。现在 被攻击对象电脑 就是一个 SSH服务器

10237 ?        00:00:00 sshd

折腾了半天,至于将准备工作做完了。

下面使用三步,手动用个 SSH 连接 被攻击对象电脑


第一步:

OK,现在在 我的电脑 上执行: ssh root@192.168.14.128 来尝试连接 被攻击对象电脑。输出:

$ ssh root@192.168.14.128
The authenticity of host '192.168.14.128 (192.168.14.128)' can't be established.
ECDSA key fingerprint is 43:c3:7f:d0:e3:0f:d0:f7:d1:45:1b:f1:8d:b9:8b:c5.
Are you sure you want to continue connecting (yes/no)?

它的意思就是说:无法确定主机 “192.168.14.128” 的可靠性,需要你确认 ECDSA 密钥指纹,并且问题你是否要继续连接?

第二步:

我们直接输入: yes

Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.14.128' (ECDSA) to the list of known hosts.
Connection closed by 192.168.14.128
$

它的意思就是说:永久性的将 “192.168.14.128”(ECDSA)添加到已知主机的列表中。但是莫名其妙的是,”192.168.14.128” 这个被攻击对象电脑 将这次的连接给关闭了。

所以我们在再 我的电脑上执行:ssh root@192.168.14.128 命令:

aobosir@ubuntu:~$ ssh root@192.168.14.128
root@192.168.14.128's password:

现在可以了,直接输入 被攻击对象电脑 root用户的密码就可以了。

对于所有的 Linux系统, root账号默认是没有密码的,但是第一次启动root时,还是要你输入密码。所以对于Linux系统第一次切换到root账户前,要设置root密码。所以,如果你的 被攻击对象电脑 一次 root 用户都没有使用过,那么它是没有 root 密码的,所以对于 我的电脑 来说:在输入 被攻击对象电脑的 root 用户的密码的时候,就永远是提示:Permission denied, please try again.

所以,你遇到了这种情况。你需要参考这篇博客:Linux 系统设置root 用户的密码 来为 被攻击对象电脑 设置 root 用户的密码。

我现在知道:被攻击对象电脑 root 用户的密码 是 123456,所以我们直接输入。我们输入的 被攻击对象电脑root用户的密码是正确的,但是报如下信息:

Permission denied, please try again.
root@192.168.14.128's password:

这个是由于:安全期间 ssh 服务默认没有开 root 用户的 ssh 权限。

解决办法: 来到 被攻击对象电脑,修改 rootssh 权限。

打开 /etc/ssh/sshd_config 文件

sudo gedit /etc/ssh/sshd_config

PermitRootLogin no或者PermitRootLogin prohibit-password 改为 PermitRootLogin yes

再执行 sudo /etc/init.d/ssh restart 重新启动 ssh 服务端 (SSHD)。

$ sudo /etc/init.d/ssh restart
[ ok ] Restarting ssh (via systemctl): ssh.service.
$

Ok ,现在再来在 我的电脑 上执行 ssh root@192.168.14.128 命令试试看:

aobosir@ubuntu:~$ ssh root@192.168.14.128
root@192.168.14.128's password:
Welcome to Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-34-generic x86_64) * Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage 143 packages can be updated.
8 updates are security updates. Last login: Thu Sep 8 01:48:43 2016 from 192.168.14.130
root@ubuntu:~#

搞定

退出的话,执行命令 logout ;或者 执行命令 exit ;或者 按Ctrl + D ,都可以退出 在 我的电脑 上登录的 被攻击对象电脑root 用户。

root@ubuntu:~# logout
Connection to 192.168.14.128 closed.
aobosir@ubuntu:~$


总结:

那么这一节,我们将制作SSH僵尸网络的准备工作做完了,并且我们也手动的尝试在 我的电脑 登录 被攻击对象电脑 root 用户。

下一讲,我们将不再是手动的将电脑(我的电脑)与服务器(被攻击对象电脑)向连接了,而是使用一个 Python 的第三方库,来帮助我们自动的进行本节教程中的连接。

简单的说,下一节的任务,就是来实现一个简单的自动化操作 — 用PexpectPython 第三方库)与SSH交互。




参考网站:

[已解决]SSHD运行命令有错误(OpenSSH-Server)

http://forum.ubuntu.org.cn/viewtopic.php?t=36681

ssh服务常见问题总结

http://desert.blog.51cto.com/779694/175333

Python-黑客-004 用Python构建一个SSH僵尸网络-02 手动与SSH交互的更多相关文章

  1. Python 黑客 004 用Python构建一个SSH僵尸网络 01 简介

    用Python构建一个SSH僵尸网络 01 简介 一. 构建一个SSH僵尸网络的流程图: Created with Raphaël 2.1.0手动操作,实现通过SSH连接目标服务器(手动)用 Pexp ...

  2. Python学习笔记23:Django构建一个简单的博客网站(一个)

    在说如何下载和安装Django,本节将重点讨论如何使用Django站点. 一 新建project 命令:django-admin startproject mysite # 有的须要输入:django ...

  3. python 黑客书籍 ——扫描+暴力破解

    https://legacy.gitbook.com/book/germey/net-security/details 网络安全 介绍 构建一个端口扫描器 利用Pexpect模拟SSH连接 利用Pxs ...

  4. jenkins构建一个python项目

    Jenkins发布后端python代码 “系统管理”“管理插件”“已安装” 检查是否有“Git plugin”和“Publish Over SSH”两个插件,如果没有,则需点击“可选插件”,找到它 ...

  5. 从零构建一个简单的 Python Web框架

    为什么你想要自己构建一个 web 框架呢?我想,原因有以下几点: 你有一个新奇的想法,觉得将会取代其他的框架 你想要获得一些名气 你遇到的问题很独特,以至于现有的框架不太合适 你对 web 框架是如何 ...

  6. Python 之父再发文:构建一个 PEG 解析器

    花下猫语: Python 之父在 Medium 上开了博客,现在写了两篇文章,本文是第二篇的译文.前一篇的译文 在此 ,宣布了将要用 PEG 解析器来替换当前的 pgen 解析器. 本文主要介绍了构建 ...

  7. 通过python 构建一个简单的聊天服务器

    构建一个 Python 聊天服务器 一个简单的聊天服务器 现在您已经了解了 Python 中基本的网络 API:接下来可以在一个简单的应用程序中应用这些知识了.在本节中,将构建一个简单的聊天服务器.使 ...

  8. 用python构建一个多维维数组

    用python构建一个二维数组 解法? 方法1: num_list=[0]*x//表示位创建一个一维数组为num_lis[x],且数组中的每一项都为0 num_list=[[0]*x for i in ...

  9. 使用 Python 的 Socket 模块构建一个 UDP 扫描工具

    译文:oschina 英文:bt3gl 当涉及到对一些目标网络的侦察时,出发点无疑是首先发现宿主主机.这个任务还可能包含嗅探和解析网络中数据包的能力. 几周前,我曾经谈到了如何使用Wireshark来 ...

随机推荐

  1. [转载]java操作word(一)

    一. 需求背景 在做项目的过程中,经常会遇到要把数据库数据导出到Word文件中的需求,因为很多情况下,我们需要将数据导出到WORD中进行打印.此需求可以通过用程序填充数据到word模板中来实现.所谓模 ...

  2. Windows7+VS2008 下编译Subversion 1.8.3

    一.需要的软件包 1.python-2.7.5.msi  http://www.python.org/ 2.ActivePerl-5.8.8.822-MSWin32-x86-280952.msi  h ...

  3. 浪漫爱心--第三方开源--PeriscopeLayout

    点此下载 使用很简单,首先在xml里面添加 <Button android:id="@+id/btn_start" android:layout_width="wr ...

  4. java学习笔记 --- 网络编程(套接字)

    1.Socket通信原理 Socket套接字概述: 网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字. 通信的两端都有Socket. 网络通信其实就是Socket间的通信 ...

  5. Android 禁止屏幕旋转、避免转屏时重启Activity

    一.禁止屏幕旋转 在AndroidManifest.xml的每一个需要禁止转向的Activity配置中加入android:screenOrientation属性: 可选项: landscape = 横 ...

  6. [Luogu3674]小清新人渣的本愿

    luogu 题意 给你一个序列a,长度为n,有m次操作,每次询问一个区间是否可以选出两个数它们的差为x,或者询问一个区间是否可以选出两个数它们的和为x,或者询问一个区间是否可以选出两个数它们的乘积为x ...

  7. BZOJ1901:Dynamic Rankings

    浅谈离线分治算法:https://www.cnblogs.com/AKMer/p/10415556.html 题目传送门:https://lydsy.com/JudgeOnline/problem.p ...

  8. emacs复制粘贴和查找撤销

    在emacs下复制粘贴是这样的.1.在任一行中按下ctrl+space键,最底行会显示 Mark set 表示已经开始标记了.2.移动鼠标或者选中文字然后,可以有两种方式:Alt+w (复制) 或者  ...

  9. Python collections系列之可命名元组

    可命名元组(namedtuple)  根据nametuple可以创建一个包含tuple所有功能以及其他功能的类 1.创建一个坐标类 import collections # 创建类, defaultd ...

  10. PIX v2版本中Query 失败时, ERR段的构造

    在ITI-9中描述PIX query事务的几个TestCase场景.其中有些是对于Query失败的描述. ERR 段包含Error location, Error code, Error code t ...