43

iOS逆向-day2:逆向环境搭建:SSH 安全连接

 5 years ago
source link: http://www.cocoachina.com/ios/20190412/26792.html?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

iOS逆向-day1:逆向内容的简介与越狱环境搭建

1、SSH与OpenSSH简介

2、Mac远程登录到iPhone

3、iOS下的2个常用账户:root、mobile

4、SSL和OpenSSL

5、建立安全连接与服务器公钥的保存和变更

6、SSH-客户端认证

7、SSH-远程拷贝-文件权限

8、22端口

9、通过USB进行SSH登录

10、usbmuxd-使用

11、利用sh脚本设置快捷方式

12、Mac连接iPhone终端的中文乱码问题

一、SSH与OpenSSH简介

1.1、SSH简介

  • SSH 是 Secure Shell 的缩写,意为“安全外壳协议”,是一种可以为远程登录提供安全保障的协议

  • 使用SSH,可以把所有传输的数据进行加密,“中间人”攻击方式就不可能实现,能防止DNS欺骗和IP欺骗

zInEj2F.png!web

提示:sniffer 是嗅探器以及抓数据包软件

1.2、OpenSSH简介

  • OpenSSH 是 SSH 协议的免费开源实现

  • 可以通过OpenSSH的方式让Mac远程登录到iPhone

二、Mac远程登录到iPhone

2.1、Mac远程登录到iPhone的简介

我们经常在Mac的终端上,通过敲一些命令行来完成一些操作

fuiMfaa.png!web

Mac的终端

  • iOS和Mac OS X都是基于Darwin(苹果的一个基于Unix的开源系统内核),所以iOS中同样支持终端的命令行操作(在逆向工程中,我们经常会通过命令行来操纵iPhone)

  • 为了能够让Mac终端中的命令行能作用在iPhone上,我们得让Mac和iPhone建立连接

qqYjuqe.png!web

Mac终端中的命令行能作用在iPhone图

2.2、Mac使用OpenSSH远程登录iphone的前提

