The result of tag: (4 results)

SSH反向隧道的搭建过程

by LauCyun Nov 21,2018 13:39:47 6,851 views

现在我有一台内网主机 A,在局域网内是可以访问的,但是如果我现在不处在局域网内,可以选择 VPN 连接,但这样其实并不太方便,所以本节将介绍如何利用 SSH 反向隧道来实现访问内网主机。

0x0 准备

首先需要有一台公网主机作为跳板,这台主机是可以公网访问的,我们将其命名为 B。


图1 SSH反向隧道

所以两台机器网络配置如下:

  • A 内网机器
    • IP:192.168.0.240
    • SSH端口:22
    • 用户名:root
    • 密码:123456
    • 内网配置端口:443
  • B 公网机器
    • IP:47.92.206.111
    • SSH端口:22
    • 用户名:root
    • 密码:123456
    • 公网端口:3443(即用 B 的 3443 端口连到 A 的 3443 端口)

0x1 配置 SSH

首先在主机 A 上执行如下命令生成 SSH 公私密钥:

$ ssh-keygen -t rsa -C "your@email.com"

命令里面的邮箱需要自行更换。


图2 生成SSH公私钥

然后利用如下命令将 A 的 SSH 公钥添加到 B 的authorized_keys里面:

$ scp ~/.ssh/id_rsa.pub root@47.92.206.111:/root/.ssh/authorized_keys

执行后会提示输入主机 B 的密码,执行完毕之后,所以 A 即可通过 SSH 免密登录 B。

0x2 配置主机 B

B 主机需要更改/etc/ssh/sshd_config文件,修改(添加)如下一行:

GatewayPorts yes

这样可以把监听的端口绑定到任意IP 0.0.0.0上,否则只有本机127.0.0.1可以访问。

然后重启sshd服务:

$ sudo service sshd restart

0x3 配置主机 A

主机 A 再安装工具 autossh,以 Ubuntu 为例,命令如下:

$ sudo apt-get install autossh

然后执行如下命令即可完成反向 SSH 配置:

$ autossh -M 65530 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -NCfR 0.0.0.0:3443:127.0.0.1:443 root@47.92.206.111

这样就可以将 A 主机的 443 端口映射到 B 主机的 3443 端口了。。。

ServerAliveInterval and ServerAliveCountMax – they cause the SSH client to send traffic through the encrypted link to the server. This will keep the connection alive when there is no other activity and also when it does not receive any alive data, it will tell AutoSSH that the connection is broken and AutoSSH will then restart the connection.

Reference: https://www.everythingcli.org/ssh-tunnelling-for-fun-and-profit-autossh/

参数:

  • -M port
    autossh参数,任意填写一个可用端口即可。
  • -f
    建立成功后在后台运行,通常和-N连用。
  • -L port:host:hostport
    将本地机(客户机)的某个端口转发到远端指定机器的指定端口。
    工作原理是这样的,本地机器上分配了一个 socket 侦听 port 端口,一旦这个端口上有了连接,该连接就经过安全通道转发出去,同时远程主机和 host 的 hostport 端口建立连接。 可以在配置文件中指定端口的转发。 只有 root 才能转发特权端口。 IPv6 地址用另一种格式说明: port/host/hostport
  • -R port:host:hostport
    将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口。
    工作原理是这样的,远程主机上分配了一个 socket 侦听 port 端口,一旦这个端口上有了连接,该连接就经过安全通道转向出去,同时本地主机和 host 的 hostport 端口建立连接。 可以在配置文件中指定端口的转发。 只有用 root 登录远程主机才能转发特权端口。 IPv6 地址用另一种格式说明: port/host/hostport
  • -D port
    指定一个本地机器 “动态的’’ 应用程序端口转发。
    工作原理是这样的,本地机器上分配了一个 socket 侦听 port 端口,一旦这个端口上有了连接,该连接就经过安全通道转发出去,根据应用程序的协议可以判断出远程主机将和哪里连接。 目前支持 SOCKS4 协议,将充当 SOCKS4 服务器。 只有 root 才能转发特权端口。 可以在配置文件中指定动态端口的转发。
  • -C
    压缩数据传输。
  • -N
    只建立连接,不执行脚本或命令,通常与-f连用。
  • -g
    -L/-R/-D参数中,允许远程主机连接到建立的转发的端口,如果不加这个参数,只允许本地主机建立连接。
    注:这个参数我在实践中似乎始终不起作用。

但是,这样就可以访问吗?答案是不可以,以我的经验来看,好像只有SSH是可以直接访问,所以还需要使用中间件对其进行代理哦,以 Nginx 为例,配置如下:

server
{
    listen 443 ssl;

    ssl_certificate     /etc/nginx/certs/server.crt;
    ssl_certificate_key /etc/nginx/certs/server.key;

    location / {
        proxy_redirect off;
        proxy_pass         https://127.0.0.1:3443;
        proxy_set_header    Host             $host;
        proxy_set_header    X-Real-IP        $remote_addr;
        proxy_set_header    X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header    X-Client-Verify  SUCCESS;
        proxy_set_header    X-Client-DN      $ssl_client_s_dn;
        proxy_set_header    X-SSL-Subject    $ssl_client_s_dn;
        proxy_set_header    X-SSL-Issuer     $ssl_client_i_dn;
    }
}

