2024DAS-GFCTF
dynamic_but_static
禁了一些系统调用,但是可以利用ORW。并且对输入的数据进行了限制,无法直接利用syscall和pop rax。所以第一次先利用puts函数泄露真实地址,然后返回main函数重新调用一次read,构造bss段上的read的ROP链。读取ORW的syscall调用,然后栈迁移过去执行。
EXP
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667# -*- coding: utf-8 -*-from pwn import *from ctypes import *from libcfind import *from LibcSearcher import *import base64import syscontext(os='linux', arch='amd64', log_level='debug ...
2024GeekCTFpwn部分题解
Memo1
题目分析
add,show,edit三个功能。
漏洞点
有符号8字节强转4字节无符号。
利用这样可以绕过判断
读取的字符串会将最后的\n替换为’\x00’,所以不能读取到’\n’,但是这样就无法直接泄露libc和canary了,因为被’\x00’截断了。所以需要控制unsigned int v3的值,不读入’\n’。利用整形溢出即可。泄露canary和libc后。再利用溢出构造ROP
EXP
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101# -*- coding: utf-8 -*-from pwn import *from ctypes import *from libcfind import *from LibcSearch ...
2024长城杯第二赛区初赛pwn部分题解
cardstore
发现存在格式化字符串漏洞,可以泄露libc地址
接着进入到3中,利用整形溢出,可以进行ROP,但是有canary,最开始想利用超长padding覆盖TLS,这样能绕过canary检测。但是尝试一段时间后,发现一直不行。
就更换思路,需要泄露canary。发现程序开始的时候,会进行
所以思路就是第一次泄露canary,然后利用栈溢出返回main函数,再次利用格式化字符串漏洞泄露libc基地址。然后再ROP即可getshell
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586from pwn import *from ctypes import *from libcfind import *from LibcSearcher import*import base64import syscon ...
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)$
所以可得例子中的$\phi(n)=60*52=3120$
(4)找出公钥e
公钥e是按照条件随 ...
《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
对称式加密
对称加密是指通信双方对信息的加密和解密都使用相同的密钥
对称加密机制的安全性取决于密钥的保密性,而不是算法的安全性。即便知道了密文以及加密算法的原理,也无法解密。
不需要对算法保密,只需要对密钥进行保密
对称式加密的优缺点:
优点:效率高,适合对大数据块的加密
缺点:密钥管理困难,密钥维护的工作量大
非对称式加密(公钥加密)
每个用户拥有一对密钥:一个私钥和一个公钥
私钥由用户严密保管,公钥发布出去,所以人都可以自由获得
用公钥加密的信息只能用相应的私钥解密
根据私钥,可以计算出公钥,但是根据公钥,却无法计算出私钥
非对称式加密的优缺点:
优点:密钥管理简单,密钥维护的工作量比较小
缺点:加密效率不高,相比 ...
《IOT废物学习之路》ARM汇编基础知识
什么是ARM
ARM架构,曾称为进阶精简指令集机器(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( ...
初识符号执行
符号执行的背景
软件中存在缺陷(漏洞)十分常见,一个项目中往往存在着大量的代码。为了查找和修复二进制文件漏洞。其中利用的关键技术都是基于符号执行,可以减少分析二进制文件代码的时间。
符号执行的基本概念
符号执行的概念
符号执行的过程类似于生成代数表达式。符号执行通过尽可能探索程序的执行路径找到潜在的漏洞为止,然后尝试解出利用该漏洞的特定输入。形象的来说就是设方程,然后解出设的未知数。这个未知数就是符号输入。
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 ...