在iPhone上通过Cydia安装OpenSSH工具(软件源 http://apt.saurik.com

3mYbQ3e.png!web

OpenSSH

OpenSSH的具体使用步骤可以查看Description中的描述

jYZ3qmr.png!web

OpenSSH的具体使用步骤可以查看Description中的描述

2.3、使用OpenSSH远程登录 的 使用步骤 - (Mac充当客户端,iPhone充当服务器)

  • <1>、SSH是通过TCP协议通信,所以要确保Mac和iPhone在同一局域网下,比如连接着同一个WiFi

  • <2>、在Mac的终端输入ssh 账户名@服务器主机地址,如下是以root权限登录的,其中的 192.168.3.73是手机的IP地址,这里的服务器是手机

ssh [email protected]

手机的IP地址的查看方式,要和电脑在同一个WiFi下

7FrURzr.png!web

手机的IP地址的查看方式

<3>、初始密码 alpine

Zbu6ZrM.png!web

初始密码 `alpine`

fEz67rF.png!web

登录成功

EJfaeqz.png!web

登录成功过后的测试

  • <4>、登录成功后就可以使用终端命令行操作iPhone,如:退出登录命令是exit,也可以使用快捷键:control+d

三、iOS下的2个常用账户:root、mobile(初始登录密码都是alpine)

rqi6zej.png!web

root、mobile

3.1、root:最高权限账户,$HOME是 /var/root

提示:$HOME是 登录用户的路径,查看方式如下

NNRb2yv.png!web

$HOME是 登录用户的路径,查看方式如下

3.2、mobile:普通权限账户,只能操作一些普通文件,不能操作系统级别的文件,$HOME是 /var/mobile

3.3、修改一下root和mobile用户的登录密码(登录root账户后,分别通过passwd、passwd mobile完成),使用root用户登录,登录成功后命令如下

a6Vf2u7.png!web

修改一下root和mobile用户的登录密码

四、SSL和OpenSSL

分析:我们在安装 OpenSSH的时候可以看到先安装的是OpenSSL

MV36fqq.png!web

安装 OpenSSH的时候可以看到先安装的是OpenSSL

4.1、SSL:Secure Sockets Layer的缩写,是为网络通信提供安全及数据完整性的一种安全协议,在传输层对网络连接进行加密

4.2、OpenSSL:SSL的开源实现;绝大部分HTTPS请求等价于:HTTP + OpenSSL

提示1:OpenSSH的加密就是通过OpenSSL完成的

6Bru6nJ.png!web

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

五、建立安全连接

5.1、SSH的版本

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

查看SSH版本(查看配置文件的Protocol字段)

  • 客户端:/etc/ssh/ssh_config

  • 服务端:/etc/ssh/sshd_config

  • 举例:以电脑作为客户端与越狱手机作为服务器查看各自对应的SSH版本

    • 电脑作为客户端查看SSH版本

      Ff2ARvY.png!web

      电脑作为客户端查看SSH版本

      fiM7biM.png!web

      可以看到SSH的版本是2:Protocol 2

    • 越狱手机作为服务器端查看SSH版本

ry2Ira2.png!web

越狱手机作为客户端查看SSH版本

5.2、SSH的通信过程可以分为3大主要阶段:建立安全连接、客户端认证、数据传输

5.3、建立安全连接

<1>、在建立安全连接过程中,服务器会提供自己的身份证明(也就是公钥)

zAJRRrq.png!web

建立安全连接

  • 提示:~/.ssh/known_hosts路径下存储 服务器的公钥等其他的信息,在第一次存储后,第二次客户端再登录服务器就不再需要验证身份

  • 如果客户端并无服务器端的公钥信息,就会询问是否连接此服务器,如下图:我们在第一次登录的时候一般都会提示

JZrY3i6.png!web

没有保存公钥的提示

<2>、解释下:在建立安全链接的过程中,~/.ssh/known_hosts所保存的服务器公钥以及其他信息,也就是上图中的:字符串 (把服务器发过来的公钥利用加密计算出来的一个字符串)

<3>、服务器身份信息变更(也就是同一个服务器,但是服务器的公钥发生了变化,也可以说本地的存储的公钥与服务器的不一样),解决办法:删除掉同一个 IP 的信息,下面以 IP:192.168.3.73 为例

jmyumm3.png!web

  • (1)、cd ~/.ssh

  • (2)、vim know_hosts

  • (3)、让光标停留在192.168.3.73行,按 dd 即可删除

  • (4)、esc,shift+;,wq输入回车键 保存推出;

  • (5)、再次进行连接服务器ssh [email protected]

  • (6)、重新提示要不要连接

提示:快捷方式:ssh-keygen -R 服务器IP地址,如和上面一样的效果:ssh-keygen -R 192.168.3.73

<4>、验证客户端存储的 公钥 与 服务器的公钥是否一致

fmInMvR.png!web

验证客户端存储的 公钥 与 服务器的公钥是否一致

六、SSH-客户端认证

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

第一种(我们在 五 用到的密码登录):基于密码的客户端认证(使用账号和密码即可认证)

第二种:基于密钥的客户端认证 (免密码认证,最安全的一种认证方式)

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

6.2、搭建 SSH - 基于密钥的客户端认证(也就是可以省略密码登录的过程)

2EbmyyJ.png!web

搭建 SSH - 基于密钥的客户端认证的过程

首先要在客户端生成公钥与私钥,然后把公钥传给服务器,将公钥内容追加到授权文件尾部,在登录验证的时候,服务器发送一个登录信息过来,使用私钥进行解密或者其他的操作(不仅仅是这些操作,后面都会阐述),解密成功的话进行登录

<1>、在客户端生成一对相关联的密钥(Key Pair):一个公钥(Public Key),一个私钥(Private Key)

  • ssh-keygen

  • 一路敲回车键(Enter)即可

  • OpenSSH默认生成的是RSA密钥,可以通过-t参数指定密钥类型

  • 生成的公钥:~/.ssh/id_rsa.pub

  • 生成的私钥:~/.ssh/id_rsa

IvYfqqz.png!web

公钥与私钥

<2>、把客户端的公钥内容追加到服务器的授权文件(~/.ssh/authorized_keys)尾部

  • ssh-copy-id root@服务器主机地址

  • 需要输入root用户的登录密码

  • ssh-copy-id会将客户端~/.ssh/id_rsa.pub的内容自动追加到服务器的~/.ssh/authorized_keys尾部

NZzAzeJ.png!web

把客户端的公钥内容追加到服务器的授权文件

  • 注意:由于是在~文件夹下操作,所以上述操作仅仅是解决了root用户的登录问题(不会影响mobile用户),也就是root用户再使用 ssh root@IP地址 不再需要密码,而mobile用户是需要密码的

umE363f.png!web

root用户登录不再需要密码

七、SSH-远程拷贝-文件权限(这里以上面 六 基于密钥的客户端认证的手动操作)

7.1、可以使用 ssh-copy-id 将客户端的公钥内容自动追加到服务器的授权文件尾部,也可以手动操作,复制客户端的公钥到服务器某路径

scp ~/.ssh/id_rsa.pub root@服务器主机地址:~
  • scp是secure copy的缩写,是基于SSH登录进行安全的远程文件拷贝命令,把一个文件copy到远程另外一台主机上

  • 上面的命令行将客户端的~/.ssh/id_rsa.pub拷贝到了服务器的~/.ssh/地址

具体的细节

  • SSH登录服务器:ssh root@服务器主机地址

  • 在服务器创建.ssh文件夹: mkdir .ssh

  • 追加公钥内容到授权文件尾部:cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

  • 删除公钥:rm ~/id_rsa.pub

提示: ~ 指的是用户目录,登录的是root的话就是:/var/root

7.2、如果上面的操作都做完了还是无法基于密钥的客户端认证(也可以说免密登录),那就是和权限有关的问题了,设置下下面的权限

EjqYZzJ.png!web

设置下下面的权限

chmod 755 ~
chmod 755 ~/.ssh
chmod 644 ~/.ssh/authorized_keys

八、22端口

8.1、端口:就是设备对外提供服务的窗口,每个端口都有个端口号(范围是0~65535,共2^16个)

8.2、有些端口号是保留的,已经规定了用途,比如

  • 21端口提供FTP服务

  • 80端口提供HTTP服务

  • 22端口提供SSH服务(可以查看/etc/ssh/sshd_config的Port字段)

  • 更多保留端口号

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

BRZZF3U.png!web

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

ZVZvAjq.png!web

iPhone默认是使用22端口进行SSH通信

cat /etc/ssh/sshd_config

九、通过USB进行SSH登录

9.1、使用USB进行SSH登录的原因是:在上面

我们是通过同一个WIFI的情况下进行的SSH登录,在终端操作的时候可以感觉到输入内容很慢,这个时候我们可以可以使用USB进行SSH登录

9.2、默认情况下,由于SSH走的是TCP协议,Mac是通过网络连接的方式SSH登录到iPhone,要求iPhone连接WiFi

UzM3auE.png!web

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

9.3、为了加快传输速度,也可以通过USB连接的方式进行SSH登录,Mac上有个服务程序 usbmuxd( 它会开机自动启动 ),可以将Mac的数据通过USB传输到iPhone

usbmuxd的路径在:/System/Library/PrivateFrameworks/MobileDevice.framework/Resources/usbmuxd

2MjYriR.png!web

usbmuxd的路径

3QfmQ3Z.png!web

通过USB连接的方式进行SSH登录

十、usbmuxd 的使用

10.1、下载 usbmuxd 工具包(下载v1.0.8版本,主要用到里面的2个python脚本:tcprelay.py与usbmux.py)

QN7z22A.png!web

tcprelay.py 与 usbmux.py

10.2、将iPhone的 22 端口(SSH端口)映射到Mac本地的 10010 端口(不一定非是10010端口,只要不是 保留端口 就好),做完下面的操作我们会发现再终端操作不会卡了

7n2iqui.png!web

提示:映射窗口不要关闭,在SSH登录的时候 新开窗口操作,保持至少两个窗口,因为可能 连接 多个手机的 22 端口

  • 端口映射完毕后,以后如果想跟iPhone的22端口通信,直接跟Mac本地的10010端口通信就可以了

ssh root@localhost -p 10010
ssh [email protected] -p 10010
  • localhost 是一个域名,指向的IP地址是 127.0.0.1,本机虚拟网卡的IP地址

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

10.3、远程拷贝文件也可以直接跟Mac本地的10010端口通信

scp -P 10010 ~/Desktop/1.txt root@localhost:~/test

将Mac上的~/Desktop/1.txt文件,拷贝到iPhone上的~/test路径

QfAbuqU.png!web

scp的端口号参数是大写的 -P

提示:注意:scp的端口号参数是大写的 -P

十一、利用 sh 脚本设置快捷方式

11.1、我们可以将经常执行的一系列终端命令行放到sh脚本文件中(shell),然后执行脚本文件,举例如下

<1>、usb.sh脚本的举例:我们在使用 USB连接用户的iPhone的时候,每次都要执行 10.1中 tcprelay.py 这个脚本,我们可以把 tcprelay.py 存到一个固定位置,比如说我把它存在了桌面的 Jailbreak 文件夹,路径就成为了 /Users/wangchong/Desktop/Jailbreak/tcprelay.py,我们在 将iPhone的 22 端口(SSH端口)映射到Mac本地的 10010 端口就变成为如下的命令

python /Users/wangchong/Desktop/Jailbreak/tcprelay.py

但是我们每次再映射的时候都要执行上面的命令,为了解决每次的麻烦,我们可以使用 sh脚本,比如我在用户目录下创建一个 usb.sh 脚本文件,把上面的路径复制进去,如下

qQBBbiN.png!web

usb.sh 脚本文件

当我们再次执行映射的时候可以直接如下操作

sh usb.sh

muiAnun.png!web

执行脚本

<2>、login.sh脚本的举例:同样创建一个  login.sh 文件里面写入要执行登录的脚本文件:ssh root@localhost -p 10010,执行脚本如下

sh login.sh

<3>、总结:我们在每次映射和登录iPhone连接的时候可以执行下面的两个脚本命令,但是要是在两个窗口,先映射后登录

sh usb.sh
sh login.sh

11.2、扩展:我们在执行脚本的时候不仅仅使用 sh,还有bash、source命令来执行sh脚本文件

sh、bash

  • 当前shell环境会启动一个子进程来执行脚本文件,执行后返回到父进程的shell环境

  • 执行cd时,在子进程中会进入到cd的目录,但是在父进程中环境并没有改变,也就是说目录没有改变

source

  • 在当前的shell环境下执行脚本文件

  • 执行cd后会跳转到cd的目录

  • source 可以用一个点"."来替代,比如". test.sh"

11.3、source 与 sh、bash的区别

source执行的脚本如果是执行 cd 路径的时候,执行后 会 显示路径

uqyeqmR.png!web

sh、bash 执行的脚本如果是执行 cd 路径的时候,执行后 不会 显示路径

MfMz2aB.png!web

十二、Mac连接iPhone终端的中文乱码问题

12.1、默认情况下,iOS终端不支持中文输入和显示,解决方案:新建一个~/.inputrc文件,文件内容是

不将中文字符转化为转义序列

set convert-meta off 
允许向终端输出中文
set output-meta on
允许向终端输入中文
set meta-flag on 
set input-meta on

fIZjAve.png!web

提示:如果是想在终端编辑文件内容,可以通过Cydia安装一个vim(软件源 http://apt.saurik.com

eYJBJrV.png!web

vim软件

12.2、做完上面操作后的效果如下

BJBnMr7.png!web

作者:IIronMan

链接:https://www.jianshu.com/p/fd4bdc42a61b


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK