基于 USB/IP 的USB劫持实验


环境:服务端 usbipd (Linux,用的是 PVE),客户端 usbip(Linux,用的是 ubuntu 22.04虚拟机),测试设备 SanDisk U盘(一开始用的是海康的 R36C,遇到了 UAS 的问题,后边说),中间机 mac + mitmproxy。

思路:

  1. 服务端 usbipd 起服务
  2. 服务端插上 U 盘,usbip bind
  3. 中间机器开 mitmproxy 反向代理,加载插件
  4. 客户端连中间机器的端口
  5. 客户端挂载分区,写入文件
  6. 验证写入文件是否被劫持

可能用到的命令

客户端

usbip --tcp-port 2021 list -r 192.168.11.33
usbip --tcp-port 2021 attach -r 192.168.11.33 -b 6-2.1
lsblk
mount -o rw,noatime,noauto,sync /dev/sdb1 /mnt/
echo helloabcdefghijk > /mnt/1.txt
umount /mnt
usbip detach -p 8

中间机器

mitmdump --mode reverse:tcp://192.168.11.5:3240@2021 -s usbip.py 

usbip.py 只做了一件事情,就是把 abcdefg 换成 xyzabcd。

结果:正常操作下来,从服务端挂载 U 盘后

root@wpve:~# cat /mnt/1.txt 
helloxyzabcdhijk

证明写入的数据确实是被修改过的。

但是客户机在写入后立即读,读到的还是原始尝试写入的内容,这个缓存不知道怎么关,但是不重要了。

UAS 的问题,硬盘挂载上dmesg报错

[48408.638543] usb 14-1: USB controller vhci_hcd.0 does not support streams, which are required by the UAS driver.
[48408.638550] usb 14-1: Please try an other USB controller if you wish to use UAS.
[48408.638553] usb-storage 14-1:1.0: USB Mass Storage device detected
[48408.639125] scsi host2: usb-storage 14-1:1.0

找到了一篇文章https://leo.leung.xyz/wiki/How_to_disable_USB_Attached_Storage_(UAS)

按说明在客户端配置了 quirks,不报错,但是没有 /dev下的 sdx,手动触发 udev

udevadm trigger -v

但是看不到分区,所以换了小U盘。


Leave a Reply

Your email address will not be published. Required fields are marked *