iOS 安全与逆向IOS

三、SSH(Mac登录到iPhone)

2018-11-28  本文已影响105人  Lovell_

一、WIFI连接登录:Mac(客户端)登录到iPhone(服务器)

为什么要Mac端要远程登录到iPhone端?——这样就可以在Mac的终端上,通过敲一些命令行来作用于iPhone端、操纵iPhone端。

为什么iOS支持终端命令操作?——因为iOS和Mac OS X都是基于Darwin(苹果的一个基于Unix的开源系统内核)。

登录步骤:
1、iPhone端在cydia上安装个OpenSSH,便于使用OpenSSH远程登录。
2、Mac和iPhone处于同一WIFI下;
3、Mac端登录命令ssh root@10.16.28.48,解释:[ssh用该远程登录保护方式] [root:账户名,iOS下的账号之一] @ [10.16.28.48 是手机端服务器连接wifi的ip地址]
4、Mac端提示输入密码:alpine 【这是cydia上OpenSSH这个插件的作者规定的初始密码】
5、成功登录到iPhone服务器;
6、可以使用Mac端的终端操控iPhone了。。。。。。。。
7、退出登录命令:exit

image.png

了解一些概念:

> iOS下的2个常用账户:root、mobile
root:最高权限账户,$HOME是/var/root
mobile:普通权限账户,只能操作一些普通文件,不能操作系统级别的文件,$HOME是/var/mobile,登录方式与root几乎相同root mobile@服务器主机地址

> 修改账户密码:
修改root账户:passwd
修改mobile账户:passwd mobile

image.png

> 搞清楚SSH、OpenSSH、SSL、OpenSSL

SSH OpenSSH的加密就是通过OpenSSL完成的

> SSH的版本
SSH协议一共2个版本:SSH-1、SSH-2,现在用的比较多的是SSH-2,客户端和服务端版本要保持一致才能通信。

查看SSH版本,通过查看配置文件中的Protocol字段,查看命令:
客户端:cat /etc/ssh/ssh_config
服务端:cat /etc/ssh/sshd_config

> SSH的通信过程

可以分为3大主要阶段:
1、建立安全连接、2、客户端认证、3、数据传输。

1、建立安全连接

1.1 在建立安全连接过程中,服务器会提供自己的身份证明;

左边的客户端中的known_hosts文件就是存放一些公钥信息:

image.png

查看known_hosts:cat known_hosts,192.168.123.71对应的就是iPhone服务端发过来的公钥:

image.png

如何验证客户端中known_hosts文件中192.168.123.71对应的公钥信息就是iPhone服务端的公钥?
——打开服务端的公钥,对比下是否一致,即可知道。

连接到服务器 ssh root@192.168.123.71,来到服务器的配置文件夹cd /etc/ssh,查看其中服务器公钥ssh_host_rsa_key.pub,对比上面客户端(Mac)known_hosts文件中192.168.123.71对应的内容,会发现是一致的。

image.png

1.2 如果客户端(Mac)并无服务器端(iPhone)的公钥信息,就会询问是否连接此服务器,连接后下次就不会再询问,因为已经保存了iPhone端的公钥,除非把公钥删掉;

提示要保存公钥并连接

1.3 在建立安全连接过程中,如果服务端的公钥和客户端存储的公钥不一致,会提示以下错误信息:提醒服务器的身份信息发生了变更(远程连接发生了改变,可能遭遇中间人攻击)

也可能是这种原因:
公司换了台电脑,上面的ip地址设置的一样,这种情况并不是遭到攻击。电脑还是会把根据公钥生成的指纹信息发送过来,如果确实是公司的那台电脑的指纹信息,那还是要连接。

但是一旦显示这个界面,是会连接失败的,怎么办?——删掉之前的公钥信息。

删除公钥方法一:用vim删除对应的host公钥:vim ~/.ssh/known_hosts

1、cd ~/.ssh
2、vim know_hosts
3、让光标停留在192.168.123.71行,按 d 即可删除
4、保存推出;
5、再次进行连接服务器ssh root@192.168.123.71
6、重新提示要不要连接

