Transcript
PQI Air Pen HackKenichiroMATOHARA(@matoken)
http://matoken.org
鹿児島Linux勉強会2017.04(20170408)
サンエールかごしま 小研修室3
@matoken
KenichiroMATOHARA( @matoken )PCUNIX/OSS, OpenStreetMap, 電子工作, 自転車……
altanativeが好き,多様性は正義
@matoken
PQI Air Pen Hack
@matoken
PQI Air Pen有線LANを無線LANにしてくれたりmicroSDをNAS的に使ったり
バッテリ内蔵で1時間くらい単体動作可能中はLinuxで出来ているftp/telnetが空いていていじくれるNTT XStoreで送料込み500円だった!
「PQI Air Pen」Linux搭載でtelnetできるワイヤレスアクセスポイントが500円
今はAmazonとかで1kくらい http://amzn.to/2ofxKxk
@matoken
主な使い方有線LANを繋いで電源を入れると無線LANのアクセスポイントになるmicroSDを接続しているとhttp/ftpでアクセスできるNASになる
電源Off状態でPCとUSB接続するとmicroSDリーダーになる
@matoken
逸般的な使い方ftp/telnetで使うbusyboxを差し替えて使いやすくするボタンを利用してアプリケーションを制御
LEDを利用して状況をお知らせchrootでDebianのユーザランドを利用する:
@matoken
ちょっと叩いてみるdhcpの提供されているネットワークケーブルを繋いで電源をれてちょっと叩いてみる.
まずはdhcp poolのipから探してみる.
$ sudo nmap sP 192.168.2.200Starting Nmap 7.40 ( https://nmap.org ) at 20170308 11: :Nmap scan report for 192.168.2.214Host is up (0.0012s latency).MAC Address: 80:DB:31:01:A4:B8 (Power Quotient International) :
192.168.2.214でした.
@matoken
ポートスキャンしてみる
$ nmap A 192.168.2.214
Starting Nmap 7.40 ( https://nmap.org ) at 20170308 11:Nmap scan report for 192.168.2.214Host is up (0.037s latency).Not shown: 995 closed portsPORT STATE SERVICE VERSION21/tcp open ftp vsftpd 2.0.723/tcp open telnet BusyBox telnetd 1.053/tcp open domain dnsmasq 2.52| dnsnsid:|_ bind.version: dnsmasq2.5280/tcp open http Brivo EdgeReader access control http|_httptitle: PQI Air Pen8080/tcp open http Mongoose httpd 3.7 (directory listing)|_httptitle: Index of /Service Info: OS: Unix; Device: securitymisc
Service detection performed. Please report any incorrect results Nmap done: 1 IP address (1 host up) scanned in 37.14 seconds
@matoken
$ nmap P 065536 192.168.2.214
Starting Nmap 7.40 ( https://nmap.org ) at 20170308 11:Nmap scan report for 192.168.2.214Host is up (0.035s latency).Not shown: 995 closed portsPORT STATE SERVICE21/tcp open ftp23/tcp open telnet53/tcp open domain80/tcp open http8080/tcp open httpproxy
Nmap done: 1 IP address (1 host up) scanned in 0.61 seconds
@matoken
アクセスしてみる80番ポートにアクセスすると認証無しで設定画面にアクセス出来る
8080番はファイルのアクセスが出来る.こちらも認証なし.
@matoken
ftp/telnetは要認証$ nc 192.168.2.214 21220 (vsFTPd 2.0.7)USER anonimouse331 Please specify the password.PASS matoken@gmail.com530 Login incorrect.
$ nc 192.168.2.214 23! (none) login:
(none) login:
@matoken
パケットキャプチャしてPQI Air PenのID/PASSを調べる
ググれば判るけどせっかくなので調べるAndroid版のアプリがあってファイルのやり取りが出来る
この通信内容を見るときっとアクセス方法が判る
@matoken
パケットキャプチャしてみる適当なWiFiの使えるPCを用意してネットワークカードをmonitormodeにしてパケットキャプチャをします.今回の環境はこんな感じ.
PC : LENOVO Thinkpad X200
NIC : Intel Corporation PRO/Wireless 5100 AGN
OS : Ubuntu 17.04 amd64
Driver : iwldvm, iwlwifi
@matoken
AQI Air Penの無線チャンネルを確認しておくここでは11
$ nmcli d wifi | egrep 'SSID|PQI'* SSID モード CHAN レート 信号 バー セキュリティ PQI Air Pen インフラ 11 54 Mbit/s 100
$ sudo /sbin/iwlist wls1 scanning | grep B 5 "PQI Air Pen" Cell 09 Address: 80:DB:31:01:A4:B7 Channel:11 Frequency:2.462 GHz (Channel Quality=70/70 Signal level= Encryption key:off ESSID:"PQI Air Pen"
@matoken
phyとネットワークインターフェイスの確認
$ /sbin/iw devphy#0 Interface wls1 ifindex 8 wdev 0x3 addr 00:22:fa:33:45:6a type managed channel 8 (2447 MHz), width: 20 MHz, center1: txpower 15.00 dBm
@matoken
デバイスがmonitor modeになれるか確認する
$ /sbin/iw phy phy0 info | lv : Supported interface modes: * IBSS * managed * monitor : software interface modes (can always be added): * monitor
※monitorになれない場合はドライバを変更すると対応できる場合もあります.
@matoken
monitor modeのインターフェイスを作る
$ sudo iw phy phy0 interface add mon0 type monitor
managed modeのインターフェイスを削除する
$ sudo iw dev wls1 del
monitor modeのインターフェイス(mon0)をUpする
$ sudo ifconfig mon0 up
monitor modeのインターフェイスの無線チャンネルを設定する
上の方で11チャンネルだったので2462に設定します.
$ sudo iw dev mon0 set freq 2462
@matoken
他のチャンネルはこんな感じ
ch1 : 2412ch2 : 2417ch3 : 2422ch4 : 2427ch5 : 2432ch6 : 2437ch7 : 2442ch8 : 2447ch9 : 2452ch10 : 2457ch11 : 2462ch12 : 2467ch13 : 2472ch14 : 2484
@matoken
確認
$ /sbin/iwconfig mon0
@matoken
パケットキャプチャをしながらスマートフォン公式アプリを使ってみる
tcpdumpでパケットをキャプチャしながらスマートフォンでPQi AirPenのネットワークに繋いだ状態で公式アプリを起動して更新などを行います.
※パケットがたくさん飛んでいるような場合はフィルタを書いたりWiresharkなどを使うと便利です.
@matoken
$ sudo tcpdump i mon0 n A s0 :01:27:10.970158 1.0 Mb/s 2462 MHz 11b 34dBm signal antenna E..Hv.@.@.........f...H.[.....;...P.P........:..k.220 (vsFTPd 2.0.7)...e :
FTP
@matoken
01:26:05.791087 2462 MHz 11n 39dBm signal antenna 3 72.2hort GI mixed IP 192.168.200.102.50396 > 192.168.200.1.2112, ack 20, win 115, options [nop,nop,TS val 35410347 ecr FTP: USER rootE..?O.@.@..z...f.............wu....s ........Q.....USER root...2 :
USER root
@matoken
01:27:11.238673 2462 MHz 11n 40dBm signal antenna 3 72.2E..@.@@.@./....f.....H.....F.[.&...s.........k....\PASS pqiap.5.Z
PASS pqiap
@matoken
FTP接続で root:pqiap のようです.
@matoken
インターフェイスを戻す
sudo iw dev mon0 delsudo iw phy phy0 interface add wls1 type managed
@matoken
ftp接続を試してみる
$ nc 192.168.200.1 21220 (vsFTPd 2.0.7)user root331 Please specify the password.pass pqiap230 Login successful.
@matoken
telnetを試してみる
$ nc 192.168.200.1 23!(none) login:
(none) login: rootrootPassword: pqiap
BusyBox v1.01 (2013.01.0308:27+0000) Builtin shell (ash)Enter 'help' for a list of builtin commands.
~ # uname auname aLinux (none) 2.6.31.AirPen_V0.1.22g5eca71a #319 Thu Jan 3 16:27:02 CST 2013 mips unknown
@matoken
ということで中に入れるようになりました :)
@matoken
~ # cat /proc/cpuinfocat /proc/cpuinfosystem type : Atheros AR9330 (Hornet)processor : 0cpu model : MIPS 24Kc V7.4BogoMIPS : 232.96wait instruction : yesmicrosecond timers : yestlb_entries : 16extra interrupt vector : yeshardware watchpoint : yes, count: 4, address/irw mask: [0x0000, 0x0048, 0x0ff8, 0x093b]ASEs implemented : mips16shadow register sets : 1core : 0VCED exceptions : not availableVCEI exceptions : not available
@matoken
~ # cat /proc/meminfocat /proc/meminfoMemTotal: 29208 kBMemFree: 19432 kBBuffers: 120 kBCached: 2628 kBSwapCached: 0 kBActive: 2536 kBInactive: 1240 kBActive(anon): 1028 kBInactive(anon): 0 kBActive(file): 1508 kBInactive(file): 1240 kBUnevictable: 0 kBMlocked: 0 kBSwapTotal: 0 kBSwapFree: 0 kBDirty: 0 kBWriteback: 0 kBAnonPages: 1052 kBMapped: 1088 kB :
※ロットによってRAMは32MB/64MBがあるらしい@matoken
~ # lsmodlsmodModule Size Used by Tainted: P umac 576480 0 Live 0xc02b6000ath_dev 207072 1 umac, Live 0xc01c3000 (P)ath_rate_atheros 20032 1 ath_dev, Live 0xc0174000 (P)ath_hal 371936 2 umac,ath_dev, Live 0xc010b000 (P)adf 9904 3 umac,ath_dev,ath_hal, Live 0xc0096000asf 6816 3 umac,ath_dev,ath_hal, Live 0xc0089000 (P)athrs_gmac 49616 0 Live 0xc0072000usb_storage 38400 0 Live 0xc003e000ehci_hcd 32928 0 Live 0xc001d000
@matoken
~ # mountmount/dev/mtdblock5 on / type squashfs (ro,relatime)/proc on /proc type proc (rw,relatime)devpts on /dev/pts type devpts (rw,relatime,mode=600)none on /tmp type ramfs (rw,relatime)/sys on /sys type sysfs (rw,relatime)udev on /dev type ramfs (rw,relatime)/dev/pts on /dev/pts type devpts (rw,relatime,mode=600)
@matoken
1 root 192 S init 2 root SW< [kthreadd] 3 root SW< [ksoftirqd/0] 4 root SW< [events/0] 5 root SW< [khelper] 8 root SW< [async/mgr] 83 root SW< [kblockd/0] 92 root SW< [khubd] 111 root SW [pdflush] 112 root SW [pdflush] 113 root SW< [kswapd0] 142 root SW< [mtdblockd] 182 root SW< [unlzma/0] 199 root 412 S rc init 200 root 216 S wdog 202 root 196 S /sbin/getty ttyS0 115200 205 root SW< [scsi_eh_0] 206 root SW< [usbstorage] 253 root 376 S < /sbin/udevd d 402 root 308 S hostapd B /tmp/secbr0 406 root 160 S udhcpd /etc/udhcpd_br0.conf 430 root 404 S shttpd root /tmp/www/ftp ports 432 root 356 S /sbin/vsftpd 438 root 132 S /usr/sbin/telnetd 442 nobody 396 S /sbin/dnsmasq 450 root 84 S /usr/sbin/httpd h /tmp/www/ 488 root 304 R sh @matoken
GPIOを触ってみる/proc/gpio/ があったので叩いてみる
# ls lA /proc/gpio/ls lA /proc/gpio/rrr 1 root root 0 Jan 1 07:22 gpio12_inrrr 1 root root 0 Jan 1 07:22 gpio22_inrwrr 1 root root 0 Jan 1 07:22 gpio23_outrwrr 1 root root 0 Jan 1 07:22 gpio27_outrrr 1 root root 0 Jan 1 07:22 gpio6_inrwrr 1 root root 0 Jan 1 07:22 gpio7_outrrr 1 root root 0 Jan 1 07:22 gpio8_in
@matoken
赤LED(ὐ) : /proc/gpio/gpio7_out0 : On
1 : Off
/proc/gpio # echo 1 > gpio7_outecho 1 > gpio7_out/proc/gpio # echo 0 > gpio7_outecho 0 > gpio7_out
@matoken
黄緑LED(ὐ) : /proc/gpio/gpio23_out0 : Off
1 : On
/proc/gpio # echo 0 > gpio23_outecho 0 > gpio23_out/proc/gpio # echo 1 > gpio23_outecho 1 > gpio23_out
@matoken
横面同期ボタン(ὐ) : /proc/gpio/gpio22_in0 : On
1 : Off
/proc/gpio # cat gpio22_incat gpio22_in0/proc/gpio # cat gpio22_incat gpio22_in1
@matoken
という感じで2つのLEDと1つのボタンは簡単に利用できました.他はちょっと叩いただけでは割らなかったです.とりあえずこんな感じで横の同期ボタンを押すとLEDx2を光らせるということが出来ます.
~ # while :> do> if [ cat /proc/gpio/gpio22_in = '0' ]; then> echo on> echo 0 > /proc/gpio/gpio7_out> echo 1 > /proc/gpio/gpio23_out> break> fi> sleep 1> done
@matoken
https://twitter.com/matoken/status/840754952670597120
@matoken
microSDを用意microSDのない状態でAir Penにデータを書き込んでも消えてしまう
microSDを用意してそこにデータを置くことに
@matoken
ext4が使えない対応していないのでext2で…….
# cat /proc/filesystemsnodev sysfsnodev rootfsnodev bdevnodev procnodev sockfsnodev usbfsnodev pipefsnodev tmpfsnodev inotifyfsnodev devpts ext2 squashfsnodev ramfs vfat msdos ntfsnodev autofsnodev fuse fuseblknodev fusectl@matoken
microSDのマウント場所 /tmp/www/ftp 以下にマウントされる複数パーティションの場合はすべてマウントされる
以下はfatとext2の2つのパーティションを用意した時の例
~ # mountmount/dev/mtdblock5 on / type squashfs (ro,relatime)/proc on /proc type proc (rw,relatime)devpts on /dev/pts type devpts (rw,relatime,mode=600)none on /tmp type ramfs (rw,relatime)/sys on /sys type sysfs (rw,relatime)udev on /dev type ramfs (rw,relatime)/dev/pts on /dev/pts type devpts (rw,relatime,mode=600)/dev/sda1 on /tmp/www/ftp/sda1 type vfat (rw,relatime,fmask/dev/sda2 on /tmp/www/ftp/sda2 type ext2 (rw,relatime,errors
@matoken
使いづらいので新しいbusyboxを置いておく$ wget https://www.busybox.net/downloads/binaries/1.26.2defconfigmultiarch/busyboxmips \O | curl T u root:pqiap \ftpcreatedirs ftp://192.168.2.211/sda1/bin/busybox
@matoken
新しいbusyboxを優先するように# cat busyboxlink.shcat busyboxlink.sh#!/bin/sh
BUSYBOX="/tmp/www/ftp/sda1/bin/busybox"PREFIX="/tmp/opt"
mkdir p $PREFIX/binmkdir p $PREFIX/sbinmkdir p $PREFIX/usr/binmkdir p $PREFIX/usr/sbincd $PREFIX$BUSYBOX listfull | while read cmddo echo "# $cmd"# $BUSYBOX rm $cmd echo $BUSYBOX ln s $BUSYBOX $PREFIX/$cmd $BUSYBOX ln s $BUSYBOX $PREFIX/$cmddone
PATH=$PREFIX/bin:$PREFIX/usr/bin:$PREFIX/sbin:$PREFIX@matoken
もっと色々なコマンドを使いたいDebianにはmipsのarchがあるchroot環境を作ると便利かも?
@matoken
hostPCでchroot環境作成debootstrapで
$ mkdir debian_stable_mips$ fakeroot# /usr//sbin/debootstrap foreign arch=mipsel stable debian_stable_mips
とかしてイメージを作成してmicroSDにcpする
@matoken
Air Penでchrootエラーorz
~ # /tmp/www/ftp/sda1/bin/busybox chroot /tmp/www/ftp/sda2 /tmp/www/ftp/sda1/bin/busybox chroot /tmp/www/ftp/sda2 /bin/FATAL: kernel too old
@matoken
oldoldstableのsqueezeを試すversionが近そうなsqueezeのイメージを試すといけた
# /tmp/www/ftp/sda1/bin/busybox chroot /tmp/www/ftp/sda2 /tmp/www/ftp/sda1/bin/busybox chroot /tmp/www/ftp/sda2 /bin/
セキュリティ??
@matoken
aptとかが使えるようにネットワークとaptの設定$ cp /etc/hosts /tmp/www/ftp/sda2/etc/$ cp /etc/resolv.conf /tmp/www/ftp/sda2/etc/$ echo 'deb http://ftp.riken.jp/Linux/debian/debianarchive/debian/ squeeze main'
@matoken
~ # mount rbind /proc /tmp/www/ftp/sda2/proc~ # mount rbind /sys /tmp/www/ftp/sda2/sys
@matoken
aptが使えるようになった# aptget update :W: GPG error: http://ftp.riken.jp squeeze Release: No keyring installed in /etc/apt/trusted.gpg.d/.# aptget install dropbear :WARNING: The following packages cannot be authenticated! gcc4.4base libcbin libgcc1 libc6 zlib1g dropbearInstall these packages without verification [y/N]? y :
鍵が…….
@matoken
dropbearでsshを試すhostのユーザ情報をcpしてchroot後dropbearを起動
~ # cp /etc/passwd /tmp/www/ftp/sda2/etc/~ # cp /etc/group /tmp/www/ftp/sda2/etc/~ # cp p /etc/shadow /tmp/www/ftp/sda2/etc/~ # /tmp/www/ftp/sda1/bin/busybox chroot /tmp/www/ftp/sda2 /bin/bashroot@(none):/# dropbear
@matoken
別マシンから接続……繋がらないcipherの中にはあるけどマッチしないとなる
$ ssh root@192.168.2.202Unable to negotiate with 192.168.2.202 port 22: no matching$ ssh Q kex | grep diffiehellmangroup1sha1diffiehellmangroup1sha1
@matoken
sshオプションで解決したけどPTYがないdiffiehellmangroup1sha1はサポートから外されているのでオプションに指定して強制PTYに繋がらないのでとりあえずbash iで入る
$ aptget changelog opensshserver | grep A2 diffiehellmangroup1sha1 Support for the 1024bit diffiehellmangroup1sha1 key exchange is disabled by default at runtime. It may be reenabled instructions at http://www.openssh.com/legacy.html$ ssh o KexAlgorithms=+diffiehellmangroup1sha1 root@192.168PTY allocation request failed$ ssh o KexAlgorithms=+diffiehellmangroup1sha1 root@192.168
@matoken
PTYを用意するAir Penのchroot前にmountしておくrbindを使いたいけど非対応
~ # mount o bind /dev $DEBIANROOT/dev~ # mount t proc none $DEBIANROOT/proc~ # mount o bind /sys $DEBIANROOT/sys~ # mount t devpts none $DEBIANROOT/dev/pts
@matoken
chroot scriptにまとめておく#!/bin/sh
export DEBIANROOT=/tmp/www/ftp/sda2cp /etc/hosts $DEBIANROOT/etc/cp /etc/resolv.conf $DEBIANROOT/etc/cp /etc/passwd $DEBIANROOT/etc/cp /etc/group $DEBIANROOT/etc/cp /etc/shadow $DEBIANROOT/etc/
echo > $DEBIANROOT/etc/mtab
mount o bind /dev $DEBIANROOT/devmount t proc none $DEBIANROOT/procmount o bind /sys $DEBIANROOT/sysmount t devpts none $DEBIANROOT/dev/pts
/tmp/www/ftp/sda1/bin/busybox chroot $DEBIANROOT /bin/bash
@matoken
とりあえず500円分以上には遊んだ感
@matoken
source code請求PQIの問い合わせメールアドレスにGPLなソース欲しいけど請求方法教えてと投げる
1週間ほどでダウンロードリンクがメールで届く
俺たちの戦いはこれからだ!?
@matoken
参考文献PQI Air Pen PQIグループ モバイル向け周辺機器の総合メーカー [Apple アクセサリ, モバイルアクセサリ, モバイルバッテリー, USB フラッシュドライブ, WiFi ストレージ, 充電器]Debian ディストリビューションアーカイブchroot Debian Wiki
@matoken
top related