「 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%