image.png

删除公钥方法二:ssh-keygen -R 服务器IP地址

image.png

建立安全连接,不只是公钥信息的验证,还要做很多事,比如要确定会话密钥。。。等等

2、客户端认证
第一步已经确认了要连接,但是客户端的密码还不知道对不对。客户端是如何认证呢?

SSH-2提供了2种常用的客户端认证方式

1、基于密码的客户端认证:使用账号和密码即可认证;
2、基于密钥的客户端认证:免密码认证,最安全的一种认证方式。

SSH-2默认会优先尝试“密钥认证”,如果认证失败,才会尝试“密码认证”。

如何搭建基于密钥的客户端认证?
image.png
  1. 在客户端要生成配对的公钥文件和私钥文件。
    【见图:客户端生成公私钥操作步骤】
  2. 在服务器端会有个授权文件。
  3. 客户端将公钥内容放到服务端的授权文件尾部。
    【见图:公钥内容追加到服务端授权文件尾部】
  4. 登录,验证免密码认证是否完成,由它自己完成,自己会用到私钥。。。。
客户端生成公私钥操作步骤 命令行实际操作 生成的密钥文件 公钥内容追加到服务端授权文件尾部 命令行实际操作 命令行实际操作

尝试登录,看是否免密码:

image.png

还是需要密码,免密验证失败,ssh-keygenssh-copy-id root@服务器主机地址,这两个智能指令生成密钥文件并且追加到服务端授权文件尾部的操作,没能帮到我,还没搞清楚原因。(原因后面有说到,是文件权限的问题)

除开用智能指令,还可以手动操作来把公钥内容追加到授权文件尾部。
1、公钥文件拷贝到服务端;
2、再把内容追加到授权文件尾部;

操作步骤:
1、先删掉服务端的授权文件authorized_keys;
2、进入客户端.ssh文件夹;
3、scp ~/.ssh/id_rsa.pub root@192.168.123.71:~/.ssh,scp:远程拷贝;
4、登录到服务端进入.ssh文件夹,把id_rsa.pub的内容追加到authorized_keys的尾部:cat id_rsa.pub >> authorized_keys,如果没有authorized_keys就会新建一个,此时authorized_keys文件的内容和id_rsa.pub就是一样了;
5、rm id_rsa.pub
6、尝试登录ssh root@192.168.123.71,看是否需要密码,我的结果还需要密码!!!!!(后面有说到是文件夹权限问题)

解决配置完免密认证后,登录还需要输入密码的问题。

存在这个问题是因为文件夹没有权限。
所以在服务端,还需要配置权限:
chmod 755 ~
chmod 755 ~/.ssh
chmod 644 ~/.ssh/authorized_keys

image.png 命令行实操

结果还要密码:alpine,只是提示输密码不一样了。

Enter passphrase for key还是要密码
方法一:上网查找的解决办法:网址

Mac本地执行命令:

eval `ssh-agent` 
ssh-add

ssh-agent:是用于管理密钥;
ssh-add:用于将密钥加入到ssh-agent中;
SSH可以和ssh-agent通信获取密钥,这样就不需要用户手工输入密码了。 但这个配置只对当前会话生效,会话关闭或机器重启后都需要重新执行这两条命令。将命令放到~/.bash_profile中,就可以免去每次输入的麻烦。

成功解决Enter passphrase for key

到这里为止,可以成功的免密登录了。但是退出终端,还是要输入密码。

方法二:
ssh-add -K ~/.ssh/id_rsa 

退出终端,依然不用输入密码,
但如果重启电脑,上面的指令还需执行一次。

方法三:(完美)

结合方法一和方法二,把ssh-add -K ~/.ssh/id_rsa这条指令放在~/.bash_profile中,这样每次重启电脑都会执行该指令。已验证重启终端或电脑都无需再输入密码。

参考:
1、mac配置完ssh依然提示"Enter passphrase for key"解决方法
2、mac:ssh登陆总是需要输入钥匙串密码解决

