androidでpwnできる環境を作ってみる
ndk-buildにより作成したプログラムをandroid上で待ち受けさせる。arm環境でpwnするときに使える。
準備
プログラムを用意する
ソース
/* test.c */ # include <stdio.h> int main(void) { printf("Hello, world!\n"); return 0; }
ビルドスクリプト
Application.mkを作成する。
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := test LOCAL_SRC_FILES := test.c include $(BUILD_EXECUTABLE)
ここではやっていないが、APP_CFLAGS += -fno-stack-protector を書くことでSSPを無効にできる。
ビルドする
$ ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./Application.mk $ adb push libs/arm64-v8a/test /data/local/tmp/ $ adb shell shell@android:/data/local/tmp $ ./test Hello, world!
socatを入れる
androidにはsocatコマンドが入っていないので、socat for android - Post #28からzipをダウンロードしてadbで入れる。
$ adb push ~/downloads/socat-2.0.0-b7-armv7-a /data/local/tmp/
やってみる
adbで端末に接続し、socatで待ち受ける。
$ adb forward tcp:10001 tcp:10001 $ adb shell shell@android:/data/local/tmp $ cd /data/local/tmp/ shell@android:/data/local/tmp $ ./test Hello, world! shell@android:/data/local/tmp $ ip a ... 21: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000 link/ether 30:5a:3a:aa:56:33 brd ff:ff:ff:ff:ff:ff inet 192.168.3.67/24 brd 192.168.3.255 scope global wlan0 valid_lft forever preferred_lft forever inet6 fe80::325a:3aff:feaa:5633/64 scope link valid_lft forever preferred_lft forever shell@android:/data/local/tmp $ ./socat TCP4-LISTEN:10001,fork EXEC:./test
別のshellからnetcatで接続する。
$ nc 192.168.3.67 10001 Hello, world!
無事に接続できた。