跳转ESP,跳转!Hacktivity 2018徽章入门指南

本文详细介绍了如何连接和与Hacktivity 2018徽章进行交互,包括在不同操作系统下的串口通信设置、获取root shell的方法以及硬件跳线调整技巧。

Jump ESP, jump!: Hacktivity 2018徽章 - 初学者快速入门指南

您可能因为以下原因阅读这篇博客文章:

  • 您是Hacktivity的忠实粉丝
  • 大约一年前购买了这款徽章
  • 对黑客会议徽章破解感兴趣

或者以上所有原因。无论原因如何,本指南对于那些从未有过这些小型设备实际经验的人来说应该会有所帮助。

但首先,以下是破解徽章所需物品的清单:

  • 一台带有USB端口的计算机,运行macOS、Linux或Windows。您也可以使用其他操作系统,但本指南涵盖这些系统
  • USB mini线缆,用于将徽章连接到计算机
  • 2018年的Hacktivity徽章

默认情况下,您的徽章外观如下。

开始使用

幸运的是,最初的步骤不需要任何焊接技能。只需将USB mini端口连接到徽章左下角的接口,将USB线缆的另一端连接到计算机,几秒钟内您将看到徽章上的灯光闪烁。到目前为止一切顺利。

现在,根据您使用的操作系统,您应该在这里选择您的命运。

Linux

关于新设备连接的最佳信息来源是:

1
# dmesg

输出的尾部应该类似于:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
[267300.206966] usb 2-2.2: new full-speed USB device number 14 using uhci_hcd
[267300.326484] usb 2-2.2: New USB device found, idVendor=0403, idProduct=6001
[267300.326486] usb 2-2.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[267300.326487] usb 2-2.2: Product: FT232R USB UART
[267300.326488] usb 2-2.2: Manufacturer: FTDI
[267300.326489] usb 2-2.2: SerialNumber: AC01U4XN
[267300.558684] usbcore: registered new interface driver usbserial_generic
[267300.558692] usbserial: USB Serial support registered for generic
[267300.639673] usbcore: registered new interface driver ftdi_sio
[267300.639684] usbserial: USB Serial support registered for FTDI USB Serial Device
[267300.639713] ftdi_sio 2-2.2:1.0: FTDI USB Serial Device converter detected
[267300.639741] usb 2-2.2: Detected FT232RL
[267300.643235] usb 2-2.2: FTDI USB Serial Device converter now attached to ttyUSB0

Dmesg对我们非常友好,因为它甚至通知我们设备现在连接到ttyUSB0。

从现在开始,连接到设备与macOS部分完全相同,因此请参阅下面的“Linux用户,从这里开始阅读”部分。

macOS

您可以在终端中输入多个命令来了解您正在查看的内容。一个命令是:

1
# ioreg -p IOUSB -w0 -l

使用此命令,您应该获得类似于以下的输出:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
+-o FT232R USB UART@14100000  <class AppleUSBDevice, id 0x100005465, registered, matched, active, busy 0 (712 ms), retain 20>
    |   {
    |     "sessionID" = 71217335583342
    |     "iManufacturer" = 1
    |     "bNumConfigurations" = 1
    |     "idProduct" = 24577
    |     "bcdDevice" = 1536
    |     "Bus Power Available" = 250
    |     "USB Address" = 2
    |     "bMaxPacketSize0" = 8
    |     "iProduct" = 2
    |     "iSerialNumber" = 3
    |     "bDeviceClass" = 0
    |     "Built-In" = No
    |     "locationID" = 336592896
    |     "bDeviceSubClass" = 0
    |     "bcdUSB" = 512
    |     "USB Product Name" = "FT232R USB UART"
    |     "PortNum" = 1
    |     "non-removable" = "no"
    |     "IOCFPlugInTypes" = {"9dc7b780-9ec0-11d4-a54f-000a27052861"="IOUSBFamily.kext/Contents/PlugIns/IOUSBLib.bundle"}
    |     "bDeviceProtocol" = 0
    |     "IOUserClientClass" = "IOUSBDeviceUserClientV2"
    |     "IOPowerManagement" = {"DevicePowerState"=0,"CurrentPowerState"=3,"CapabilityFlags"=65536,"MaxPowerState"=4,"DriverPowerState"=3}
    |     "kUSBCurrentConfiguration" = 1
    |     "Device Speed" = 1
    |     "USB Vendor Name" = "FTDI"
    |     "idVendor" = 1027
    |     "IOGeneralInterest" = "IOCommand is not serializable"
    |     "USB Serial Number" = "AC01U4XN"
    |     "IOClassNameOverride" = "IOUSBDevice"
    |   }

您获得的最重要信息是USB序列号 - 在我的情况下是AC01U4XN。 获取此信息的另一种方法是:

1
# system_profiler SPUSBDataType