> 22端口介绍
端口就是设备对外提供服务的窗口,每个端口都有个端口号(范围是0~65535,共2^16个)。

有些端口号是保留的,已经规定了用途,比如:
21端口提供FTP服务;
80端口提供HTTP服务;
22端口提供SSH服务(可以查看/etc/ssh/sshd_config的Port字段);
更多保留端口号: https://baike.baidu.com/item/%E7%AB%AF%E5%8F%A3%E5%8F%B7/10883658#4_3

iPhone默认是使用22端口进行SSH通信,采用的是TCP协议。

image.png

3、数据传输

二、USB连接登录:Mac(客户端)登录到iPhone(服务器)

为什么要用USB连接?

为什么Mac可以通过USB传数据?

USB连接

0、准备两个文件:tcprelay.pyusbmux.py
——即usbmuxd工具包(下载v1.0.8版本,主要用到里面的一个python脚本:tcprelay.py

1、映射端口,10010端口映射到22端口,命令行:python /Users/fengXXX/Desktop/usbmuxd/tcprelay.py -t 22:10010
格式解释: python [文件路径] [-t:为了能够同时支持多个SSH连接] [SSH端口] : [客户端Mac端口,找个没被用的就行,如果被用了,则映射不成功,见图:端口被占用.png]

image.png 端口被占用.png

已经连成功的这个窗口留着,保留窗口映射状态,再新建个终端窗口。

2、登录到本机root账号下的10010端口:
ssh -p 10010 root@localhost
ssh root@127.0.0.1 -p 10010
localhost是一个域名,指向的IP地址是127.0.0.1,本机虚拟网卡的IP地址

登录.png

登录的时候我还没做免密操作,所以还需要输入密码:alpine。

usbmuxd会将Mac本地10010端口的TCP协议数据,通过USB连接转发到iPhone的22端口

> 3、通过USB远程拷贝

注意:这里虽然是通过USB传东西,这里的登录还是SSH登录,服务端认证、客户端认证、安全传输,其实一直都在的。只是数据先发到10010端口,然后再发到22端口,有这么个转发的过程而已,只是换了一种传递数据的方式而已。加密的过程如公钥私钥都还在的,之前的途径是WIFI,现在是USB。

sh

如上,每次都要做两步操作:
1、端口映射,
2、登录到本机的10010端口

优化:将经常执行的一系列终端命令行放到sh脚本文件中(shell)。

操作

用vim新建sh文件:
vim usb.sh 【这样写是把usb.sh放在根目录,文件中的是端口映射的内容】

键入内容:python 路径 -t 22:mac端口

常用的命令行

esc键——>shift+:——>wq

在这个位置:


image.png

如何查看那一串命令:
cat usb.sh

如何执行脚本呢?
有三种方式:sh、bash、source。


image.png

这些都是linux的知识了。

三种方式有什么区别呢?

image.png image.png

下面再来新建第二个sh文件,登录的sh文件:

vim login.sh

键入内容ssh -p 10010 root@localhost

cat login.sh ,查看脚本内容。
sh login.sh,执行脚本内容。

为什么两个脚本不能弄成一个呢?


image.png

因为执行完端口映射后,就会一直卡在那里,不会执行下一行命令了。按control+c终止连接之后,才执行第二行登录命令。


有个问题,iPhone终端不能输入中文


问题演示

解决办法:
1、iPhone终端没有vim,先在cydia中下载安装个Vi IMproved,方便在终端中使用vim新建文件。(注意,iPhone端本来是没有vim的,因为越狱才能安装上)

2、在iPhone端的~文件夹下vim新建.inputrc文件,并输入
set convert-meta off
set output-meta on
set meta-flag on
set input-meta on
这些内容,保存。

3、验证:在iPhone端vim新建一个中文名的txt:哈哈.txt,发现可以用中文名了。


image.png 在iPhone中新建的两个文件.png

但是命令行工具上文件名是?乱符号这个还没解决掉,可能是越狱的关系,本来iPhone上是没vim的。但是iPhone上的文件名可以显示中文。

上一篇下一篇

猜你喜欢

热点阅读