PWN January 03, 2020

栈溢出从入门到放弃3

Words count 61k Reading time 56 mins.

一、初级栈溢出系列

从现在开始温习栈溢出,从初级栈溢出到高级栈溢出到花式栈溢出都重温一遍,主要结合题目练习加深巩固。

一般来说,实现栈溢出,都是因为读入的字节数超过了buf允许的大小,导致ret地址被覆...

Read article

PWN January 03, 2020

栈溢出从入门到放弃3

Words count 61k Reading time 56 mins.

一、初级栈溢出系列

从现在开始温习栈溢出,从初级栈溢出到高级栈溢出到花式栈溢出都重温一遍,主要结合题目练习加深巩固。

一般来说,实现栈溢出,都是因为读入的字节数超过了buf允许的大小,导致ret地址被覆盖,我们的最终目标都是实现调用system(“/bin/sh”)函数去getshell,过程花样可以千奇百怪,但是总有规律可以寻找~

1、第一步找危险函数。

输入函数:

gets(&buf) 直接读取一行,忽略’\x00’ ,一看没有字符数的限制,那肯定是200%的溢出~

read(0,&...

Read article

PWN January 03, 2020

栈溢出入门到放弃2

Words count 9.3k Reading time 8 mins.

一、对保护机制的探索:

本文针对刷过的题目,介绍一些常见的保护机制以及破解方法,这里一个个介绍。

1、checksec

工欲善其事必先利其器,这个指令用于检查题目的保护机制以及判断是32位还是64位的程序,专业地讲是用来检查可执行文件属性,例如PIE, RELRO, PaX, Canaries, ASLR, Fortify Source等等属性。 举个栗子:

checksec + 文件名,可实现检查功能:

2、Arch表示位数,amd64-64-little表示该程序是64位的,32位的是i386...

Read article

PWN January 03, 2020

栈溢出入门到放弃4

Words count 15k Reading time 13 mins.

一、中级栈溢出总结:

来到中级栈溢出这里,当64位的程序很难得到有用的rop链时(参数在rdi,rsi,rdx中,通常是很难凑齐这3个的)就需要我们用程序现有的链子去构造,找找看:

重点介绍一个64位的很好用的ROP链子,这个链子是根据

这两个函数的汇编写出来的,我们可以去看看:

就是这里了,看到loc_4006A6和loc_400690两个位置,这里怎么利用呢?

首先先读懂这段汇编的意思:首先执行抬一次栈的操作,接着要pop6个参数到相应的寄存器中,然后是ret,接着看到上面mov那里,很...

Read article

PWN January 03, 2020

玩转花式栈溢出

Words count 14k Reading time 13 mins.

一、花式栈溢出介绍:

花式栈溢出又叫栈迁移技术,是指在可以写的payload的长度不佳的情况下(一般只有ebp和ret位置可以写,没有多的了,或者再多给两行可以写的),这样的话我们需要进行栈迁移,具体做法有如下两种:

1、迁移到栈本身,2、迁移到bss段中,3、迁移到堆块(后期补充)

先来看看迁移到栈的情况:

来一道题目:

这里堆栈不可执行保护,其他的没开,然后栈溢出发现只能溢出8字节,32位的话,就是覆盖到ebp和ret的位置,很局限,这里想到栈迁移,于是搞一波操作:

第一步:迁移到本身...

Read article

CTF比赛 January 03, 2020

数字经济3pwn题

Words count 29k Reading time 26 mins.

一、前言

​ 这次的pwn题做的不是很理想,现在复现下,发现当时没出确实挺可惜的哎,以下复现过程。

二、题目

2、fkroman

这题保护全开(习惯了,不全开反而不好玩了hhhhh),先来查看一波漏洞点:

free时,有UAF漏洞

edit时没有对size检查,随便溢出。

这里我们可以一步步逆推思路:

1、UAF可以实现改FD指针为fake_chunk,改malloc_hook为onegadget(前提是有真实地址)

2、要得到真实地址(没有show函数,用IO_file去泄露真实地址)

3、...

Read article

PWN January 03, 2020

师傅给的2道pwn题

Words count 19k Reading time 17 mins.

题目一:

read_note:

一波分析:

这里开了栈溢出保护,堆栈不可执行,然后还有内存地址随机化,只有got还可以写,适应了就好~

动态链接,库是libc.so.6,可以得到,再去看看ida吧:

这里程序大概的流程也出来了,就是让你输入路径(字符串长度为5其实根本不可能),然后能打开该路径下的文件(就是个幌子,没用的),跳过,输入的字符长度大于5,就false,继续执行程序,要写note的大小note_length,还有note的内容,内容在thinking_note这里,会被输出来,然后如...

Read article

CTF比赛 January 03, 2020

强网杯二进制部分wp

Words count 68k Reading time 1:02

1、task_main(强网先锋)

分析算法可知是base64加密:

提取字符,’ZmxhZ3ttYWZha3VhaWxhaXFpYW5kYW9ifQ==’

直接在线解密:

1
flag{mafakuailaiqiandaob}

2、JustRe:

进入主逻辑,分析程序:

这里可知道有2关,先看第一关:

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
45
46
47
48...
Read article

PWN January 03, 2020

星盟AWD的pwn题

Words count 16k Reading time 14 mins.

一、题目

pwn1:

64位保护全开,ida分析一波:

会发现常规菜单题,然后有3个函数,一个个看吧:

malloc:

这里可以看到最多7个堆块,而且堆块大小限定在0x90到0x2333,当堆块量等于7时,貌似有UAF的free,但是其实没有什么用,因为bss上并不会存储chunk的地址,所以正常的malloc,同时可以打印地址,这里直接打印出了堆地址和libc地址

简单的free函数,正常没有漏洞

edit:

这是漏洞点所在,会发现这里有个任意地址写,8字节的数字,0xcafebabe...

Read article

PWN January 03, 2020

数组下标越界专题

Words count 56k Reading time 51 mins.

一、数组下标越界简介:

栈是由高往低增长的,而数组的存储是由低位往高位存的,如果越界的话,会把当前函数的ebp和下一跳的指令地址覆盖掉,如果覆盖了当前函数的ebp,那么在恢复的时候esp就不能指向正确的地方,从而导致未可知的情况,如果下一跳的地址也被覆盖掉,那么肯定会导致crash,看一张图:

这样一下看就很明显了,当你把数组的下标越过了最大索引值的时候,所指向的指针就会指向更高地址的栈空间段,所以我们就能够实现任意改写栈空间上的内容,同理,当下标为负数的时候指针会指向更低地址的栈空间段。但是这...

Read article

PWN January 03, 2020

格式化字符串漏洞学习

Words count 37k Reading time 34 mins.

前置知识:

一些小技巧和知识:

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
这部分来自icemakr的博客

32



'%{}$x'.format(index) // 读4个字节
'%{}$p'.format(index) // 同上面
'${}$s'.format(index)


'%{}$n'.format(index) // 解引用,...
Read article
Load more
0%