密码学 January 03, 2020

Diffie-Hellman算法

Words count 4.2k Reading time 4 mins.

一、原理分析

离散对数问题

假定 a, p 均是素数,下面两个集合相等,证明过程请参考 Cryptography and Network Security 第八章:

1
{ a^1 mod p,...
Read article

密码学 January 03, 2020

Diffie-Hellman算法

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,有:

  • a^x mod p 一定属于 {1, ...
Read article

密码学 January 03, 2020

DES加密算法和AES加密算法初探

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

House of spirit系列

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

Hackme复现

Words count 133k Reading time 2:01

开启刷题模式:

学了栈溢出和格式化字符串漏洞,现在是练手的时候,打完题目总结好准备开坑堆,师傅说Hackme的题目还不错,于是果断去刚一波~下面对所有题目进行复现,也检验自己的学习情况,查缺补漏。

1、bash

一波常规操作:

这题是最简单的pwn了,题目疯狂暗示cat flag,猜想应该是直接连接远程,ls再cat flag,没什么好讲的。

1
2
3
4
5
6
7
#coding=utf8
from pwn import *
context.log_level = 'debug'
context.terminal...
Read article

PWN January 03, 2020

House of Einherjar

Words count 39k Reading time 36 mins.

一、原理:

那个的是unlink中的向前合并:

1
2
3
4
5
6
7
/* consolidate backward */
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不一样:

1
2
p->fd =...
Read article

PWN January 03, 2020

canary崩坏技巧

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

dl_runtime_resolve总结

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

house of force初探

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);
/* check that one of the above allocation paths succeeded */
if ((unsigned long) (size) >= (unsigned...
Read article

RE January 03, 2020

0CTF逆向writeup

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

0CTF复现zero

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
Load more
0%