访问 B 主机的 443 端口,就会自动转发到 A 主机的 443 端口了,即可以公网访问了。


图3 AWVS

0x4 参考

...

Tags Read More


OpenSSH漏洞:SSH Weak Algorithms Supported的分析与解决方案

by LauCyun Oct 22,2017 21:10:29 67,820 views

前几天,在公安部三所产品检测的时候,产品爆出一个名为SSH Weak Algorithms Supported的中危漏洞,经过一番沟通后,得知他们用Nessus做的漏洞扫描检测。为此对这个问题稍作了研究和大家分享一下。

1 漏洞描述

如下图,该漏洞为一个中危漏洞,名为SSH Weak Algorithms Supported

SSH Weak Algorithms Supported

该漏洞的详细描述如下图:

大意为Nessus检测到了SSH服务配置中存在Arcfour加密算法或没有配置加密算法。

2 解决方案

在ssh配置文件/etc/ssh/sshd_config中添加下面这行配置。

# CentOS
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se
# Debian/Ubuntu
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,blowfish-cbc,aes128-cbc,3des-cbc,cast128-cbc,aes192-cbc,aes256-cbc

保存后,重启ssh服务。

3 漏洞简析

根据Nessus给的描述可以看出,这个漏洞属于SSH的配置缺陷,SSH服务启用了Arcfour(也称RC4)这个不安全算法,我们用man查看一下关于sshd_config文件的帮助,其中可以看到关于Ciphers的条目。

# CentOS6
$ man sshd_config
...
     Ciphers
             Specifies the ciphers allowed for protocol version 2.  Multiple ciphers must be comma-separated.  The supported ciphers are “3des-cbc”, “aes128-cbc”, “aes192-cbc”, “aes256-cbc”, “aes128-ctr”,
             “aes192-ctr”, “aes256-ctr”, “arcfour128”, “arcfour256”, “arcfour”, “blowfish-cbc”, “rijndael-cbc@lysator.liu.se”, and “cast128-cbc”.  The default is:

                aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,
                aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,
                aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se
...

# Debian/Ubuntu
     Ciphers
             Specifies the ciphers allowed.  Multiple ciphers must be comma-separated.  If the specified value begins with a ‘+’ character, then the specified ciphers will be appended to the default set instead of replacing them.

             The supported ciphers are:

                   3des-cbc
                   aes128-cbc
                   aes192-cbc
                   aes256-cbc
                   aes128-ctr
                   aes192-ctr
                   aes256-ctr
                   aes128-gcm@openssh.com
                   aes256-gcm@openssh.com
                   arcfour
                   arcfour128
                   arcfour256
                   blowfish-cbc
                   cast128-cbc
                   chacha20-poly1305@openssh.com

             The default is:

                   chacha20-poly1305@openssh.com,
                   aes128-ctr,aes192-ctr,aes256-ctr,
                   aes128-gcm@openssh.com,aes256-gcm@openssh.com

             The list of available ciphers may also be obtained using the -Q option of ssh(1) with an argument of “cipher”.

可以看到,在默认的情况下,sshd_config文件中如果没有指定加密算法的话,默认会使用的算法列表中存在Arcfour算法。

因此这个漏洞的修复只需要手动配置ssh加密算法,并去除Arcfour算法即可。

4 Arcfour算法的风险

关于启用Arcfour存在的风险,可以参考Wiki上的词条:RC4 - Wikipedia(需要梯子),没有梯子的请参考:RC4_百度百科

简单的说就是RC4算法本身存在漏洞,在特定情况下,它密文可以被破译得到明文,因此这是一种不安全加密算法。

...

Tags Read More


Web版SSH工具GateOne

by LauCyun Aug 08,2017 17:04:57 25,492 views

在Windows下连接远程Linux主机可以使用Putty等工具。可是我们有时还是希望直接通过浏览器访问Linux主机,网上有wssh、Gateone等开源工具。比较一下:

  • wssh是基于paramiko模块的,但是通过paramiko模块访问vi 、vim、nano等软件会存在问题。
  • Gateone基本上已经满足了需要,效果是非常不错的。

下面我就来部署一下,我是基于Ubuntu 16.04。

1 安装Gateone

下载Gateone源码:

wget -c https://github.com/downloads/liftoff/GateOne/gateone-1.1.tar.gz
tar -vxf gateone-1.1.tar.gz
cd GateOne

配置Gateone依赖环境

apt-get install python python-pip python-imaging
pip install pyopenssl ordereddict tornado==2.4.1

开始安装,请确认是在GateOne目录中

python setup.py install

安装成功后,会生成/opt/gateone/目录。

2 修改配置文件

先运行gateone,并生成一个默认的配置文件

cd /opt/gateone
./gateone.py

然后修改配置文件

vim /opt/gateone/server.conf

修改内容如下:

# -*- coding: utf-8 -*-
locale = "en_US"
pam_service = "login"
syslog_facility = "daemon"
syslog_host = None
enable_unix_socket = False
port = 21604  #端口号,随意设置
uid = "0"
url_prefix = "/"
user_dir = "/opt/gateone/users"
dtach = True
certificate = "/opt/gateone/ubuntu-xenial.crt"  # SSL证书
log_to_stderr = False
session_logs_max_age = "30d"
gid = "0"
pid_file = "/var/run/gateone.pid"
sso_realm = None
cookie_secret = "NGI4NjI0MDAwY2JhNDNkNThkZTRkMDllNWJlMWY4MmQ2M"
pam_realm = "31d97bf9a740"
sso_service = "HTTP"
https_redirect = False
syslog_session_logging = False
disable_ssl = False
debug = False
session_dir = "/tmp/gateone"
auth = "none"
address = ""
api_timestamp_window = "30s"
log_file_num_backups = 10
logging = "info"
embedded = False
origins = "https://172.17.0.3;https://ubuntu-xenial.liuker.org"  # 设置需要用到的ip和域名
session_logging = True
unix_socket_path = "/var/run/gateone.sock"
ssl_auth = "none"
log_file_max_size = 104857600
session_timeout = "5d"
command = "/opt/gateone/plugins/ssh/scripts/ssh_connect.py -S '/tmp/gateone/%SESSION%/%SHORT_SOCKET%' --sshfp -a '-oUserKnownHostsFile=%USERDIR%/%USER%/ssh/known_hosts'"
ca_certs = None
js_init = ""
keyfile = "/opt/gateone/ubuntu-xenial.key"  # SSL密钥
log_file_prefix = "/opt/gateone/logs/webserver.log"

:wq保存后,重新运行

cd /opt/gateone
./gateone.py

在浏览器中打开https://ip:21604即可使用。

3 配置Nginx代理

如果使用https://ip:21604这样的地址,不方便不美观也不容易记,如果用Nginx代理端口,就能使用https://ubuntu-xenial.liuker.org来使用了Gateone了。

vim /usr/local/nginx/conf/sites-enabled/default

添加内容为:

# ubuntu-xenial.liuker.org
server {
    listen 443;
    server_name ubuntu-xenial.liuker.org;

    ssl on;
    ssl_certificate /usr/local/nginx/conf/ssl/ubuntu-xenial.crt;
    ssl_certificate_key /usr/local/nginx/conf/ssl/ubuntu-xenial.key;

    ssl_session_timeout 5m;

    ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
    ssl_prefer_server_ciphers on;

    location / {
        proxy_pass       https://172.17.0.3:21604;

        proxy_redirect off;
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $http_address;
        proxy_set_header X-Scheme $scheme;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

重新加载nginx配置:

/usr/local/nginx/sbin/nginx -s reload

在浏览器中打开https://ubuntu-xenial.liuker.org即可使用。

最后来几张图~


图1 登录界面


图2 查看进程


图3 使用vim编辑文件

...

Tags Read More


Linux root 登录 SSH 出现 Access denied 和 Permission denied 错误的解决办法

by LauCyun Apr 07,2016 11:57:10 37,664 views

用 root 用户登录 SSH 时,出现 Permission denied, please try again. 错误,如下图:

或则用 putty 登录时,出现 Access denied 错误,如下图:

出现这个错误的主要是 /etc/ssh/sshd_config 配置问题。解决方法:将 /etc/ssh/sshd_config 中 PermitRootLogin without-password 改为 PermitRootLogin yes ,再添加 AllowUsers root ,如下:

# Package generated configuration file
# See the sshd_config(5) manpage for details

# What ports, IPs and protocols we listen for
Port 22
# Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::
#ListenAddress 0.0.0.0
Protocol 2
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
#Privilege Separation is turned on for security
UsePrivilegeSeparation yes

# Lifetime and size of ephemeral version 1 server key
KeyRegenerationInterval 3600
ServerKeyBits 1024

# Logging
SyslogFacility AUTH
LogLevel INFO

# Authentication:
LoginGraceTime 120
# PermitRootLogin without-password // 注释掉
PermitRootLogin yes // 添加
AllowUsers root     // 添加
StrictModes yes

RSAAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeysFile	%h/.ssh/authorized_keys

# Don't read the user's ~/.rhosts and ~/.shosts files
IgnoreRhosts yes
# For this to work you will also need host keys in /etc/ssh_known_hosts
RhostsRSAAuthentication no
# similar for protocol version 2
HostbasedAuthentication no
# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication
#IgnoreUserKnownHosts yes

# To enable empty passwords, change to yes (NOT RECOMMENDED)
PermitEmptyPasswords no

# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no

# Change to no to disable tunnelled clear text passwords
#PasswordAuthentication yes

# Kerberos options
#KerberosAuthentication no
#KerberosGetAFSToken no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes

# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes

X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
#UseLogin no

#MaxStartups 10:30:60
#Banner /etc/issue.net

# Allow client to pass locale environment variables
AcceptEnv LANG LC_*

Subsystem sftp /usr/lib/openssh/sftp-server

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
UsePAM yes

重启 SSH 就 OK 了。

/etc/init.d/sshd restart

 

...

Tags Read More