这将返回类似于以下内容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
FT232R USB UART:

          Product ID: 0x6001
          Vendor ID: 0x0403  (Future Technology Devices International Limited)
          Version: 6.00
          Serial Number: AC01U4XN
          Speed: Up to 12 Mb/sec
          Manufacturer: FTDI
          Location ID: 0x14100000 / 2
          Current Available (mA): 500
          Current Required (mA): 90
          Extra Operating Current (mA): 0

您获得的序列号是相同的。

您在这里试图实现的是连接到设备,但为了连接到它,您必须知道设备在/dev文件夹中的映射位置。一个快速而简单的解决方案是在设备断开连接时列出/dev下的所有设备,然后在设备连接时再次列出,并比较输出。例如,以下命令应该可以完成这项工作:

1
2
3
ls -lha /dev/tty* > plugged.txt
ls -lha /dev/tty* > np.txt
vimdiff plugged.txt np.txt

结果应该是显而易见的,在macOS的情况下,/dev/tty.usbserial-AC01U4XN是新设备。在Linux的情况下,它是/dev/ttyUSB0。

Linux用户,从这里开始阅读。macOS用户,请继续阅读

现在您可以使用内置的screen命令或minicom从徽章获取数据。通常,您需要三条信息才能与徽章通信。/dev上的路径(您已经获得了)、波特率速度和异步配置参数。您可以猜测速度,也可以为特定设备在Google上搜索。标准波特率包括110、300、600、1200、2400、4800、9600、14400、19200、38400、57600、115200、128000和256000位/秒。我通常发现1200、9600和115200是常见的选择,但这只是我的经验。

关于异步配置参数,默认是使用8位,没有奇偶校验位,使用1个停止位。其简短缩写是8n1。在下一个示例中,您将使用screen命令。默认情况下,它使用8n1,但被称为cs8以混淆初学者。

如果您输入:

1
# screen /dev/tty.usbserial-AC01U4XN 9600

1
# screen /dev/ttyUSB0 9600

并等待几分钟,没有任何反应,这是因为徽章已经尝试通过USB端口通信,但没有人监听。将徽章从计算机断开连接,重新连接,然后输入上述screen命令进行连接。如果您足够快,您可以看到琥珀色LED停止闪烁,并且您的screen命令会收到一些有趣的信息。足够快的意思大约是90秒,因为设备需要1.5分钟来启动操作系统和CTF应用程序。

Windows

当您将设备连接到Windows时,将会看到一个弹出窗口。

只需点击弹出窗口,您将看到设备连接到的COM端口号:

在这种情况下,它连接到COM3。因此,让我们启动我们最喜欢的putty.exe,选择Serial,选择COM3,添加速度9600,然后您就可以开始了!

如果您看不到任何内容,可以查看macOS部分的末尾。时机就是一切。

CTF

欢迎来到Hacktivity 2018徽章挑战!

这个挑战包括几个任务,每个任务有一个或多个难度级别。它们都以某种方式与硬件逆向工程相关,并且没有竞争,整个目的是学习东西。

注意:我们建议在终端中打开本地回显! 此外,请随时在Hackcenter寻求提示!

在下面选择您的命运:

  1. 视觉硬件调试
  2. 逆向工程
  3. RF黑客
  4. 加密保护

输入您感兴趣的挑战编号并按[

太好了,现在您准备好破解这个了!如果您在控制screen命令时迷失了方向,请访问https://linuxize.com/post/how-to-use-linux-screen/。

我不会在这里透露任何挑战解决方案的乐趣。找到这些解决方案仍然是您的任务。

但这里有一个技巧。您可以在设备上获得root shell。而且非常简单。只需小心地从徽章上取下Omega屏蔽罩。现在您看到两个跳线;默认情况下,这些跳线连接在一起作为UART1。如下所示。

但是,如果您将这些跳线移动到UART0会发生什么?猜猜看,您可以获得root shell!这就是我称之为硬件级别的权限提升 :) 但首先,让我们将Omega屏蔽罩重新连接回去。另外,为了增加乐趣,这个新接口以115200波特率通信,因此您应该将screen参数更改为115200。此外,新接口在/dev下有不同的ID,但我相信您从现在起可以弄清楚。

如果您在启动时连接到设备,您可以看到许多关于设备的令人兴奋的调试信息。启动后,您只需获得一个root提示符。哇哦!

但是您可以用这个root访问权限做什么?嗯,对于初学者来说,如何运行:

1
# strings hello | less

从现在开始,您需要自己破解这个徽章。祝 hacking 愉快。

非常感谢Attila Marosi-Bauer和Hackerspace Budapest开发了这个徽章和比赛。

PS:如果您想使用徽章的无线电功能,请参见下面如何焊接部件。默认情况下,您可以在GPIO19上处理低速射频信号。但对于更高的传输速度,您应该将RF模块的DATA OUT引脚与RX1空闲引脚连接。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计