小米路由器404错误页面美化功能将用户访问链接提交到服务器已是毫无疑问,那么就请大家回答一下这个问题:
出于什么样的目的,小米路由器404错误页面美化功能将用户访问链接提交到小米服务器? - 小米科技“404错误页面美化”不仅仅是响应页面被修改,更严重的问题是用户访问链接被发送到了小米的服务器,这就涉及个人隐私泄露问题。我做了一个实验,通过在小米路由器上抓包,获取了页面重定向和美化页面相关的HTTP请求信息。
以PlayBoy官网为例,先在浏览器地址栏输入网址,发现现在PlayBoy主页很素。于是想试探一下,有没有隐藏的内容,于是把首页地址后面加了naked/。(思想不健康)
然而naked目录并不存在,于是出现了小米的“404错误美化页面”。
用wireshark打开tcpdump抓包文件,看到了HTTP请求报文:
在重定向页面请求报文中发现向小米服务器提交的URL中含有刚才访问的链接信息。
这是最终的404错误美化页面请求报文,链接中含有一段BASE64编码的信息,在浏览器地址栏里也能看到这段信息。
通过在线解码网站得到BASE64解码信息,其中包含了用户的路由器设备ID和访问链接。
通过以上实验,我们可以看出:小米路由器向服务器报告了用户访问的链接,并与唯一的设备ID关联。如果用户正在访问了敏感网站,或者链接中含有敏感信息,遇到404错误时,这些信息将被发送到小米服务器,导致个人隐私泄露。这才是小米路由器“404错误页面美化”功能最危险之处。
7月1日补充一个实验:
某网站没有使用https协议,某天网站维护员在升级时出现差错,导致用户登录时出现404错误,我们来看看小米路由器是如何美化网页。
测试的网站是:
http://www. weixinto.com/,在登录页面里输入用户名:admin,密码:1234567890,如下图所示。
点击“Login”按钮后出现了小米路由器的404错误美化页面,我们留意到页面链接的域名
api.miwifi.com,是小米公司的服务器。完整链接是:
http:// api.miwifi.com/error-pa ge.html?data=ZGV2aWNlX2lkPWZhNjlkMmMzLTIwNTktNGIxOC1hYThmLWE2ZmM4NThjZDdiNiZyb209JmhhcmR3YXJlPSZjaGFubmVsPSZlcnJvcl90eXBlPTEmc2M9NDA0JnVybD1odHRwJTNBJTJGJTJGd3d3LndlaXhpbnRvLmNvbSUyRmxvZ2luJTJGJTNGdXNlciUzRGFkbWluJTI2cGFzcyUzRDEyMzQ1Njc4OTAmdHBsPWRlZmF1bHQ&error_type=1404错误页面截图如下:
将链接中从data=后到&error_type=1之间的字符串复制,然后贴到在线
Base64编码/解码器里解码,得到:device_id=fa69d2c3-2059-4b18-aa8f-a6fc858cd7b6&rom=&hardware=&channel=&error_type=1&sc=404&url=http%3A%2F%2Fwww.weixinto.com%2Flogin%2F%3Fuser%3Dadmin%26pass%3D1234567890&tpl=default
看到了在登录页面中输入的admin和1234567890,还有路由器的设备ID,这些信息已提交到了小米的服务器。
6月29日更新:
上面的实验只是通过抓包了解到小米路由器404错误页面劫持情况,接下来以1T硬盘版小米2.2.9稳定版固件为例,分析其工作原理。
start() { config_load "http_status_stat" local switch switch=`uci get http_status_stat.settings.enabled -q` if [ $switch -ne "1" ]; then return 0 fi local cc=$(nvram get CountryCode) cc=${cc:-"CN"} if [ $cc != "CN" ]; then echo "http_stat: Bad Country!" return 0 fi fastpath=`uci get misc.http_proxy.fastpath -q` [ -z $fastpath ] && return 0 if [ $fastpath == "ctf" ]; then if [ -f $APP_CTF_MGR ]; then $APP_CTF_MGR http_stat http on fi elif [ $fastpath == "hwnat" ]; then echo "http status can work with hw_nat." else echo "http_status_stat.init: unknown fastpath type! Treat as std!" fi insmod nf_conn_ext_http >/dev/null 2>&1 insmod nf_tcp_proxy >/dev/null 2>&1 #echo "open and set proxy action to kernel" echo "ADD 5 $LIP $PROXY_PORT" > $CFG_PATH # ensure start switch echo "1" > $SWITCH_PATH insmod http_status_code_proxy >/dev/null 2>&1 [ -f $REFERER_PATH ] && echo $REFERER_STR > $REFERER_PATH 2>/dev/null return 0 }
下一步要弄清楚三个内核模块在干什么?
nf_conn_ext_http.ko
nf_tcp_proxy.ko
http_status_code_proxy.ko
先看看文件里有哪些字符串?
这些字符串含有hijack,请英语达人给翻译一下hijack的中文意思。
tcp_hijack_func security_hijack http_response_hijack http_response_hijack security_hijack %s, security hijack successd! %s, security hijack failed for some reason! %s, syn ack but can NOT hijack!!
nf_tcp_proxy.ko的大致功能:
向内核的netfilter挂钩子,监视经过路由器的TCP报文。将HTTP报文通知
http_status_code_proxy,http_identify,http_match,http_content_type_mark这些模块。这些模块解析http报文,如果需要劫持,就调用nf_tcp_proxy中的相关函数,让nf_tcp_proxy生成相关TCP报文,然后注入到TCP会话中。由此可见,这就是TCP会话劫持。
下面是在nf_tcp_proxy.ko中发现的一段字符串,这是跳转404错误页面时注入的HTTP响应报文的模板。
GET /error-page?error_type=1&sc= Host: api.miwifi.com Connection: keep-alive Cache-Control: no-cache Accept: */* Pragma: no-cache User-Agent: HTTP/1.1 Padding:
调用nf_register_hooks函数,注册2个钩子函数:
NF_IP_PRE_ROUTING ipv4_tcpproxy_pre_hook
NF_IP_POST_ROUTING ipv4_tcpproxy_post_hook
这2个钩子函数位于netfilter的最前和最后,前端用于监视,后端用于注入或重定向。借用一张图来说明钩子函数所处的位置。
关于netfilter hook,可参考:
(十五)洞悉linux下的Netfilter&iptables:开发自己的hook函数【实战】...本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有