为了使不同计算机厂家生产的计算机能够相互通信,以便在更大的范围内建立计算机网络,国际标准化组织(ISO)在1978年提出了“开放系统互联参考模型”,即著名的OSI/RM模型(Open System Interconnection/Reference Model)。 它将计算机网络体系结构的通信协议划分为七层,自下而上依次为: 物理层(Physics Layer)、数据链路层(Data Link Layer)、网络层(Network Layer)、传输层(Transport Layer)、会话层(Session Layer)、表示层(Presentation Layer)、应用层(Application Layer)
HTTP+SSL
自下而上
的 !在网络数据处理方面,如果是上层做了检测处理,则需要在同层或下层进行逻辑绕过,这就是攻与防的关键了,偷家(底层)才是硬道理。完整的代理请求过程
为:客户端首先根据代理服务器所使用的代理协议,与代理服务器创建连接,接着按照协议请求对目标服务器创建连接、或者获得目标服务器的指定资源。connection = (HttpURLConnection) url.openConnection(Proxy.NO_PROXY);
/** * A proxy setting that represents a {@code DIRECT} connection, * basically telling the protocol handler not to use any proxying. * Used, for instance, to create sockets bypassing any other global * proxy settings (like SOCKS): * <P> * {@code Socket s = new Socket(Proxy.NO_PROXY);} * */public final static Proxy NO_PROXY = new Proxy();// Creates the proxy that represents a {@code DIRECT} connection.private Proxy() {
type = Type.DIRECT;
sa = null;}
VPN
模式的Postern
iptables
的ProxyDroid
private void sendRequestWithHttpURLConnection(){
new Thread(new Runnable() {
@Override
public void run() {
HttpURLConnection connection = null;
BufferedReader reader = null;
try{
URL url = new URL("http://www.baidu.com");
connection = (HttpURLConnection) url.openConnection(Proxy.NO_PROXY);
connection.setRequestMethod("GET");
InputStream in = connection.getInputStream();reader = new BufferedReader(new InputStreamReader(in));
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine()) != null){
response.append(line);
}showResponse(response.toString());
} catch (Exception e){
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e){
e.printStackTrace();
}
}
if (connection != null){
connection.disconnect();
}
}
}
}).start();
}
钥匙
的标志,这可能也是基于VPN模式工作的特征VPN虚拟隧道协议
时,会在当前节点创建
基于eth之上的tun0
接口或ppp0
接口,所以一旦出现带有明显特征的网络接口名称,就可以认定是使用了VPN协议进行通信。private void isDeviceInVPN() {
try {
Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
while (networkInterfaces.hasMoreElements()) {
String name = networkInterfaces.nextElement().getName();
if (name.equals("tun0") || name.equals("ppp0")) {
stop();
}
}
} catch (SocketException e) {
e.printStackTrace();
}
}
@Override
public void onClick(View view){
if (view.getId() == R.id.send_request){
isDeviceInVPN();
sendRequestWithHttpURLConnection();}
}
Netfilter是一个数据包处理模块,它具有网络地址转换、数据包内容修改、数据包过滤等功能。要使netfilter能够工作,就需要将所有的规则读入内存中。netfilter自己维护一个内存块,在此内存块中有4个表:filter表、NAT表、mangle表和raw表。在每个表中有相应的链,链中存放的是一条条的规则,规则就是过滤防火的语句或者其他功能的语句。也就是说表是链的容器,链是规则的容器。实际上,每个链都只是一个hook函数(钩子函数)而已。
透明代理
”,iptables的转发模式就是这种。感觉不到代理的存在
,用户不需要在浏览器中设置任何代理,只需设置缺省网关即可。在访问外部网络时,客户端的数据包被发送到缺省网关,通过缺省网关的路由,最终到达代理服务器,最后代理服务器运行代理进程,数据实际被重定向到代理服务器的代理端口,即由本地代理服务器向外请求所需数据然后拷贝给客户端。adb shell
su
iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to 192.168.50.177:80
iptables -t nat -A OUTPUT -p tcp --dport 443 -j DNAT --to 192.168.50.177:443
iptables -t nat -L
Redirect to port - 如果配置了这个选项,Burp会在每次请求转发到指定的端口,而不必受限于浏览器所请求的目标。 Force use of SSL - 如果配置了这个选项,Burp会使用HTTPS在所有向外的连接,即使传入的请求中使用普通的HTTP。您可以使用此选项,在与SSL相关的响应修改选项结合,开展sslstrip般的攻击使用Burp,其中,强制执行HTTPS的应用程序可以降级为普通的HTTP的受害用户的流量在不知不觉中通过BurpProxy代理。
注意:如果出现443端口被占用,查找进程kill掉即可。 以管理员身份运行 cmd 执行如下代码 经过测试,burp成功抓取到了请求包。
https://xz.aliyun.com/t/11398
如有侵权,请联系删除
推荐阅读