iOS逆向02 -- SSH与SSL

Mac远程登录iPhone

  • 我们经常在Mac终端上,通过敲一些命令来完成一些操作;
  • iOS和Mac OS X都是基于Darwin(苹果的一个基于Unix的开源系统内核),所以iOS中同样支持终端命令操作;
  • 在逆向工程中,我们经常会通过命令行来操纵iPhone;
  • 为了能够让Mac终端命令能作用在iPhone上,我们需要让Mac和iPhone之间建立连接;- - 通过Mac远程登录到iPhone的方式建立连接;

SSH与OpenSSH

  • SSH是Secure Shell的缩写,意为"安全外壳协议",是一种可以为远程登录提供安全保障的协议;
  • 使用SSH,可以把所有传输的数据进行加密,"中间人"攻击方式就不可能实现,能防止DNS欺骗和IP欺骗;
  • OpenSSH是SHH协议的免费开源实现,可以通过OpenSSH的方式让Mac远程登录到iPhone;

使用OpenSSH远程登录

  • 在iPhone上通过Cydia安装OpenSSH工具(软件源:http://apt/saurik.com)
  • OpenSSH的具体使用步骤可以查看Description中的描述;
  • SSH是通过TCP协议通信,所以要确保Mac和iPhone在同一局域网下,比如连接者同一个Wi-Fi;
  • 登录iPhone的root账户:在Mac终端输入ssh root@服务器主机地址
  • 例如ssh [email protected](这里的服务器是手机) 初始密码为:alpine
Snip20210607_80.png
  • 登录成功后可以使用终端命令来操作iPhone;

终端中输入以下命令,查看文件系统与Mac上的iFunBox查看的文件系统进行比较如下所示:

Snip20210607_81.png
Snip20210607_82.png
  • 发现文件系统是相同的,说明我们通过OpenSSH,让Mac成功登录到iPhone,两者之间建立了连接。
  • exit 是退出登录,操作结果如下:
Snip20210607_83.png

root 和 mobile账户

  • iOS下有两个常用账户:root和mobile
  • root账户:最高权限账户,$HOME是/var/root
  • 登录root账户:ssh root@服务器主机地址
  • mobile账户:普通权限账户,只能操作一些普通文件,不能操作系统级别的文件,$HOME是/var/mobile
  • 登录mobile账户:ssh mobile@服务器主机地址
  • root和mobile账户的初始登录密码都是alpine
  • 最好修改一下root和mobile用户的登录密码,登录root账户后,通过passwd修改;登录mobile账户,通过passwd mobile修改;
Snip20210607_84.png
  • 可以看到root账号级别的显示#,mobile账号级别的显示$;

SSL与OpenSSL

  • SSL是Secure Socket Layer的缩写,是为网络通信提供安全及数据完整性的一种安全协议,在传输层对网络连接进行加密;
  • OpenSSL是SSL的开源实现,绝大部份HTTPS网络请求等价于:HTTP + OpenSSL
  • OpenSSH的加密就是通过OpenSSL完成的;

SSH的版本

  • SSH协议一共有两个版本,分别为SSH-1与SSH-2;
  • 现在用的比较多的是SSH-2,客户端与服务端版本要保持一致才能相互通信;

通过WI-FI进行SSH登录

  • 必须保证Mac与iPhone在相同的网络环境下,即连接同一个WI-FI网络


    SSH登录.png

其SSH的通信过程可以分为3大阶段:
第一步:建立安全连接

  • 在建立安全连接过程中,服务器会提供自己的身份证明;
  • 如果客户端并无服务端的公钥,就会询问是否连接此服务器;
Snip20210607_85.png
SSH.png
  • ~/.ssh/known.hosts:是存储服务端公钥信息的文件;
  • 在Mac上~:表示主路径相当于根路径,终端刚打开时的路径,等价于/Users/用户名
  • 在建立连接过程中,可能会遇到以下的错误信息:服务器的身份信息发生了变更;如果确定要连接此服务器,删除之前服务器的公钥信息即可;或者直接打开known.hosts文件删除服务器的公钥信息;

第二步:客户端认证
SSH-2提供了两种常用的客户端认证方式:
第一种:基于密码的客户端认证

  • 使用账号和密码即可认证

第二种:基于密钥的客户端认证

  • 免密码认证,最安全的一种认证方式;
  • SSH-2默认会优先尝试密钥认证,如果认证失败,才会尝试密码认证;
  • 基于密钥的客户端的认证原理如下:
ssh原理.png

第一种方案:

  • 在客户端生成一对相关联的密钥:一个公钥(Public Key),一个私钥(Private Key)
  • 终端命令为:ssh -keygen,一路敲回车即可;
  • OpenSSH默认生成的是rsa密钥,可以通过-t参数指定密钥的类型;
  • 生成的公钥:~/.ssh/id_rsa.pub
  • 生成的私钥:~/.ssh/id_rsa
  • 把客户端的公钥追加到服务端的授权文件(~/.ssh/authroized_keys)尾部,终端命令为:ssh copy id root@服务端主机地址,需要输入root账户的登录密码;

第二种方案:

  • 一对密钥的生成同上;
  • 复制客户端的公钥到服务器的某路径;终端命令为:scp ~/.ssh/id.rsa.pub root@服务器主机地址:~指定路径
  • scp是Secure Copy的缩写,是基于SSH登录进行安全的远程文件拷贝命令,把一个文件copy到远程另外一台主机上;

上述两种方案均可实现免密码登录。
可能会用到的终端命令:

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

第三步:数据传输

  • 现在我们来实现将越狱iPhone中的文件,拷贝到Mac电脑上;
  • 首先iPhone上的文件目标为:/tmp/fseventsd-uuid,如下所示:
Snip20210618_44.png
  • Mac终端环境执行:scp [email protected]:/tmp/fseventsd-uuid ~/Desktop/,其中172.20.10.2是iPhone的主机地址,通过查看Wi-Fi网络获得;
Snip20210618_45.png
  • 执行完成之后,查看Mac的桌面文件系统,
Snip20210618_46.png
  • 实现了文件传递:iPhone --> Mac

通过USB进行SSH登录

为了加快传输速度,也可以通过USB连接的方式进行SSH登录,在Mac上有个服务程序usbmuxd(它会开机自动启动),可以将Mac的数据通过USB传输到iPhone,其路径如下:/System/Library/PrivateFrameworks/MobileDevice.framework/Resources/usbmuxd

Snip20210607_86.png

原理图如下:

SSH_USB.png

端口

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

  • 21端口提供FTP服务
  • 80端口提供HTTP服务
  • 22端口提供SSH服务(查看命令:etc/ssh/sshd_config)
  • iPhone默认是使用22端口进行SSH通信,采用的是TCP协议

usbmuxd的使用

  • 下载usbmuxd工具包(1.0.8版本,主要用到里面的一个python脚本:tcprelay.py),下载地址为:https://cgit.sukimashita.com/usbmuxd.git/snapshot/usbmuxd-1.0.8.tar.gz,解压之后删除无用的文件,最后的文件预览如下:
Snip20210608_89.png
  • 终端命令,cd usbmuxb 文件路径下,执行python tcprelay.py -t 22:10010,即将iPhone的22端口(SSH端口)映射到Mac本地的10010端口;
Snip20210608_90.png
  • 端口映射完毕后,以后如果想跟iPhone的22端口通信,直接跟Mac本地的10010端口通信就可以了;然后command+T 新建一个命令行窗口,SSH登录到Mac本地的10010窗口,命令行为:ssh root@localhost -p 10010,密码为alpine
Snip20210608_91.png
  • usbmuxd会将Mac本地10010端口的TCP协议数据,通过USB连接转发到iPhone的22端口;
  • 远程拷贝文件也可以直接跟Mac本地的10010端口通信,命令行如下:scp -P 10010 ~/.ssh/id_rsa root@localhost:~ 即将Mac端的id.rsa.pub公钥文件拷贝到iPhone的主文件夹下;
    Mac端的id.rsa.pub公钥文件,如下所示:
Snip20210618_43.png
  • 终端执行命令:scp -P 10010 ~/.ssh/id.rsa root@localhost:~,注意是在Mac的终端环境下执行,如下所示:
Snip20210618_41.png
  • 打开iPhone的主文件夹,如下所示:
Snip20210618_40.png
  • 实现了文件传递:Mac --> iPhone

sh脚本文件

我们可以将经常执行的一些列终端命令行放到sh脚本文件中(shell),然后执行脚本文件;制作脚本的相关命令如下:

  • 在当前主文件路径下~ 执行vim usb.sh:创建编辑usb.sh文件,进入编辑界面;
  • 按下i键,现在可以往usb.sh文件中添加内容了,添加内容为:python /Users/liyanyan33/Desktop/usbmuxd/usbmuxd/tcprelay.py -t 22:10010
  • 按下Esc键退出,然后按下Shift + 冒号 组合键,最后输入wq 回车,保存退出文件编辑界面;
  • ls -l:可以预览当前文件夹下的所有文件,看是否有usb.sh文件
  • 如果有usb.sh文件,输入cat usb.sh可查看文件中的内容;

脚本文件的执行命令有如下几种:

  • sh usb.sh
  • bash usb.sh
  • source usb.sh
  • 可以按Ctrl + C 组合键退出当前的状态
  • sh与bash脚本执行命令会在当前shell环境启动一个子进程来执行脚本文件,执行后返回到父进程的shell环境,执行cd时,在子进程中会进入到cd的目录,但是在父进程中环境并没有改变,也就是说目录没有改变;
  • source脚本命令是在当前的shell环境下执行脚本文件;

上面进行端口映射,创建了一个usb.sh脚本文件,下面SSH登录到Mac本地的10010窗口,也创建一个login.sh脚本,其步骤与上面的相同,脚本内容为ssh root@localhost -p 10010,以后的端口映射与登录就直接执行usb.shlogin.sh两个脚本文件即可;

  • 必须保证手机是越狱的状态,否则会出现SSH登陆报错的情况,如下图所示:
Snip20210623_25.png

iOS终端的中文乱码问题

  • 默认情况下,iOS终端不支持中文输入和显示的;
  • 解决方案:新建一个~/.inputrc文件,文件内容为:
  • set convert-mea off:不将中文字符转化为转义字符
  • set output-mea on:允许向终端输出中文
  • set mea-flag on:允许向终端输入中文
  • set input-mea on:允许向终端输入中文
  • 如果想在终端编辑文件内容,可以通过Cydia安装一个vim(软件源:http://apt.saurik.com)

你可能感兴趣的:(iOS逆向02 -- SSH与SSL)