Crypto-RSA
RSA基础RSA密钥生成步骤(1)随机选择两个不相等的质数p和q
比如选择61和53
在实际应用中,这两个指数越大就越难破解
(2)计算p和q的乘积n
n=61*53=3233
3233写成二进制是110010100001,共12位,故该密钥是12位的
目前主流可选值:1024、2048、3072、4096等,低于1024bit的密钥已经不建议使用
(3)计算n的欧拉函数$\phi(n)$
欧拉函数是小于x的整数中与x互质的数的个数,一般用$\phi(x)$表示
互质是指两个数的公约数只有1,比如15和31
$\phi(8)$就等于4,因为8以内的与8互质的数只有1、3、5、7这四个数
欧拉函数的性质:
如果$n=p*q$且p、q互质,则$\phi(n)=\phi(pq)=\phi(p)\phi(q)$
如果n是质数,则$\phi(n)=n-1$
根据这两个性质可得:$\phi(p)=p-1,\phi(q)=q-1$,所以$\phi(n)=(p-1)*(q-1)$
所以可得例子中的$\p ...
Crypto-仿射密码
仿射密码
凯撒密码是将明文与密钥相加得到密文,仿射密码则是将明文与密钥的一部分相乘,然后再加上密钥的另一部分
为了便于计算,将26个英文字母用数字表示:a=0,b=1,……,z=25
仿射加密的密钥有两个:a和b,取值范围都是[0,25]
a要求与26互质,互质就是者两个数的公因数只有1
26的因数:1、2、13
a的因素不包含2或13即可
仿射密码加密
x是明文,y是密文
加密公式:y=(ax+b)mod26
加密过程:
a=7、b=3
加密:$$y=(7x+3)mod26$$
假设明文为c,那么x的值为2
所以y=17,密文为r
仿射密码解密
解密公式:$$x=a^{-1}(y-b)mod26$$
如果不考虑求模,根据加密公式很容易想到解密公式应该是x=(y-b)/a
因为要求模,除法很可能会得到小数,而小数无法做模运算
解决的方法是将除法转换为乘法
$$a^{-1}称为a的乘法逆元,((y-b)/a)mod26与a^{-1}(y ...
《IOT 废物学习之路》(7)--D-Link-DIR-815路由器多次溢出漏洞分析
《IOT废物学习之路》(7)–D-Link-DIR-815路由器多次溢出漏洞分析
漏洞公告:https://www.exploit-db.com/exploits/33863
漏洞介绍从POC和漏洞报告中可以看出,该漏洞存在于名为hedwig.cgi的CGI脚本中,未认证攻击者通过调用这个CGI脚本传递一个超长的Cookie值,使程序堆栈溢出,从而获得路由器远程控制权限。
漏洞分析固件提取
https://rebyte.me/en/d-link/89510/file-592084/固件下载地址
解压缩得到:DIR-815-FW-1.01b14_1.01b14.bin固件
利用binwalk提取固件
1234sudo docker run -it --rm \-v $(pwd):$(pwd) \asdqwe876/iot_analyze \binwalk --run-as=root -C $(pwd) -Mer $(pwd)/DIR-815-FW-1.01b14_1.01b14.bin
但是出现了很多告警,大致就是该软链接指向解压目录之外,为了安全起见binwalk会将其重定向到 ...
密码学基础知识
网络安全三要素
机密性
完整性
可用性
古典加密替换:
摩斯密码,凯斯密码
移位:
栅栏密码
替换+移位:
凯撒+栅栏
近现代加密流加密:
将明文按字符逐位(逐比特)地、对应地进行加密。
如RC系列
分组加密:
将明文分成固定长度的分组,如64bit或128bit一组,用同一密钥和算法对每个分组加密。
如DES、3DES、AES、IDEA
对称式加密
对称加密是指通信双方对信息的加密和解密都使用相同的密钥
对称加密机制的安全性取决于密钥的保密性,而不是算法的安全性。即便知道了密文以及加密算法的原理,也无法解密。
不需要对算法保密,只需要对密钥进行保密
对称式加密的优缺点:
优点:效率高,适合对大数据块的加密
缺点:密钥管理困难,密钥维护的工作量大
非对称式加密(公钥加密)
每个用户拥有一对密钥:一个私钥和一个公钥
私钥由用户严密保管,公钥发布出去,所以人都可以自由获得
用公钥加密的信息只能用相应的私钥解密
根据私钥,可以计算出公钥,但是根据公钥,却无法计算出私钥
非对称式加密的优缺点:
优点:密钥管理简单,密钥维护的工作量比较小
缺点:加密效率不高,相比对称式加密要慢 ...
ARM基础
ARM基础什么是ARMARM架构,曾称为进阶精简指令集机器(Advanced RISC Machine)是一个32位精简指令集(RISC) 处理器架构
ARM大小端最高有效位 MSB(Most Significant Bit)对应大端(Big-endian)
最低有效位LSB(Least Significant Bit)对应小端(Little-endian)
armel:arm eabi little endian的缩写,软件浮点
armhf:arm hard float的缩写,硬件浮点
arm64:64位的arm默认就是hf的
ARM运行模式一共有9种模式,下图有7种模式。还有Hyp模式和Monitor模式
ARM工作状态
ARM状态:32位,执行字对准的ARM指令
Thumb状态:16位,字对准的Thumb指令。通过缩短指令长度来提高代码密度。
进入不同工作状态的方法进入Thumb状态
(1)执行BX指令,并设置操作数寄存器的状态(位[0])为1。
(2)在Thumb状态进入异常(所有的异常都是ARM状态),当异常处理返回时自动转换Thumb指令
进入ARM状态
(1)执 ...
angr基础学习
项目地址:
https://github.com/jakespringer/angr_ctf
https://github.com/Hustcw/Angr_Tutorial_For_CTF
00_angr_find
123456789101112131415161718import angrproj = angr.Project('./00_angr_find',auto_load_libs=False)#不加载共享文件库state = proj.factory.entry_state()#构造一个已经准备好从函数入口点执行的状态sm = proj.factory.simulation_manager(state) #创建一个模拟管理器good = 0x0804867Dsm.explore(find = good)if sm.found: #如果found不为空 find_state = sm.found[0] #把found分类中的state传递给find_stateflag = find_state.posix.dumps(0) #获取输入print(s ...
初识符号执行
符号执行的背景软件中存在缺陷(漏洞)十分常见,一个项目中往往存在着大量的代码。为了查找和修复二进制文件漏洞。其中利用的关键技术都是基于符号执行,可以减少分析二进制文件代码的时间。
符号执行的基本概念符号执行的概念符号执行的过程类似于生成代数表达式。符号执行通过尽可能探索程序的执行路径找到潜在的漏洞为止,然后尝试解出利用该漏洞的特定输入。形象的来说就是设方程,然后解出设的未知数。这个未知数就是符号输入。
123若x^2+2x+1=0,求其中的x为多少x^2+2x+1=0对应到符号执行中为探索到特定路径之后引擎生成的表达式x=-1对应到符号执行中就是利用该漏洞的特定输入
约束的概念,举个例子
12345678910111213141516171819202122#include<stdio.h>int main(){ int i=0; scanf("%d",&i); if(i > 0){ printf("step one success!"); if(i>1){ printf(& ...
《IOT 废物学习之路》(6)--BooFuzz 的简单使用,以 CVE-2018-5797 为例
《IOT 废物学习之路》(6)–BooFuzz 的简单使用,以 CVE-2018-5797 为例
Tenda AC15 固件中所存在的缓冲区溢出。由于没有对用户的输入进行限制,导致 sscanf 函数直接将用户的输入直接拷贝到栈上,从而造成了栈溢出漏洞。
分析固件(qemu-user)使用 binwalk 对固件进行解压
1binwalk -e US_AC15V1.0BR_V15.03.1.16_multi_TD01.bin
squashfs-root 文件夹是该路由器的文件系统,使用 qemu-arm-static 尝试启动 bin 下的 httpd:
123cp $(which qemu-arm-static) ./sudo chroot . ./qemu-arm-static ./bin/httpdsudo chroot . ./qemu-arm-static -g 1234 ./bin/httpd #调试模式
运行时程序卡住:
到 IDA 中对 httpd 进行分析。
直接进行字符串定位
发现两个需要注意的地方
导致死循环的原因就是因为 check_netwo ...
《IOT废物学习之路》(5)--修复固件运行环境
《IOT废物学习之路》(5)–修复固件运行环境
虽然可以利用firmadyne模拟运行固件,但是并不是所有的固件都能模拟运行成功,有的固件需要依赖于硬件,qemu无法完全模拟。所以需要修复固件的运行环境,从而模拟固件运行。
固件下载地址
https://support.dlink.com/resource/products/dir-605l/REVA/
利用firmadyne模拟运行一下试试
1sudo docker run --network host --privileged -it --rm -e USER=root -v $(pwd):$(pwd) asdqwe876/iot_analyze
启动容器并挂载当前盘符。
将固件复制到firmadyne。
1cp /home/zhuyuan/IOT/05/dir605L_FW_113.bin ./
设置id
1project_id=1
解压固件
1python3 ./sources/extractor/extractor.py -b Netgear -sql 127.0.0.1 -np -nk "firm ...
《IOT废物学习之路》(4)--解密路由器固件
《IOT废物学习之路》(4)–解密路由器固件
固件下载地址:
https://support.dlink.com/resource/products/dir-605l/REVA/
研究路由器固件D-link-882。其中zip就是各版本的固件。
解压出来的固件版本从旧到新依次为:FW100B07 –> FW101B02 –> FW104B02 –> FW110B02 –> FW111B01 –> FW120B06 –> FW130B10,FW104B02 有点特别,而且通过名字也猜测到它是未加密的中间版本。
目前最新版是FW130B10,试一试用binwalk能否解析该固件。
发现binwalk失败。再试试更早版本的FW101B02,发现可以直接提取。
固件的版本是经过未加密到加密,所以肯定会有一个中间版本。
利用binwalk测试出中间版本FW104B02。可以从固件系统中找一找是否存在解密程序。可以在bin目录或者是usr/bin目录下寻找类似decrypt字眼的程序。
binwalk解析FW104B02固件1234docker ru ...