「 密码学 」
January 03, 2020
Words count
4.2k
Reading time
4 mins.
一、原理分析
离散对数问题
假定 a, p 均是素数,下面两个集合相等,证明过程请参考 Cryptography and Network Security 第八章:
1
| { a^1 mod p, a^2 mod p, ..., a^(p-1) mod p } = {1, 2, ... , p-1 } {} 表示集合
|
上述式子可概括成以下三点,对于 1 <= x,y <= p - 1,有:
Read article
「 密码学 」
January 03, 2020
Words count
225k
Reading time
3:25
一、DES加密算法原理分析
1、所需要的参数:
key:8个字节共64位的工作密钥
data:8个字节共64位的需要被加密或者被解密的数据
mode:DES工作方式,加密或者解密(CBC模式和ECB模式)
2、初始置换
DES算法使用64位的密钥key将64位的明文输入块变成64位的密文输出块,并将输出块分为L0和R0两部分,每部分均为32位。初始置换规则如下:
注意:这里的数字表示的是原数据的位置,不是数据
1 2 3 4 5 6 7 8
| 58,50,42,34,26,18,10,2, 60,52,44,36,28... |
Read article
「 PWN 」
January 03, 2020
Words count
49k
Reading time
44 mins.
一、原理分析:
House of spirit思想:
这是fastbin的一种attack的方式,就是我们想要控制的区域是不可控的,但是我们能通过伪造fake_chunk来释放它再申请从而得到目标区域,但是有前提:
(1)获取目标区域地址(堆、栈、bss….)
(2)伪造堆块(找到那两个可控区域)
(3)有能覆盖堆指针的漏洞存在(覆盖堆指针为我们的目标区域地址)
(4)调用free函数将伪堆块释放到fastbin中
(5)申请堆块,将刚刚的伪堆块申请出来
(6)输入数据,即可修改目标区域的内容
...
Read article
「 PWN 」
January 03, 2020
Words count
133k
Reading time
2:01
开启刷题模式:
学了栈溢出和格式化字符串漏洞,现在是练手的时候,打完题目总结好准备开坑堆,师傅说Hackme的题目还不错,于是果断去刚一波~下面对所有题目进行复现,也检验自己的学习情况,查缺补漏。
1、bash
一波常规操作:
这题是最简单的pwn了,题目疯狂暗示cat flag,猜想应该是直接连接远程,ls再cat flag,没什么好讲的。
1 2 3 4 5 6 7
| from pwn import * context.log_level = 'debug' context.terminal...
|
Read article
「 PWN 」
January 03, 2020
Words count
39k
Reading time
36 mins.
一、原理:
那个的是unlink中的向前合并:
1 2 3 4 5 6 7
| if (!prev_inuse(p)) { prevsize = prev_size(p); size += prevsize; p = chunk_at_offset(p, -((long) prevsize)); unlink(av, p, bck, fwd); }
|
这个和unlink的操作其实差不多,但是呢填入的fd和bk不一样:
Read article
「 PWN 」
January 03, 2020
Words count
62k
Reading time
56 mins.
题目1:bin
方法介绍:leak canary
利用格式化字符串漏洞,泄露出canary的值,然后填到canary相应的位置从而绕过保护实现栈溢出。
开始分析:
常规操作,先checksec下,再ida静态分析
很明显有格式化字符串漏洞和栈溢出漏洞,但是开了栈溢出保护,程序有2个输入,第一次输入可以先泄露cananry,第二次直接覆盖canary就可以栈溢出了,简单明了,gdb动态调试,可以看到canary在格式化字符串的偏移为7,
在第二个次输入中,我们需要输入到canary进行覆盖工作,这是可以...
Read article
「 PWN 」
January 03, 2020
Words count
43k
Reading time
40 mins.
一、前置知识:
程序:hhh
常规思路,先检查再分析逻辑:
很简单,就只有堆栈不可执行的保护,一个write函数,还有一个read函数栈溢出(0x24,0x80)。
一想到这里,思路就是栈迁移用write先泄露libc_start_main的真实地址,再onegadget即可getshell,但是今天要学习的是不用泄露就可getshell的做法:dl_runtime_resolve
做题前先了解下前置知识:随便找个程序:666分析,看到第一次调用puts函数。
查看内存可知,就是push ...
Read article
「 PWN 」
January 03, 2020
Words count
12k
Reading time
11 mins.
house of force介绍:
通俗的讲就是通过修改topchunk的size字节来控制malloc的返回地址,从而达到修改任意地址内容的目的:
具体原理分析:
因为从topchunk的切割是这样的:
1 2 3 4 5 6 7 8 9 10 11 12 13
| p = av->top; size = chunksize (p);
if ((unsigned long) (size) >= (unsigned... |
Read article
「 RE 」
January 03, 2020
Words count
4.6k
Reading time
4 mins.
一、Elemnet
这题当时在算时,解出来的精度不够,所以一直提交writeup不正确,当时觉得很可惜哎,工具没找对~后来看了大佬的writeup,果然时精度的问题,他说手动调试那个值,直到精确为止,于是开始了复现之旅…..
看看ida:
一开始,从上往下分析逻辑,。接下来看看为何是这样:
这个函数将输入的大写转成小写(上网查),继续
输入44个字节,以-为分隔符号,切割出12个字符,那么flag{a-b-c},其中a和b和c都是16进制的数。
这堆东西,一开始看不懂,v12是一个数...
Read article
「 PWN 」
January 03, 2020
Words count
53k
Reading time
48 mins.
zerostorage
前言:这道题是2016年的0CTF的一道pwn,带了点内核的考点在里面,主要是unsorted_bin的攻击。
1、分析保护机制
保护全开,ida搞一波:
初始化时有个随机数生成的函数,为后面的堆地址进行异或加密。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| __int64 __fastcall main(__int64 a1, char **a2, char... |
Read article