-
+
- 用户态程序的5保护
+ GDB指北
上一篇
@@ -444,8 +444,8 @@
-
- IOT安全资料集合
+
+ 用户态程序的5保护
下一篇
diff --git "a/2022/02/04/\345\237\272\347\241\200/\347\224\250\346\210\267\346\200\201\347\250\213\345\272\217\347\232\2045\344\277\235\346\212\244/index.html" "b/2022/02/04/\345\237\272\347\241\200/\347\224\250\346\210\267\346\200\201\347\250\213\345\272\217\347\232\2045\344\277\235\346\212\244/index.html"
index 917d636..0e06d5b 100644
--- "a/2022/02/04/\345\237\272\347\241\200/\347\224\250\346\210\267\346\200\201\347\250\213\345\272\217\347\232\2045\344\277\235\346\212\244/index.html"
+++ "b/2022/02/04/\345\237\272\347\241\200/\347\224\250\346\210\267\346\200\201\347\250\213\345\272\217\347\232\2045\344\277\235\346\212\244/index.html"
@@ -448,9 +448,9 @@
-
+
- GDB指北
+ 二进制数学
上一篇
@@ -458,8 +458,8 @@
-
- 二进制数学
+
+ IOT安全资料集合
下一篇
diff --git "a/2022/05/03/\345\237\272\347\241\200/GDB\346\214\207\345\214\227/index.html" "b/2022/05/03/\345\237\272\347\241\200/GDB\346\214\207\345\214\227/index.html"
index b45294b..228bb77 100644
--- "a/2022/05/03/\345\237\272\347\241\200/GDB\346\214\207\345\214\227/index.html"
+++ "b/2022/05/03/\345\237\272\347\241\200/GDB\346\214\207\345\214\227/index.html"
@@ -525,8 +525,8 @@
-
- 用户态程序的5保护
+
+ 二进制数学
下一篇
diff --git "a/2022/11/22/\346\235\202/\345\270\270\347\224\250\345\256\211\350\243\205/index.html" "b/2022/11/22/\346\235\202/\345\270\270\347\224\250\345\256\211\350\243\205/index.html"
index 5b8fb3e..131c73c 100644
--- "a/2022/11/22/\346\235\202/\345\270\270\347\224\250\345\256\211\350\243\205/index.html"
+++ "b/2022/11/22/\346\235\202/\345\270\270\347\224\250\345\256\211\350\243\205/index.html"
@@ -453,9 +453,9 @@
-
+
- malloc源码分析
+ Glibc Heap Exploit
上一篇
diff --git a/2022/11/23/PWN/Heap/Glibc_Heap_Exploit/index.html b/2022/11/23/PWN/Heap/Glibc_Heap_Exploit/index.html
index 0018c42..bb323c9 100644
--- a/2022/11/23/PWN/Heap/Glibc_Heap_Exploit/index.html
+++ b/2022/11/23/PWN/Heap/Glibc_Heap_Exploit/index.html
@@ -432,9 +432,9 @@ Glibc Heap Exploit
-
+
- OS命令注入总结
+ malloc源码分析
上一篇
@@ -442,8 +442,8 @@ Glibc Heap Exploit
-
- malloc源码分析
+
+ 常用安装
下一篇
diff --git "a/2022/11/23/PWN/Heap/malloc\346\272\220\347\240\201\345\210\206\346\236\220/index.html" "b/2022/11/23/PWN/Heap/malloc\346\272\220\347\240\201\345\210\206\346\236\220/index.html"
index 7f6e5a8..036c16a 100644
--- "a/2022/11/23/PWN/Heap/malloc\346\272\220\347\240\201\345\210\206\346\236\220/index.html"
+++ "b/2022/11/23/PWN/Heap/malloc\346\272\220\347\240\201\345\210\206\346\236\220/index.html"
@@ -432,9 +432,9 @@ malloc源码分析
-
+
- Glibc Heap Exploit
+ OS命令注入总结
上一篇
@@ -442,8 +442,8 @@ malloc源码分析
-
- 常用安装
+
+ Glibc Heap Exploit
下一篇
diff --git "a/2022/12/11/Vulnerability/Knowledge/\345\221\275\344\273\244\346\263\250\345\205\245/index.html" "b/2022/12/11/Vulnerability/Knowledge/\345\221\275\344\273\244\346\263\250\345\205\245/index.html"
index a481ffd..43f8d74 100644
--- "a/2022/12/11/Vulnerability/Knowledge/\345\221\275\344\273\244\346\263\250\345\205\245/index.html"
+++ "b/2022/12/11/Vulnerability/Knowledge/\345\221\275\344\273\244\346\263\250\345\205\245/index.html"
@@ -558,8 +558,8 @@
-
- Glibc Heap Exploit
+
+ malloc源码分析
下一篇
diff --git "a/2023/02/24/Vulnerability/CVE/CVE-2021-3156 sudo \345\240\206\346\272\242\345\207\272\346\274\217\346\264\236\345\244\215\347\216\260/index.html" "b/2023/02/24/Vulnerability/CVE/CVE-2021-3156 sudo \345\240\206\346\272\242\345\207\272\346\274\217\346\264\236\345\244\215\347\216\260/index.html"
index 6bf1674..d46b77f 100644
--- "a/2023/02/24/Vulnerability/CVE/CVE-2021-3156 sudo \345\240\206\346\272\242\345\207\272\346\274\217\346\264\236\345\244\215\347\216\260/index.html"
+++ "b/2023/02/24/Vulnerability/CVE/CVE-2021-3156 sudo \345\240\206\346\272\242\345\207\272\346\274\217\346\264\236\345\244\215\347\216\260/index.html"
@@ -467,7 +467,7 @@ CVE-2021-3156 sudo 堆溢出漏洞复现
Fluid.utils.createCssLink('/css/gitalk.css')
Fluid.utils.createScript('https://lib.baomitu.com/gitalk/1.8.0/gitalk.min.js', function() {
var options = Object.assign(
- {"clientID":"Iv23lilCzB3rOEhdE2Ru","clientSecret":"2790b4604de40791061d705fb80c8492eadbde87","repo":"blog-gitalk-comments","owner":"k3ppf0r","admin":["k3ppf0r"],"language":"zh-CN","labels":["Gitalk"],"perPage":10,"pagerDirection":"last","distractionFreeMode":false,"createIssueManually":true,"proxy":"https://cors-anywhere.azm.workers.dev/https://github.com/login/oauth/access_token"},
+ {"clientID":"Iv23lilCzB3rOEhdE2Ru","clientSecret":"2790b4604de40791061d705fb80c8492eadbde87","repo":"blog-gitalk-comments","owner":"k3ppf0r","admin":["k3ppf0r"],"language":"zh-CN","labels":["Gitalk"],"perPage":10,"pagerDirection":"last","distractionFreeMode":false,"createIssueManually":true,"proxy":"https://shielded-brushlands-08810.herokuapp.com/https://github.com/login/oauth/access_token"},
{
id: 'c1115ee670266f450ccf40953df7d9eb'
}
diff --git "a/2023/02/27/Vulnerability/CVE/CVE-2016-5195 \350\204\217\347\211\233\346\274\217\346\264\236\345\244\215\347\216\260/index.html" "b/2023/02/27/Vulnerability/CVE/CVE-2016-5195 \350\204\217\347\211\233\346\274\217\346\264\236\345\244\215\347\216\260/index.html"
index 998dfa1..459830a 100644
--- "a/2023/02/27/Vulnerability/CVE/CVE-2016-5195 \350\204\217\347\211\233\346\274\217\346\264\236\345\244\215\347\216\260/index.html"
+++ "b/2023/02/27/Vulnerability/CVE/CVE-2016-5195 \350\204\217\347\211\233\346\274\217\346\264\236\345\244\215\347\216\260/index.html"
@@ -459,7 +459,7 @@ CVE-2016-5195 脏牛漏洞复现
Fluid.utils.createCssLink('/css/gitalk.css')
Fluid.utils.createScript('https://lib.baomitu.com/gitalk/1.8.0/gitalk.min.js', function() {
var options = Object.assign(
- {"clientID":"Iv23lilCzB3rOEhdE2Ru","clientSecret":"2790b4604de40791061d705fb80c8492eadbde87","repo":"blog-gitalk-comments","owner":"k3ppf0r","admin":["k3ppf0r"],"language":"zh-CN","labels":["Gitalk"],"perPage":10,"pagerDirection":"last","distractionFreeMode":false,"createIssueManually":true,"proxy":"https://cors-anywhere.azm.workers.dev/https://github.com/login/oauth/access_token"},
+ {"clientID":"Iv23lilCzB3rOEhdE2Ru","clientSecret":"2790b4604de40791061d705fb80c8492eadbde87","repo":"blog-gitalk-comments","owner":"k3ppf0r","admin":["k3ppf0r"],"language":"zh-CN","labels":["Gitalk"],"perPage":10,"pagerDirection":"last","distractionFreeMode":false,"createIssueManually":true,"proxy":"https://shielded-brushlands-08810.herokuapp.com/https://github.com/login/oauth/access_token"},
{
id: 'b83bf4f1e9d55e2ccd9a21498d7799bb'
}
diff --git "a/2023/03/04/IOT\345\256\211\345\205\250/IOT\346\240\210\346\272\242\345\207\272/index.html" "b/2023/03/04/IOT\345\256\211\345\205\250/IOT\346\240\210\346\272\242\345\207\272/index.html"
index 602d705..81907bf 100644
--- "a/2023/03/04/IOT\345\256\211\345\205\250/IOT\346\240\210\346\272\242\345\207\272/index.html"
+++ "b/2023/03/04/IOT\345\256\211\345\205\250/IOT\346\240\210\346\272\242\345\207\272/index.html"
@@ -446,7 +446,7 @@ 2022
-
+
- 用户态程序的5保护
+ 二进制数学
-
+
- 二进制数学
+ 用户态程序的5保护
diff --git a/archives/2022/11/index.html b/archives/2022/11/index.html
index 21e3117..4675551 100644
--- a/archives/2022/11/index.html
+++ b/archives/2022/11/index.html
@@ -249,15 +249,15 @@
2022
-
+
- Glibc Heap Exploit
+ malloc源码分析
-
+
- malloc源码分析
+ Glibc Heap Exploit
diff --git a/archives/2022/index.html b/archives/2022/index.html
index c41ce75..a95489f 100644
--- a/archives/2022/index.html
+++ b/archives/2022/index.html
@@ -261,15 +261,15 @@
-
+
- Glibc Heap Exploit
+ malloc源码分析
-
+
- malloc源码分析
+ Glibc Heap Exploit
@@ -291,15 +291,15 @@
-
+
- 用户态程序的5保护
+ 二进制数学
-
+
- 二进制数学
+ 用户态程序的5保护
diff --git a/archives/page/2/index.html b/archives/page/2/index.html
index 50f487b..4aebd95 100644
--- a/archives/page/2/index.html
+++ b/archives/page/2/index.html
@@ -282,15 +282,15 @@
-
+
- Glibc Heap Exploit
+ malloc源码分析
-
+
- malloc源码分析
+ Glibc Heap Exploit
diff --git a/archives/page/3/index.html b/archives/page/3/index.html
index b419b98..437e863 100644
--- a/archives/page/3/index.html
+++ b/archives/page/3/index.html
@@ -249,15 +249,15 @@
2022
-
+
- 用户态程序的5保护
+ 二进制数学
-
+
- 二进制数学
+ 用户态程序的5保护
diff --git a/categories/PWN/Heap/index.html b/categories/PWN/Heap/index.html
index f379842..ef61360 100644
--- a/categories/PWN/Heap/index.html
+++ b/categories/PWN/Heap/index.html
@@ -258,15 +258,15 @@
2022
-
+
- Glibc Heap Exploit
+ malloc源码分析
-
+
- malloc源码分析
+ Glibc Heap Exploit
diff --git a/categories/PWN/index.html b/categories/PWN/index.html
index a4953c2..3d8534d 100644
--- a/categories/PWN/index.html
+++ b/categories/PWN/index.html
@@ -258,15 +258,15 @@
2022
-
+
- Glibc Heap Exploit
+ malloc源码分析
-
+
- malloc源码分析
+ Glibc Heap Exploit
diff --git a/categories/index.html b/categories/index.html
index 380b015..79c4594 100644
--- a/categories/index.html
+++ b/categories/index.html
@@ -495,19 +495,19 @@
-
- 用户态程序的5保护
+ 二进制数学
-
- 二进制数学
+ 用户态程序的5保护
@@ -642,22 +642,22 @@
- Vulnerability
+ PWN
-
+
3
-
+
@@ -674,22 +674,22 @@
- CVE
+ Heap
-
+
- 2
+ 3
-
+
@@ -698,61 +698,28 @@
-
- CVE-2016-5195 脏牛漏洞复现
+ 堆介绍简单综述
-
- CVE-2021-3156 sudo 堆溢出漏洞复现
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Knowledge
-
-
-
-
-
-
- 1
+ malloc源码分析
-
-
-
-
-
-
-
- OS命令注入总结
+ Glibc Heap Exploit
@@ -771,22 +738,22 @@
- PWN
+ Vulnerability
-
+
3
-
+
@@ -803,22 +770,22 @@
- Heap
+ CVE
-
+
- 3
+ 2
-
+
@@ -827,28 +794,61 @@
-
- 堆介绍简单综述
+ CVE-2016-5195 脏牛漏洞复现
-
- Glibc Heap Exploit
+ CVE-2021-3156 sudo 堆溢出漏洞复现
+
+
+
+
+
+
+
+
+
+
+
+ Knowledge
+
+
+
+
+
+ 1
+
-
+
+
+
+
+
+
+
+
+
- malloc源码分析
+ OS命令注入总结
diff --git "a/categories/\345\237\272\347\241\200/index.html" "b/categories/\345\237\272\347\241\200/index.html"
index 99bc15b..37197c8 100644
--- "a/categories/\345\237\272\347\241\200/index.html"
+++ "b/categories/\345\237\272\347\241\200/index.html"
@@ -261,15 +261,15 @@
-
+
- 用户态程序的5保护
+ 二进制数学
-
+
- 二进制数学
+ 用户态程序的5保护
diff --git a/local-search.xml b/local-search.xml
index f93528e..c63c8d0 100644
--- a/local-search.xml
+++ b/local-search.xml
@@ -427,11 +427,11 @@
- Glibc Heap Exploit
-
- /2022/11/23/PWN/Heap/Glibc_Heap_Exploit/
+ malloc源码分析
+
+ /2022/11/23/PWN/Heap/malloc%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/
- ]]>
+ ]]>
@@ -458,11 +458,11 @@
- malloc源码分析
-
- /2022/11/23/PWN/Heap/malloc%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/
+ Glibc Heap Exploit
+
+ /2022/11/23/PWN/Heap/Glibc_Heap_Exploit/
- ]]>
+ ]]>
@@ -562,11 +562,11 @@
- 用户态程序的5保护
-
- /2022/02/04/%E5%9F%BA%E7%A1%80/%E7%94%A8%E6%88%B7%E6%80%81%E7%A8%8B%E5%BA%8F%E7%9A%845%E4%BF%9D%E6%8A%A4/
+ 二进制数学
+
+ /2022/02/04/%E5%9F%BA%E7%A1%80/%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%95%B0%E5%AD%A6/
- ASLR 与 PIE 的同与异作用位置 归属 作用时间 ASLR 1:栈基地址(stack)、共享库(.so\libraries)、mmap 基地址
2:在1基础上,增加随机化堆基地址(chunk) 系统功能 作用于程序(ELF)装入内存运行时 PIE 代码段( .text )、初始化数据段( .data )、未初始化数据段( .bss ) 编译器功能 作用于程序(ELF)编译过程中
因为 ASLR 技术的出现,攻击者在 ROP 或者向进程中写数据时不得不先进行 leak,或者干脆放弃堆栈,转向 bss 或者其他地址固定的内存块。这个基本上所有机器都开启。
而 PIE(position-independent executable, 地址无关可执行文件)技术就是一个针对代码段.text, 数据段.*data,.bss 等固定地址的一个防护技术。同 ASLR 一样,应用了 PIE 的程序会在每次加载时都变换加载基址,从而使位于程序本身的 gadget 也失效。
没有 PIE 保护的程序,每次加载的基址都是固定的,64 位上一般是 0x400000。
与 eip 有关的固定下来了,也就是代码段和数据段,但堆栈、libc 还是随机的
bypass PIE:
1、partial write(部分写入)就是一种利用了 PIE 技术缺陷的 bypass 技术。由于内存的页载入机制,PIE 的随机化只能影响到单个内存页。通常来说,一个内存页大小为 0x1000,这就意味着不管地址怎么变,某条指令的后 12 位,3 个十六进制数的地址是始终不变的。因此通过覆盖 EIP 的后 8 或 16 位 (按字节写入,每字节 8 位)就可以快速爆破或者直接劫持 EIP。
2、泄露地址 bypass PIE
3、使用 vdso/vsyscall bypass PIE
Canary
绕过 canary:
1、泄露 canary
2、劫持__stack_chk_fail
The NX bits(the No-eXecute bits)
通过在内存页的标识中增加执行位,表示是否可以执行,开启后使栈区的数据不可执行
开启 nx 保护下,常用的手段为向 bss 段写入 shellcode 或堆区写入并使用 mprotect 赋予可执行权限
RELRO (RELocate Read-Only)
只读化,未开启可实现 got 覆盖攻击,fini_array 挟持到 main
Partial RELRO:部分 RELRO: 在程序装入后, 将其中一些段(如.dynamic)标记为只读, 防止程序的一些重定位信息被修改,仍然可实现 got 覆盖攻击
Full RELRO:完全 RELRO: 在部分 RELRO 的基础上, 在程序装入时, 直接解析完所有符号并填入对应的值, 此时所有的 GOT 表项都已初始化, 且不装入 link_map 与_dl_runtime_resolve 的地址
RWX 存在可读可写可执行段,即栈为可读可写可执行
]]>
+ 咳咳,由于打比赛老是基础不牢,地动山摇,故开此篇以文字形式记录下,把二进制牢牢的记住!第一个问题:计算机是如何存储数字的?
答:
首先是整数:
计算机中所有的整数都是以补码的形式存储的。整数的补吗就是它本身,负数的补码是它除了符号位的位数取反(这样做生成的叫反码)加一。
使用补码,可以将符号和数值统一处理,加法和减法也可以统一处理(CPU 只有加法器)
其余知识点,如浮点数表示等参考别人的资料,知道这点就很关键。
第二个知识点:【内存】中数据的存储(更新了十六进制数大小端存储)
十六进制和整型数据的存储
计算机中,二进制数可以转为十六进制数,一个十六进制数相当于 4 个 2 进制,也就是 4 个 bit,两个十六进制数为一个字节
大端:数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中
小端:数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中,内存储存即是小端序
在 pwn 中,内存一个地址即是以小端序存储的 unsigned int64 数字,在进行程序的输入时,伪造地址需要自行以字节码的形式将对应内存改成以数字形式存储在该处的样子(十六进制小端序,C 语言认可十六进制),输入顺序是从低地址到高地址。
由于是伪造,正常逻辑是输入可见的 ASCII 码字符,伪造逻辑不考虑这个,只考虑数字的内存形式,输入十六进制小端序形式的字节字符串数据即可伪造好地址!
例子:
1
2
3
4
5
6
7
8
9
int a = 0x123;
//在内存中,int类型有4个字节,2个二进制数为一个字节
//所以有8个十六进制进制数
//补齐0是 0x 00 00 01 23
// 数据高位-------------数据低位
// 内存中:
// 大端 00 00 01 23
// 小端 23 01 00 00
// 低地址-----------------高地址
1
2
3
4
5
6
7
8
9
10
11
from pwn import *
# p8 ubyte format requires 0 <= number <= 255
In [7]: p8(0x10)
Out[7]: b'\x10'
In [8]: p8(16)
Out[8]: b'\x10'
In [16]: p32(0x8048799)
Out[16]: b'\x99\x87\x04\x08'
第三个知识点 数字操作(python 实现)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# number & 0xff 意思是获取后两位十六进制,即一个字节
In [32]: 123222 & 0xff
Out[32]: 86
In [33]: hex(123222)
Out[33]: '0x1e156'
# number >> 8 意思是右移8位二进制,即去末尾一个字节
In [37]: 0x1e156 >> 8
Out[37]: 481
In [38]: hex(481)
Out[38]: '0x1e1'
# number << 8 意思是左移8位二进制,即从左往右添8个0
In [39]: 1 << 8
Out[39]: 256
python 原生实现数字转字节:
1
2
3
4
5
6
7
# 整数.to_bytes(字节长度,字节顺序,*字节符号)
In [67]: (230).to_bytes(1,'little',signed=False)
Out[67]: b'\xe6'
# 字节转数字,负数是补码
In [70]: int.from_bytes(b'\xfc\x00',byteorder='big',signed=True)
Out[70]: -1024
泄露的内存数,转换为数字:
1
2
3
4
5
6
7
8
9
10
11
In [4]: u32(b'\x23\x01\x00\x00')
Out[4]: 291
In [6]: 0x123
Out[6]: 291
In [14]: u32(b'\x12\x31\x23\x13')
Out[14]: 321073426
In [15]: 0x13233112
Out[15]: 321073426
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# %256 求余256 得到这个数的低8位
In [1]: 0x7fff7 % 256
Out[1]: 247
In [2]: hex(247)
Out[2]: '0xf7'
# /256 除以256 左移位8bit
In [10]: 0x7fff7 / 256
Out[10]: 2047.96484375
In [11]: int(0x7fff7 / 256)
Out[11]: 2047
In [12]: hex(2047)
Out[12]: '0x7ff'
]]>
@@ -578,9 +578,7 @@
- 用户态
-
- 保护
+ 二进制
@@ -589,11 +587,11 @@
- 二进制数学
-
- /2022/02/04/%E5%9F%BA%E7%A1%80/%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%95%B0%E5%AD%A6/
+ 用户态程序的5保护
+
+ /2022/02/04/%E5%9F%BA%E7%A1%80/%E7%94%A8%E6%88%B7%E6%80%81%E7%A8%8B%E5%BA%8F%E7%9A%845%E4%BF%9D%E6%8A%A4/
- 咳咳,由于打比赛老是基础不牢,地动山摇,故开此篇以文字形式记录下,把二进制牢牢的记住!第一个问题:计算机是如何存储数字的?
答:
首先是整数:
计算机中所有的整数都是以补码的形式存储的。整数的补吗就是它本身,负数的补码是它除了符号位的位数取反(这样做生成的叫反码)加一。
使用补码,可以将符号和数值统一处理,加法和减法也可以统一处理(CPU 只有加法器)
其余知识点,如浮点数表示等参考别人的资料,知道这点就很关键。
第二个知识点:【内存】中数据的存储(更新了十六进制数大小端存储)
十六进制和整型数据的存储
计算机中,二进制数可以转为十六进制数,一个十六进制数相当于 4 个 2 进制,也就是 4 个 bit,两个十六进制数为一个字节
大端:数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中
小端:数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中,内存储存即是小端序
在 pwn 中,内存一个地址即是以小端序存储的 unsigned int64 数字,在进行程序的输入时,伪造地址需要自行以字节码的形式将对应内存改成以数字形式存储在该处的样子(十六进制小端序,C 语言认可十六进制),输入顺序是从低地址到高地址。
由于是伪造,正常逻辑是输入可见的 ASCII 码字符,伪造逻辑不考虑这个,只考虑数字的内存形式,输入十六进制小端序形式的字节字符串数据即可伪造好地址!
例子:
1
2
3
4
5
6
7
8
9
int a = 0x123;
//在内存中,int类型有4个字节,2个二进制数为一个字节
//所以有8个十六进制进制数
//补齐0是 0x 00 00 01 23
// 数据高位-------------数据低位
// 内存中:
// 大端 00 00 01 23
// 小端 23 01 00 00
// 低地址-----------------高地址
1
2
3
4
5
6
7
8
9
10
11
from pwn import *
# p8 ubyte format requires 0 <= number <= 255
In [7]: p8(0x10)
Out[7]: b'\x10'
In [8]: p8(16)
Out[8]: b'\x10'
In [16]: p32(0x8048799)
Out[16]: b'\x99\x87\x04\x08'
第三个知识点 数字操作(python 实现)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# number & 0xff 意思是获取后两位十六进制,即一个字节
In [32]: 123222 & 0xff
Out[32]: 86
In [33]: hex(123222)
Out[33]: '0x1e156'
# number >> 8 意思是右移8位二进制,即去末尾一个字节
In [37]: 0x1e156 >> 8
Out[37]: 481
In [38]: hex(481)
Out[38]: '0x1e1'
# number << 8 意思是左移8位二进制,即从左往右添8个0
In [39]: 1 << 8
Out[39]: 256
python 原生实现数字转字节:
1
2
3
4
5
6
7
# 整数.to_bytes(字节长度,字节顺序,*字节符号)
In [67]: (230).to_bytes(1,'little',signed=False)
Out[67]: b'\xe6'
# 字节转数字,负数是补码
In [70]: int.from_bytes(b'\xfc\x00',byteorder='big',signed=True)
Out[70]: -1024
泄露的内存数,转换为数字:
1
2
3
4
5
6
7
8
9
10
11
In [4]: u32(b'\x23\x01\x00\x00')
Out[4]: 291
In [6]: 0x123
Out[6]: 291
In [14]: u32(b'\x12\x31\x23\x13')
Out[14]: 321073426
In [15]: 0x13233112
Out[15]: 321073426
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# %256 求余256 得到这个数的低8位
In [1]: 0x7fff7 % 256
Out[1]: 247
In [2]: hex(247)
Out[2]: '0xf7'
# /256 除以256 左移位8bit
In [10]: 0x7fff7 / 256
Out[10]: 2047.96484375
In [11]: int(0x7fff7 / 256)
Out[11]: 2047
In [12]: hex(2047)
Out[12]: '0x7ff'
]]>
+ ASLR 与 PIE 的同与异作用位置 归属 作用时间 ASLR 1:栈基地址(stack)、共享库(.so\libraries)、mmap 基地址
2:在1基础上,增加随机化堆基地址(chunk) 系统功能 作用于程序(ELF)装入内存运行时 PIE 代码段( .text )、初始化数据段( .data )、未初始化数据段( .bss ) 编译器功能 作用于程序(ELF)编译过程中
因为 ASLR 技术的出现,攻击者在 ROP 或者向进程中写数据时不得不先进行 leak,或者干脆放弃堆栈,转向 bss 或者其他地址固定的内存块。这个基本上所有机器都开启。
而 PIE(position-independent executable, 地址无关可执行文件)技术就是一个针对代码段.text, 数据段.*data,.bss 等固定地址的一个防护技术。同 ASLR 一样,应用了 PIE 的程序会在每次加载时都变换加载基址,从而使位于程序本身的 gadget 也失效。
没有 PIE 保护的程序,每次加载的基址都是固定的,64 位上一般是 0x400000。
与 eip 有关的固定下来了,也就是代码段和数据段,但堆栈、libc 还是随机的
bypass PIE:
1、partial write(部分写入)就是一种利用了 PIE 技术缺陷的 bypass 技术。由于内存的页载入机制,PIE 的随机化只能影响到单个内存页。通常来说,一个内存页大小为 0x1000,这就意味着不管地址怎么变,某条指令的后 12 位,3 个十六进制数的地址是始终不变的。因此通过覆盖 EIP 的后 8 或 16 位 (按字节写入,每字节 8 位)就可以快速爆破或者直接劫持 EIP。
2、泄露地址 bypass PIE
3、使用 vdso/vsyscall bypass PIE
Canary
绕过 canary:
1、泄露 canary
2、劫持__stack_chk_fail
The NX bits(the No-eXecute bits)
通过在内存页的标识中增加执行位,表示是否可以执行,开启后使栈区的数据不可执行
开启 nx 保护下,常用的手段为向 bss 段写入 shellcode 或堆区写入并使用 mprotect 赋予可执行权限
RELRO (RELocate Read-Only)
只读化,未开启可实现 got 覆盖攻击,fini_array 挟持到 main
Partial RELRO:部分 RELRO: 在程序装入后, 将其中一些段(如.dynamic)标记为只读, 防止程序的一些重定位信息被修改,仍然可实现 got 覆盖攻击
Full RELRO:完全 RELRO: 在部分 RELRO 的基础上, 在程序装入时, 直接解析完所有符号并填入对应的值, 此时所有的 GOT 表项都已初始化, 且不装入 link_map 与_dl_runtime_resolve 的地址
RWX 存在可读可写可执行段,即栈为可读可写可执行
]]>
@@ -605,7 +603,9 @@
- 二进制
+ 用户态
+
+ 保护
diff --git a/page/2/index.html b/page/2/index.html
index 456bd0b..206d7e3 100644
--- a/page/2/index.html
+++ b/page/2/index.html
@@ -636,23 +636,23 @@
-
- Glibc Heap Exploit
+
+ malloc源码分析
-
+
- 关于用户态中的 glibc堆的常见利用手法总结
+ 整理
@@ -714,23 +714,23 @@
-
- malloc源码分析
+
+ Glibc Heap Exploit
-
+
- 整理
+ 关于用户态中的 glibc堆的常见利用手法总结
diff --git a/page/3/index.html b/page/3/index.html
index 1ec43f6..93fcca7 100644
--- a/page/3/index.html
+++ b/page/3/index.html
@@ -249,23 +249,23 @@
-
- 用户态程序的5保护
+
+ 二进制数学
-
+
- 用户态程序的5保护
+ 二进制数学
@@ -304,9 +304,7 @@
-
- 二进制数学
+
+ 用户态程序的5保护
-
+
- 二进制数学
+ 用户态程序的5保护
@@ -373,7 +371,9 @@
diff --git a/tags/CTF/index.html b/tags/CTF/index.html
index fd0d844..0132036 100644
--- a/tags/CTF/index.html
+++ b/tags/CTF/index.html
@@ -253,15 +253,15 @@
2022
-
+
- Glibc Heap Exploit
+ malloc源码分析
-
+
- malloc源码分析
+ Glibc Heap Exploit
@@ -318,23 +316,23 @@
diff --git a/tags/encrypt/index.html b/tags/encrypt/index.html
index ec32a49..8804303 100644
--- a/tags/encrypt/index.html
+++ b/tags/encrypt/index.html
@@ -283,15 +283,15 @@
2022
-
+
- Glibc Heap Exploit
+ malloc源码分析
-
+
- malloc源码分析
+ Glibc Heap Exploit
diff --git "a/tags/\345\240\206/index.html" "b/tags/\345\240\206/index.html"
index 8ef425f..0d81936 100644
--- "a/tags/\345\240\206/index.html"
+++ "b/tags/\345\240\206/index.html"
@@ -253,15 +253,15 @@
2022
-
+
- Glibc Heap Exploit
+ malloc源码分析
-
+
- malloc源码分析
+ Glibc Heap Exploit
-
+
- GDB指北
+ 二进制数学
上一篇
@@ -458,8 +458,8 @@
-
- 二进制数学
+
+ IOT安全资料集合
下一篇
diff --git "a/2022/05/03/\345\237\272\347\241\200/GDB\346\214\207\345\214\227/index.html" "b/2022/05/03/\345\237\272\347\241\200/GDB\346\214\207\345\214\227/index.html"
index b45294b..228bb77 100644
--- "a/2022/05/03/\345\237\272\347\241\200/GDB\346\214\207\345\214\227/index.html"
+++ "b/2022/05/03/\345\237\272\347\241\200/GDB\346\214\207\345\214\227/index.html"
@@ -525,8 +525,8 @@
-
- 用户态程序的5保护
+
+ 二进制数学
下一篇
diff --git "a/2022/11/22/\346\235\202/\345\270\270\347\224\250\345\256\211\350\243\205/index.html" "b/2022/11/22/\346\235\202/\345\270\270\347\224\250\345\256\211\350\243\205/index.html"
index 5b8fb3e..131c73c 100644
--- "a/2022/11/22/\346\235\202/\345\270\270\347\224\250\345\256\211\350\243\205/index.html"
+++ "b/2022/11/22/\346\235\202/\345\270\270\347\224\250\345\256\211\350\243\205/index.html"
@@ -453,9 +453,9 @@
-
+
- malloc源码分析
+ Glibc Heap Exploit
上一篇
diff --git a/2022/11/23/PWN/Heap/Glibc_Heap_Exploit/index.html b/2022/11/23/PWN/Heap/Glibc_Heap_Exploit/index.html
index 0018c42..bb323c9 100644
--- a/2022/11/23/PWN/Heap/Glibc_Heap_Exploit/index.html
+++ b/2022/11/23/PWN/Heap/Glibc_Heap_Exploit/index.html
@@ -432,9 +432,9 @@ Glibc Heap Exploit
-
+
- OS命令注入总结
+ malloc源码分析
上一篇
@@ -442,8 +442,8 @@ Glibc Heap Exploit
-
- malloc源码分析
+
+ 常用安装
下一篇
diff --git "a/2022/11/23/PWN/Heap/malloc\346\272\220\347\240\201\345\210\206\346\236\220/index.html" "b/2022/11/23/PWN/Heap/malloc\346\272\220\347\240\201\345\210\206\346\236\220/index.html"
index 7f6e5a8..036c16a 100644
--- "a/2022/11/23/PWN/Heap/malloc\346\272\220\347\240\201\345\210\206\346\236\220/index.html"
+++ "b/2022/11/23/PWN/Heap/malloc\346\272\220\347\240\201\345\210\206\346\236\220/index.html"
@@ -432,9 +432,9 @@ malloc源码分析
-
+
- Glibc Heap Exploit
+ OS命令注入总结
上一篇
@@ -442,8 +442,8 @@ malloc源码分析
-
- 常用安装
+
+ Glibc Heap Exploit
下一篇
diff --git "a/2022/12/11/Vulnerability/Knowledge/\345\221\275\344\273\244\346\263\250\345\205\245/index.html" "b/2022/12/11/Vulnerability/Knowledge/\345\221\275\344\273\244\346\263\250\345\205\245/index.html"
index a481ffd..43f8d74 100644
--- "a/2022/12/11/Vulnerability/Knowledge/\345\221\275\344\273\244\346\263\250\345\205\245/index.html"
+++ "b/2022/12/11/Vulnerability/Knowledge/\345\221\275\344\273\244\346\263\250\345\205\245/index.html"
@@ -558,8 +558,8 @@
-
- Glibc Heap Exploit
+
+ malloc源码分析
下一篇
diff --git "a/2023/02/24/Vulnerability/CVE/CVE-2021-3156 sudo \345\240\206\346\272\242\345\207\272\346\274\217\346\264\236\345\244\215\347\216\260/index.html" "b/2023/02/24/Vulnerability/CVE/CVE-2021-3156 sudo \345\240\206\346\272\242\345\207\272\346\274\217\346\264\236\345\244\215\347\216\260/index.html"
index 6bf1674..d46b77f 100644
--- "a/2023/02/24/Vulnerability/CVE/CVE-2021-3156 sudo \345\240\206\346\272\242\345\207\272\346\274\217\346\264\236\345\244\215\347\216\260/index.html"
+++ "b/2023/02/24/Vulnerability/CVE/CVE-2021-3156 sudo \345\240\206\346\272\242\345\207\272\346\274\217\346\264\236\345\244\215\347\216\260/index.html"
@@ -467,7 +467,7 @@ CVE-2021-3156 sudo 堆溢出漏洞复现
Fluid.utils.createCssLink('/css/gitalk.css')
Fluid.utils.createScript('https://lib.baomitu.com/gitalk/1.8.0/gitalk.min.js', function() {
var options = Object.assign(
- {"clientID":"Iv23lilCzB3rOEhdE2Ru","clientSecret":"2790b4604de40791061d705fb80c8492eadbde87","repo":"blog-gitalk-comments","owner":"k3ppf0r","admin":["k3ppf0r"],"language":"zh-CN","labels":["Gitalk"],"perPage":10,"pagerDirection":"last","distractionFreeMode":false,"createIssueManually":true,"proxy":"https://cors-anywhere.azm.workers.dev/https://github.com/login/oauth/access_token"},
+ {"clientID":"Iv23lilCzB3rOEhdE2Ru","clientSecret":"2790b4604de40791061d705fb80c8492eadbde87","repo":"blog-gitalk-comments","owner":"k3ppf0r","admin":["k3ppf0r"],"language":"zh-CN","labels":["Gitalk"],"perPage":10,"pagerDirection":"last","distractionFreeMode":false,"createIssueManually":true,"proxy":"https://shielded-brushlands-08810.herokuapp.com/https://github.com/login/oauth/access_token"},
{
id: 'c1115ee670266f450ccf40953df7d9eb'
}
diff --git "a/2023/02/27/Vulnerability/CVE/CVE-2016-5195 \350\204\217\347\211\233\346\274\217\346\264\236\345\244\215\347\216\260/index.html" "b/2023/02/27/Vulnerability/CVE/CVE-2016-5195 \350\204\217\347\211\233\346\274\217\346\264\236\345\244\215\347\216\260/index.html"
index 998dfa1..459830a 100644
--- "a/2023/02/27/Vulnerability/CVE/CVE-2016-5195 \350\204\217\347\211\233\346\274\217\346\264\236\345\244\215\347\216\260/index.html"
+++ "b/2023/02/27/Vulnerability/CVE/CVE-2016-5195 \350\204\217\347\211\233\346\274\217\346\264\236\345\244\215\347\216\260/index.html"
@@ -459,7 +459,7 @@ CVE-2016-5195 脏牛漏洞复现
Fluid.utils.createCssLink('/css/gitalk.css')
Fluid.utils.createScript('https://lib.baomitu.com/gitalk/1.8.0/gitalk.min.js', function() {
var options = Object.assign(
- {"clientID":"Iv23lilCzB3rOEhdE2Ru","clientSecret":"2790b4604de40791061d705fb80c8492eadbde87","repo":"blog-gitalk-comments","owner":"k3ppf0r","admin":["k3ppf0r"],"language":"zh-CN","labels":["Gitalk"],"perPage":10,"pagerDirection":"last","distractionFreeMode":false,"createIssueManually":true,"proxy":"https://cors-anywhere.azm.workers.dev/https://github.com/login/oauth/access_token"},
+ {"clientID":"Iv23lilCzB3rOEhdE2Ru","clientSecret":"2790b4604de40791061d705fb80c8492eadbde87","repo":"blog-gitalk-comments","owner":"k3ppf0r","admin":["k3ppf0r"],"language":"zh-CN","labels":["Gitalk"],"perPage":10,"pagerDirection":"last","distractionFreeMode":false,"createIssueManually":true,"proxy":"https://shielded-brushlands-08810.herokuapp.com/https://github.com/login/oauth/access_token"},
{
id: 'b83bf4f1e9d55e2ccd9a21498d7799bb'
}
diff --git "a/2023/03/04/IOT\345\256\211\345\205\250/IOT\346\240\210\346\272\242\345\207\272/index.html" "b/2023/03/04/IOT\345\256\211\345\205\250/IOT\346\240\210\346\272\242\345\207\272/index.html"
index 602d705..81907bf 100644
--- "a/2023/03/04/IOT\345\256\211\345\205\250/IOT\346\240\210\346\272\242\345\207\272/index.html"
+++ "b/2023/03/04/IOT\345\256\211\345\205\250/IOT\346\240\210\346\272\242\345\207\272/index.html"
@@ -446,7 +446,7 @@ 2022
-
+
- 用户态程序的5保护
+ 二进制数学
-
+
- 二进制数学
+ 用户态程序的5保护
diff --git a/archives/2022/11/index.html b/archives/2022/11/index.html
index 21e3117..4675551 100644
--- a/archives/2022/11/index.html
+++ b/archives/2022/11/index.html
@@ -249,15 +249,15 @@
2022
-
+
- Glibc Heap Exploit
+ malloc源码分析
-
+
- malloc源码分析
+ Glibc Heap Exploit
diff --git a/archives/2022/index.html b/archives/2022/index.html
index c41ce75..a95489f 100644
--- a/archives/2022/index.html
+++ b/archives/2022/index.html
@@ -261,15 +261,15 @@
-
+
- Glibc Heap Exploit
+ malloc源码分析
-
+
- malloc源码分析
+ Glibc Heap Exploit
@@ -291,15 +291,15 @@
-
+
- 用户态程序的5保护
+ 二进制数学
-
+
- 二进制数学
+ 用户态程序的5保护
diff --git a/archives/page/2/index.html b/archives/page/2/index.html
index 50f487b..4aebd95 100644
--- a/archives/page/2/index.html
+++ b/archives/page/2/index.html
@@ -282,15 +282,15 @@
-
+
- Glibc Heap Exploit
+ malloc源码分析
-
+
- malloc源码分析
+ Glibc Heap Exploit
diff --git a/archives/page/3/index.html b/archives/page/3/index.html
index b419b98..437e863 100644
--- a/archives/page/3/index.html
+++ b/archives/page/3/index.html
@@ -249,15 +249,15 @@
2022
-
+
- 用户态程序的5保护
+ 二进制数学
-
+
- 二进制数学
+ 用户态程序的5保护
diff --git a/categories/PWN/Heap/index.html b/categories/PWN/Heap/index.html
index f379842..ef61360 100644
--- a/categories/PWN/Heap/index.html
+++ b/categories/PWN/Heap/index.html
@@ -258,15 +258,15 @@
2022
-
+
- Glibc Heap Exploit
+ malloc源码分析
-
+
- malloc源码分析
+ Glibc Heap Exploit
diff --git a/categories/PWN/index.html b/categories/PWN/index.html
index a4953c2..3d8534d 100644
--- a/categories/PWN/index.html
+++ b/categories/PWN/index.html
@@ -258,15 +258,15 @@
2022
-
+
- Glibc Heap Exploit
+ malloc源码分析
-
+
- malloc源码分析
+ Glibc Heap Exploit
diff --git a/categories/index.html b/categories/index.html
index 380b015..79c4594 100644
--- a/categories/index.html
+++ b/categories/index.html
@@ -495,19 +495,19 @@
-
- 用户态程序的5保护
+ 二进制数学
-
- 二进制数学
+ 用户态程序的5保护
@@ -642,22 +642,22 @@
- Vulnerability
+ PWN
-
+
3
-
+
@@ -674,22 +674,22 @@
- CVE
+ Heap
-
+
- 2
+ 3
-
+
@@ -698,61 +698,28 @@
-
- CVE-2016-5195 脏牛漏洞复现
+ 堆介绍简单综述
-
- CVE-2021-3156 sudo 堆溢出漏洞复现
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Knowledge
-
-
-
-
-
-
- 1
+ malloc源码分析
-
-
-
-
-
-
-
- OS命令注入总结
+ Glibc Heap Exploit
@@ -771,22 +738,22 @@
- PWN
+ Vulnerability
-
+
3
-
+
@@ -803,22 +770,22 @@
- Heap
+ CVE
-
+
- 3
+ 2
-
+
@@ -827,28 +794,61 @@
-
- 堆介绍简单综述
+ CVE-2016-5195 脏牛漏洞复现
-
- Glibc Heap Exploit
+ CVE-2021-3156 sudo 堆溢出漏洞复现
+
+
+
+
+
+
+
+
+
+
+
+ Knowledge
+
+
+
+
+
+ 1
+
-
+
+
+
+
+
+
+
+
+
- malloc源码分析
+ OS命令注入总结
diff --git "a/categories/\345\237\272\347\241\200/index.html" "b/categories/\345\237\272\347\241\200/index.html"
index 99bc15b..37197c8 100644
--- "a/categories/\345\237\272\347\241\200/index.html"
+++ "b/categories/\345\237\272\347\241\200/index.html"
@@ -261,15 +261,15 @@
-
+
- 用户态程序的5保护
+ 二进制数学
-
+
- 二进制数学
+ 用户态程序的5保护
diff --git a/local-search.xml b/local-search.xml
index f93528e..c63c8d0 100644
--- a/local-search.xml
+++ b/local-search.xml
@@ -427,11 +427,11 @@
- Glibc Heap Exploit
-
- /2022/11/23/PWN/Heap/Glibc_Heap_Exploit/
+ malloc源码分析
+
+ /2022/11/23/PWN/Heap/malloc%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/
- ]]>
+ ]]>
@@ -458,11 +458,11 @@
- malloc源码分析
-
- /2022/11/23/PWN/Heap/malloc%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/
+ Glibc Heap Exploit
+
+ /2022/11/23/PWN/Heap/Glibc_Heap_Exploit/
- ]]>
+ ]]>
@@ -562,11 +562,11 @@
- 用户态程序的5保护
-
- /2022/02/04/%E5%9F%BA%E7%A1%80/%E7%94%A8%E6%88%B7%E6%80%81%E7%A8%8B%E5%BA%8F%E7%9A%845%E4%BF%9D%E6%8A%A4/
+ 二进制数学
+
+ /2022/02/04/%E5%9F%BA%E7%A1%80/%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%95%B0%E5%AD%A6/
- ASLR 与 PIE 的同与异作用位置 归属 作用时间 ASLR 1:栈基地址(stack)、共享库(.so\libraries)、mmap 基地址
2:在1基础上,增加随机化堆基地址(chunk) 系统功能 作用于程序(ELF)装入内存运行时 PIE 代码段( .text )、初始化数据段( .data )、未初始化数据段( .bss ) 编译器功能 作用于程序(ELF)编译过程中
因为 ASLR 技术的出现,攻击者在 ROP 或者向进程中写数据时不得不先进行 leak,或者干脆放弃堆栈,转向 bss 或者其他地址固定的内存块。这个基本上所有机器都开启。
而 PIE(position-independent executable, 地址无关可执行文件)技术就是一个针对代码段.text, 数据段.*data,.bss 等固定地址的一个防护技术。同 ASLR 一样,应用了 PIE 的程序会在每次加载时都变换加载基址,从而使位于程序本身的 gadget 也失效。
没有 PIE 保护的程序,每次加载的基址都是固定的,64 位上一般是 0x400000。
与 eip 有关的固定下来了,也就是代码段和数据段,但堆栈、libc 还是随机的
bypass PIE:
1、partial write(部分写入)就是一种利用了 PIE 技术缺陷的 bypass 技术。由于内存的页载入机制,PIE 的随机化只能影响到单个内存页。通常来说,一个内存页大小为 0x1000,这就意味着不管地址怎么变,某条指令的后 12 位,3 个十六进制数的地址是始终不变的。因此通过覆盖 EIP 的后 8 或 16 位 (按字节写入,每字节 8 位)就可以快速爆破或者直接劫持 EIP。
2、泄露地址 bypass PIE
3、使用 vdso/vsyscall bypass PIE
Canary
绕过 canary:
1、泄露 canary
2、劫持__stack_chk_fail
The NX bits(the No-eXecute bits)
通过在内存页的标识中增加执行位,表示是否可以执行,开启后使栈区的数据不可执行
开启 nx 保护下,常用的手段为向 bss 段写入 shellcode 或堆区写入并使用 mprotect 赋予可执行权限
RELRO (RELocate Read-Only)
只读化,未开启可实现 got 覆盖攻击,fini_array 挟持到 main
Partial RELRO:部分 RELRO: 在程序装入后, 将其中一些段(如.dynamic)标记为只读, 防止程序的一些重定位信息被修改,仍然可实现 got 覆盖攻击
Full RELRO:完全 RELRO: 在部分 RELRO 的基础上, 在程序装入时, 直接解析完所有符号并填入对应的值, 此时所有的 GOT 表项都已初始化, 且不装入 link_map 与_dl_runtime_resolve 的地址
RWX 存在可读可写可执行段,即栈为可读可写可执行
]]>
+ 咳咳,由于打比赛老是基础不牢,地动山摇,故开此篇以文字形式记录下,把二进制牢牢的记住!第一个问题:计算机是如何存储数字的?
答:
首先是整数:
计算机中所有的整数都是以补码的形式存储的。整数的补吗就是它本身,负数的补码是它除了符号位的位数取反(这样做生成的叫反码)加一。
使用补码,可以将符号和数值统一处理,加法和减法也可以统一处理(CPU 只有加法器)
其余知识点,如浮点数表示等参考别人的资料,知道这点就很关键。
第二个知识点:【内存】中数据的存储(更新了十六进制数大小端存储)
十六进制和整型数据的存储
计算机中,二进制数可以转为十六进制数,一个十六进制数相当于 4 个 2 进制,也就是 4 个 bit,两个十六进制数为一个字节
大端:数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中
小端:数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中,内存储存即是小端序
在 pwn 中,内存一个地址即是以小端序存储的 unsigned int64 数字,在进行程序的输入时,伪造地址需要自行以字节码的形式将对应内存改成以数字形式存储在该处的样子(十六进制小端序,C 语言认可十六进制),输入顺序是从低地址到高地址。
由于是伪造,正常逻辑是输入可见的 ASCII 码字符,伪造逻辑不考虑这个,只考虑数字的内存形式,输入十六进制小端序形式的字节字符串数据即可伪造好地址!
例子:
1
2
3
4
5
6
7
8
9
int a = 0x123;
//在内存中,int类型有4个字节,2个二进制数为一个字节
//所以有8个十六进制进制数
//补齐0是 0x 00 00 01 23
// 数据高位-------------数据低位
// 内存中:
// 大端 00 00 01 23
// 小端 23 01 00 00
// 低地址-----------------高地址
1
2
3
4
5
6
7
8
9
10
11
from pwn import *
# p8 ubyte format requires 0 <= number <= 255
In [7]: p8(0x10)
Out[7]: b'\x10'
In [8]: p8(16)
Out[8]: b'\x10'
In [16]: p32(0x8048799)
Out[16]: b'\x99\x87\x04\x08'
第三个知识点 数字操作(python 实现)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# number & 0xff 意思是获取后两位十六进制,即一个字节
In [32]: 123222 & 0xff
Out[32]: 86
In [33]: hex(123222)
Out[33]: '0x1e156'
# number >> 8 意思是右移8位二进制,即去末尾一个字节
In [37]: 0x1e156 >> 8
Out[37]: 481
In [38]: hex(481)
Out[38]: '0x1e1'
# number << 8 意思是左移8位二进制,即从左往右添8个0
In [39]: 1 << 8
Out[39]: 256
python 原生实现数字转字节:
1
2
3
4
5
6
7
# 整数.to_bytes(字节长度,字节顺序,*字节符号)
In [67]: (230).to_bytes(1,'little',signed=False)
Out[67]: b'\xe6'
# 字节转数字,负数是补码
In [70]: int.from_bytes(b'\xfc\x00',byteorder='big',signed=True)
Out[70]: -1024
泄露的内存数,转换为数字:
1
2
3
4
5
6
7
8
9
10
11
In [4]: u32(b'\x23\x01\x00\x00')
Out[4]: 291
In [6]: 0x123
Out[6]: 291
In [14]: u32(b'\x12\x31\x23\x13')
Out[14]: 321073426
In [15]: 0x13233112
Out[15]: 321073426
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# %256 求余256 得到这个数的低8位
In [1]: 0x7fff7 % 256
Out[1]: 247
In [2]: hex(247)
Out[2]: '0xf7'
# /256 除以256 左移位8bit
In [10]: 0x7fff7 / 256
Out[10]: 2047.96484375
In [11]: int(0x7fff7 / 256)
Out[11]: 2047
In [12]: hex(2047)
Out[12]: '0x7ff'
]]>
@@ -578,9 +578,7 @@
- 用户态
-
- 保护
+ 二进制
@@ -589,11 +587,11 @@
- 二进制数学
-
- /2022/02/04/%E5%9F%BA%E7%A1%80/%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%95%B0%E5%AD%A6/
+ 用户态程序的5保护
+
+ /2022/02/04/%E5%9F%BA%E7%A1%80/%E7%94%A8%E6%88%B7%E6%80%81%E7%A8%8B%E5%BA%8F%E7%9A%845%E4%BF%9D%E6%8A%A4/
- 咳咳,由于打比赛老是基础不牢,地动山摇,故开此篇以文字形式记录下,把二进制牢牢的记住!第一个问题:计算机是如何存储数字的?
答:
首先是整数:
计算机中所有的整数都是以补码的形式存储的。整数的补吗就是它本身,负数的补码是它除了符号位的位数取反(这样做生成的叫反码)加一。
使用补码,可以将符号和数值统一处理,加法和减法也可以统一处理(CPU 只有加法器)
其余知识点,如浮点数表示等参考别人的资料,知道这点就很关键。
第二个知识点:【内存】中数据的存储(更新了十六进制数大小端存储)
十六进制和整型数据的存储
计算机中,二进制数可以转为十六进制数,一个十六进制数相当于 4 个 2 进制,也就是 4 个 bit,两个十六进制数为一个字节
大端:数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中
小端:数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中,内存储存即是小端序
在 pwn 中,内存一个地址即是以小端序存储的 unsigned int64 数字,在进行程序的输入时,伪造地址需要自行以字节码的形式将对应内存改成以数字形式存储在该处的样子(十六进制小端序,C 语言认可十六进制),输入顺序是从低地址到高地址。
由于是伪造,正常逻辑是输入可见的 ASCII 码字符,伪造逻辑不考虑这个,只考虑数字的内存形式,输入十六进制小端序形式的字节字符串数据即可伪造好地址!
例子:
1
2
3
4
5
6
7
8
9
int a = 0x123;
//在内存中,int类型有4个字节,2个二进制数为一个字节
//所以有8个十六进制进制数
//补齐0是 0x 00 00 01 23
// 数据高位-------------数据低位
// 内存中:
// 大端 00 00 01 23
// 小端 23 01 00 00
// 低地址-----------------高地址
1
2
3
4
5
6
7
8
9
10
11
from pwn import *
# p8 ubyte format requires 0 <= number <= 255
In [7]: p8(0x10)
Out[7]: b'\x10'
In [8]: p8(16)
Out[8]: b'\x10'
In [16]: p32(0x8048799)
Out[16]: b'\x99\x87\x04\x08'
第三个知识点 数字操作(python 实现)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# number & 0xff 意思是获取后两位十六进制,即一个字节
In [32]: 123222 & 0xff
Out[32]: 86
In [33]: hex(123222)
Out[33]: '0x1e156'
# number >> 8 意思是右移8位二进制,即去末尾一个字节
In [37]: 0x1e156 >> 8
Out[37]: 481
In [38]: hex(481)
Out[38]: '0x1e1'
# number << 8 意思是左移8位二进制,即从左往右添8个0
In [39]: 1 << 8
Out[39]: 256
python 原生实现数字转字节:
1
2
3
4
5
6
7
# 整数.to_bytes(字节长度,字节顺序,*字节符号)
In [67]: (230).to_bytes(1,'little',signed=False)
Out[67]: b'\xe6'
# 字节转数字,负数是补码
In [70]: int.from_bytes(b'\xfc\x00',byteorder='big',signed=True)
Out[70]: -1024
泄露的内存数,转换为数字:
1
2
3
4
5
6
7
8
9
10
11
In [4]: u32(b'\x23\x01\x00\x00')
Out[4]: 291
In [6]: 0x123
Out[6]: 291
In [14]: u32(b'\x12\x31\x23\x13')
Out[14]: 321073426
In [15]: 0x13233112
Out[15]: 321073426
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# %256 求余256 得到这个数的低8位
In [1]: 0x7fff7 % 256
Out[1]: 247
In [2]: hex(247)
Out[2]: '0xf7'
# /256 除以256 左移位8bit
In [10]: 0x7fff7 / 256
Out[10]: 2047.96484375
In [11]: int(0x7fff7 / 256)
Out[11]: 2047
In [12]: hex(2047)
Out[12]: '0x7ff'
]]>
+ ASLR 与 PIE 的同与异作用位置 归属 作用时间 ASLR 1:栈基地址(stack)、共享库(.so\libraries)、mmap 基地址
2:在1基础上,增加随机化堆基地址(chunk) 系统功能 作用于程序(ELF)装入内存运行时 PIE 代码段( .text )、初始化数据段( .data )、未初始化数据段( .bss ) 编译器功能 作用于程序(ELF)编译过程中
因为 ASLR 技术的出现,攻击者在 ROP 或者向进程中写数据时不得不先进行 leak,或者干脆放弃堆栈,转向 bss 或者其他地址固定的内存块。这个基本上所有机器都开启。
而 PIE(position-independent executable, 地址无关可执行文件)技术就是一个针对代码段.text, 数据段.*data,.bss 等固定地址的一个防护技术。同 ASLR 一样,应用了 PIE 的程序会在每次加载时都变换加载基址,从而使位于程序本身的 gadget 也失效。
没有 PIE 保护的程序,每次加载的基址都是固定的,64 位上一般是 0x400000。
与 eip 有关的固定下来了,也就是代码段和数据段,但堆栈、libc 还是随机的
bypass PIE:
1、partial write(部分写入)就是一种利用了 PIE 技术缺陷的 bypass 技术。由于内存的页载入机制,PIE 的随机化只能影响到单个内存页。通常来说,一个内存页大小为 0x1000,这就意味着不管地址怎么变,某条指令的后 12 位,3 个十六进制数的地址是始终不变的。因此通过覆盖 EIP 的后 8 或 16 位 (按字节写入,每字节 8 位)就可以快速爆破或者直接劫持 EIP。
2、泄露地址 bypass PIE
3、使用 vdso/vsyscall bypass PIE
Canary
绕过 canary:
1、泄露 canary
2、劫持__stack_chk_fail
The NX bits(the No-eXecute bits)
通过在内存页的标识中增加执行位,表示是否可以执行,开启后使栈区的数据不可执行
开启 nx 保护下,常用的手段为向 bss 段写入 shellcode 或堆区写入并使用 mprotect 赋予可执行权限
RELRO (RELocate Read-Only)
只读化,未开启可实现 got 覆盖攻击,fini_array 挟持到 main
Partial RELRO:部分 RELRO: 在程序装入后, 将其中一些段(如.dynamic)标记为只读, 防止程序的一些重定位信息被修改,仍然可实现 got 覆盖攻击
Full RELRO:完全 RELRO: 在部分 RELRO 的基础上, 在程序装入时, 直接解析完所有符号并填入对应的值, 此时所有的 GOT 表项都已初始化, 且不装入 link_map 与_dl_runtime_resolve 的地址
RWX 存在可读可写可执行段,即栈为可读可写可执行
]]>
@@ -605,7 +603,9 @@
- 二进制
+ 用户态
+
+ 保护
diff --git a/page/2/index.html b/page/2/index.html
index 456bd0b..206d7e3 100644
--- a/page/2/index.html
+++ b/page/2/index.html
@@ -636,23 +636,23 @@
-
- Glibc Heap Exploit
+
+ malloc源码分析
-
+
- 关于用户态中的 glibc堆的常见利用手法总结
+ 整理
@@ -714,23 +714,23 @@
-
- malloc源码分析
+
+ Glibc Heap Exploit
-
+
- 整理
+ 关于用户态中的 glibc堆的常见利用手法总结
diff --git a/page/3/index.html b/page/3/index.html
index 1ec43f6..93fcca7 100644
--- a/page/3/index.html
+++ b/page/3/index.html
@@ -249,23 +249,23 @@
-
- 用户态程序的5保护
+
+ 二进制数学
-
+
- 用户态程序的5保护
+ 二进制数学
@@ -304,9 +304,7 @@
-
- 二进制数学
+
+ 用户态程序的5保护
-
+
- 二进制数学
+ 用户态程序的5保护
@@ -373,7 +371,9 @@
diff --git a/tags/CTF/index.html b/tags/CTF/index.html
index fd0d844..0132036 100644
--- a/tags/CTF/index.html
+++ b/tags/CTF/index.html
@@ -253,15 +253,15 @@
2022
-
+
- Glibc Heap Exploit
+ malloc源码分析
-
+
- malloc源码分析
+ Glibc Heap Exploit
@@ -318,23 +316,23 @@
diff --git a/tags/encrypt/index.html b/tags/encrypt/index.html
index ec32a49..8804303 100644
--- a/tags/encrypt/index.html
+++ b/tags/encrypt/index.html
@@ -283,15 +283,15 @@
2022
-
+
- Glibc Heap Exploit
+ malloc源码分析
-
+
- malloc源码分析
+ Glibc Heap Exploit
diff --git "a/tags/\345\240\206/index.html" "b/tags/\345\240\206/index.html"
index 8ef425f..0d81936 100644
--- "a/tags/\345\240\206/index.html"
+++ "b/tags/\345\240\206/index.html"
@@ -253,15 +253,15 @@
2022
-
+
- Glibc Heap Exploit
+ malloc源码分析
-
+
- malloc源码分析
+ Glibc Heap Exploit
-
- 用户态程序的5保护
+
+ 二进制数学
下一篇
diff --git "a/2022/11/22/\346\235\202/\345\270\270\347\224\250\345\256\211\350\243\205/index.html" "b/2022/11/22/\346\235\202/\345\270\270\347\224\250\345\256\211\350\243\205/index.html"
index 5b8fb3e..131c73c 100644
--- "a/2022/11/22/\346\235\202/\345\270\270\347\224\250\345\256\211\350\243\205/index.html"
+++ "b/2022/11/22/\346\235\202/\345\270\270\347\224\250\345\256\211\350\243\205/index.html"
@@ -453,9 +453,9 @@
-
+
- malloc源码分析
+ Glibc Heap Exploit
上一篇
diff --git a/2022/11/23/PWN/Heap/Glibc_Heap_Exploit/index.html b/2022/11/23/PWN/Heap/Glibc_Heap_Exploit/index.html
index 0018c42..bb323c9 100644
--- a/2022/11/23/PWN/Heap/Glibc_Heap_Exploit/index.html
+++ b/2022/11/23/PWN/Heap/Glibc_Heap_Exploit/index.html
@@ -432,9 +432,9 @@ Glibc Heap Exploit
-
+
- OS命令注入总结
+ malloc源码分析
上一篇
@@ -442,8 +442,8 @@ Glibc Heap Exploit
-
- malloc源码分析
+
+ 常用安装
下一篇
diff --git "a/2022/11/23/PWN/Heap/malloc\346\272\220\347\240\201\345\210\206\346\236\220/index.html" "b/2022/11/23/PWN/Heap/malloc\346\272\220\347\240\201\345\210\206\346\236\220/index.html"
index 7f6e5a8..036c16a 100644
--- "a/2022/11/23/PWN/Heap/malloc\346\272\220\347\240\201\345\210\206\346\236\220/index.html"
+++ "b/2022/11/23/PWN/Heap/malloc\346\272\220\347\240\201\345\210\206\346\236\220/index.html"
@@ -432,9 +432,9 @@ malloc源码分析
-
+
- Glibc Heap Exploit
+ OS命令注入总结
上一篇
@@ -442,8 +442,8 @@ malloc源码分析
-
- 常用安装
+
+ Glibc Heap Exploit
下一篇
diff --git "a/2022/12/11/Vulnerability/Knowledge/\345\221\275\344\273\244\346\263\250\345\205\245/index.html" "b/2022/12/11/Vulnerability/Knowledge/\345\221\275\344\273\244\346\263\250\345\205\245/index.html"
index a481ffd..43f8d74 100644
--- "a/2022/12/11/Vulnerability/Knowledge/\345\221\275\344\273\244\346\263\250\345\205\245/index.html"
+++ "b/2022/12/11/Vulnerability/Knowledge/\345\221\275\344\273\244\346\263\250\345\205\245/index.html"
@@ -558,8 +558,8 @@
-
- Glibc Heap Exploit
+
+ malloc源码分析
下一篇
diff --git "a/2023/02/24/Vulnerability/CVE/CVE-2021-3156 sudo \345\240\206\346\272\242\345\207\272\346\274\217\346\264\236\345\244\215\347\216\260/index.html" "b/2023/02/24/Vulnerability/CVE/CVE-2021-3156 sudo \345\240\206\346\272\242\345\207\272\346\274\217\346\264\236\345\244\215\347\216\260/index.html"
index 6bf1674..d46b77f 100644
--- "a/2023/02/24/Vulnerability/CVE/CVE-2021-3156 sudo \345\240\206\346\272\242\345\207\272\346\274\217\346\264\236\345\244\215\347\216\260/index.html"
+++ "b/2023/02/24/Vulnerability/CVE/CVE-2021-3156 sudo \345\240\206\346\272\242\345\207\272\346\274\217\346\264\236\345\244\215\347\216\260/index.html"
@@ -467,7 +467,7 @@ CVE-2021-3156 sudo 堆溢出漏洞复现
Fluid.utils.createCssLink('/css/gitalk.css')
Fluid.utils.createScript('https://lib.baomitu.com/gitalk/1.8.0/gitalk.min.js', function() {
var options = Object.assign(
- {"clientID":"Iv23lilCzB3rOEhdE2Ru","clientSecret":"2790b4604de40791061d705fb80c8492eadbde87","repo":"blog-gitalk-comments","owner":"k3ppf0r","admin":["k3ppf0r"],"language":"zh-CN","labels":["Gitalk"],"perPage":10,"pagerDirection":"last","distractionFreeMode":false,"createIssueManually":true,"proxy":"https://cors-anywhere.azm.workers.dev/https://github.com/login/oauth/access_token"},
+ {"clientID":"Iv23lilCzB3rOEhdE2Ru","clientSecret":"2790b4604de40791061d705fb80c8492eadbde87","repo":"blog-gitalk-comments","owner":"k3ppf0r","admin":["k3ppf0r"],"language":"zh-CN","labels":["Gitalk"],"perPage":10,"pagerDirection":"last","distractionFreeMode":false,"createIssueManually":true,"proxy":"https://shielded-brushlands-08810.herokuapp.com/https://github.com/login/oauth/access_token"},
{
id: 'c1115ee670266f450ccf40953df7d9eb'
}
diff --git "a/2023/02/27/Vulnerability/CVE/CVE-2016-5195 \350\204\217\347\211\233\346\274\217\346\264\236\345\244\215\347\216\260/index.html" "b/2023/02/27/Vulnerability/CVE/CVE-2016-5195 \350\204\217\347\211\233\346\274\217\346\264\236\345\244\215\347\216\260/index.html"
index 998dfa1..459830a 100644
--- "a/2023/02/27/Vulnerability/CVE/CVE-2016-5195 \350\204\217\347\211\233\346\274\217\346\264\236\345\244\215\347\216\260/index.html"
+++ "b/2023/02/27/Vulnerability/CVE/CVE-2016-5195 \350\204\217\347\211\233\346\274\217\346\264\236\345\244\215\347\216\260/index.html"
@@ -459,7 +459,7 @@ CVE-2016-5195 脏牛漏洞复现
Fluid.utils.createCssLink('/css/gitalk.css')
Fluid.utils.createScript('https://lib.baomitu.com/gitalk/1.8.0/gitalk.min.js', function() {
var options = Object.assign(
- {"clientID":"Iv23lilCzB3rOEhdE2Ru","clientSecret":"2790b4604de40791061d705fb80c8492eadbde87","repo":"blog-gitalk-comments","owner":"k3ppf0r","admin":["k3ppf0r"],"language":"zh-CN","labels":["Gitalk"],"perPage":10,"pagerDirection":"last","distractionFreeMode":false,"createIssueManually":true,"proxy":"https://cors-anywhere.azm.workers.dev/https://github.com/login/oauth/access_token"},
+ {"clientID":"Iv23lilCzB3rOEhdE2Ru","clientSecret":"2790b4604de40791061d705fb80c8492eadbde87","repo":"blog-gitalk-comments","owner":"k3ppf0r","admin":["k3ppf0r"],"language":"zh-CN","labels":["Gitalk"],"perPage":10,"pagerDirection":"last","distractionFreeMode":false,"createIssueManually":true,"proxy":"https://shielded-brushlands-08810.herokuapp.com/https://github.com/login/oauth/access_token"},
{
id: 'b83bf4f1e9d55e2ccd9a21498d7799bb'
}
diff --git "a/2023/03/04/IOT\345\256\211\345\205\250/IOT\346\240\210\346\272\242\345\207\272/index.html" "b/2023/03/04/IOT\345\256\211\345\205\250/IOT\346\240\210\346\272\242\345\207\272/index.html"
index 602d705..81907bf 100644
--- "a/2023/03/04/IOT\345\256\211\345\205\250/IOT\346\240\210\346\272\242\345\207\272/index.html"
+++ "b/2023/03/04/IOT\345\256\211\345\205\250/IOT\346\240\210\346\272\242\345\207\272/index.html"
@@ -446,7 +446,7 @@ 2022
-
+
- 用户态程序的5保护
+ 二进制数学
-
+
- 二进制数学
+ 用户态程序的5保护
diff --git a/archives/2022/11/index.html b/archives/2022/11/index.html
index 21e3117..4675551 100644
--- a/archives/2022/11/index.html
+++ b/archives/2022/11/index.html
@@ -249,15 +249,15 @@
2022
-
+
- Glibc Heap Exploit
+ malloc源码分析
-
+
- malloc源码分析
+ Glibc Heap Exploit
diff --git a/archives/2022/index.html b/archives/2022/index.html
index c41ce75..a95489f 100644
--- a/archives/2022/index.html
+++ b/archives/2022/index.html
@@ -261,15 +261,15 @@
-
+
- Glibc Heap Exploit
+ malloc源码分析
-
+
- malloc源码分析
+ Glibc Heap Exploit
@@ -291,15 +291,15 @@
-
+
- 用户态程序的5保护
+ 二进制数学
-
+
- 二进制数学
+ 用户态程序的5保护
diff --git a/archives/page/2/index.html b/archives/page/2/index.html
index 50f487b..4aebd95 100644
--- a/archives/page/2/index.html
+++ b/archives/page/2/index.html
@@ -282,15 +282,15 @@
-
+
- Glibc Heap Exploit
+ malloc源码分析
-
+
- malloc源码分析
+ Glibc Heap Exploit
diff --git a/archives/page/3/index.html b/archives/page/3/index.html
index b419b98..437e863 100644
--- a/archives/page/3/index.html
+++ b/archives/page/3/index.html
@@ -249,15 +249,15 @@
2022
-
+
- 用户态程序的5保护
+ 二进制数学
-
+
- 二进制数学
+ 用户态程序的5保护
diff --git a/categories/PWN/Heap/index.html b/categories/PWN/Heap/index.html
index f379842..ef61360 100644
--- a/categories/PWN/Heap/index.html
+++ b/categories/PWN/Heap/index.html
@@ -258,15 +258,15 @@
2022
-
+
- Glibc Heap Exploit
+ malloc源码分析
-
+
- malloc源码分析
+ Glibc Heap Exploit
diff --git a/categories/PWN/index.html b/categories/PWN/index.html
index a4953c2..3d8534d 100644
--- a/categories/PWN/index.html
+++ b/categories/PWN/index.html
@@ -258,15 +258,15 @@
2022
-
+
- Glibc Heap Exploit
+ malloc源码分析
-
+
- malloc源码分析
+ Glibc Heap Exploit
diff --git a/categories/index.html b/categories/index.html
index 380b015..79c4594 100644
--- a/categories/index.html
+++ b/categories/index.html
@@ -495,19 +495,19 @@
-
- 用户态程序的5保护
+ 二进制数学
-
- 二进制数学
+ 用户态程序的5保护
@@ -642,22 +642,22 @@
- Vulnerability
+ PWN
-
+
3
-
+
@@ -674,22 +674,22 @@
- CVE
+ Heap
-
+
- 2
+ 3
-
+
@@ -698,61 +698,28 @@
-
- CVE-2016-5195 脏牛漏洞复现
+ 堆介绍简单综述
-
- CVE-2021-3156 sudo 堆溢出漏洞复现
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Knowledge
-
-
-
-
-
-
- 1
+ malloc源码分析
-
-
-
-
-
-
-
- OS命令注入总结
+ Glibc Heap Exploit
@@ -771,22 +738,22 @@
- PWN
+ Vulnerability
-
+
3
-
+
@@ -803,22 +770,22 @@
- Heap
+ CVE
-
+
- 3
+ 2
-
+
@@ -827,28 +794,61 @@
-
- 堆介绍简单综述
+ CVE-2016-5195 脏牛漏洞复现
-
- Glibc Heap Exploit
+ CVE-2021-3156 sudo 堆溢出漏洞复现
+
+
+
+
+
+
+
+
+
+
+
+ Knowledge
+
+
+
+
+
+ 1
+
-
+
+
+
+
+
+
+
+
+
- malloc源码分析
+ OS命令注入总结
diff --git "a/categories/\345\237\272\347\241\200/index.html" "b/categories/\345\237\272\347\241\200/index.html"
index 99bc15b..37197c8 100644
--- "a/categories/\345\237\272\347\241\200/index.html"
+++ "b/categories/\345\237\272\347\241\200/index.html"
@@ -261,15 +261,15 @@
-
+
- 用户态程序的5保护
+ 二进制数学
-
+
- 二进制数学
+ 用户态程序的5保护
diff --git a/local-search.xml b/local-search.xml
index f93528e..c63c8d0 100644
--- a/local-search.xml
+++ b/local-search.xml
@@ -427,11 +427,11 @@
- Glibc Heap Exploit
-
- /2022/11/23/PWN/Heap/Glibc_Heap_Exploit/
+ malloc源码分析
+
+ /2022/11/23/PWN/Heap/malloc%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/
- ]]>
+ ]]>
@@ -458,11 +458,11 @@
- malloc源码分析
-
- /2022/11/23/PWN/Heap/malloc%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/
+ Glibc Heap Exploit
+
+ /2022/11/23/PWN/Heap/Glibc_Heap_Exploit/
- ]]>
+ ]]>
@@ -562,11 +562,11 @@
- 用户态程序的5保护
-
- /2022/02/04/%E5%9F%BA%E7%A1%80/%E7%94%A8%E6%88%B7%E6%80%81%E7%A8%8B%E5%BA%8F%E7%9A%845%E4%BF%9D%E6%8A%A4/
+ 二进制数学
+
+ /2022/02/04/%E5%9F%BA%E7%A1%80/%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%95%B0%E5%AD%A6/
- ASLR 与 PIE 的同与异作用位置 归属 作用时间 ASLR 1:栈基地址(stack)、共享库(.so\libraries)、mmap 基地址
2:在1基础上,增加随机化堆基地址(chunk) 系统功能 作用于程序(ELF)装入内存运行时 PIE 代码段( .text )、初始化数据段( .data )、未初始化数据段( .bss ) 编译器功能 作用于程序(ELF)编译过程中
因为 ASLR 技术的出现,攻击者在 ROP 或者向进程中写数据时不得不先进行 leak,或者干脆放弃堆栈,转向 bss 或者其他地址固定的内存块。这个基本上所有机器都开启。
而 PIE(position-independent executable, 地址无关可执行文件)技术就是一个针对代码段.text, 数据段.*data,.bss 等固定地址的一个防护技术。同 ASLR 一样,应用了 PIE 的程序会在每次加载时都变换加载基址,从而使位于程序本身的 gadget 也失效。
没有 PIE 保护的程序,每次加载的基址都是固定的,64 位上一般是 0x400000。
与 eip 有关的固定下来了,也就是代码段和数据段,但堆栈、libc 还是随机的
bypass PIE:
1、partial write(部分写入)就是一种利用了 PIE 技术缺陷的 bypass 技术。由于内存的页载入机制,PIE 的随机化只能影响到单个内存页。通常来说,一个内存页大小为 0x1000,这就意味着不管地址怎么变,某条指令的后 12 位,3 个十六进制数的地址是始终不变的。因此通过覆盖 EIP 的后 8 或 16 位 (按字节写入,每字节 8 位)就可以快速爆破或者直接劫持 EIP。
2、泄露地址 bypass PIE
3、使用 vdso/vsyscall bypass PIE
Canary
绕过 canary:
1、泄露 canary
2、劫持__stack_chk_fail
The NX bits(the No-eXecute bits)
通过在内存页的标识中增加执行位,表示是否可以执行,开启后使栈区的数据不可执行
开启 nx 保护下,常用的手段为向 bss 段写入 shellcode 或堆区写入并使用 mprotect 赋予可执行权限
RELRO (RELocate Read-Only)
只读化,未开启可实现 got 覆盖攻击,fini_array 挟持到 main
Partial RELRO:部分 RELRO: 在程序装入后, 将其中一些段(如.dynamic)标记为只读, 防止程序的一些重定位信息被修改,仍然可实现 got 覆盖攻击
Full RELRO:完全 RELRO: 在部分 RELRO 的基础上, 在程序装入时, 直接解析完所有符号并填入对应的值, 此时所有的 GOT 表项都已初始化, 且不装入 link_map 与_dl_runtime_resolve 的地址
RWX 存在可读可写可执行段,即栈为可读可写可执行
]]>
+ 咳咳,由于打比赛老是基础不牢,地动山摇,故开此篇以文字形式记录下,把二进制牢牢的记住!第一个问题:计算机是如何存储数字的?
答:
首先是整数:
计算机中所有的整数都是以补码的形式存储的。整数的补吗就是它本身,负数的补码是它除了符号位的位数取反(这样做生成的叫反码)加一。
使用补码,可以将符号和数值统一处理,加法和减法也可以统一处理(CPU 只有加法器)
其余知识点,如浮点数表示等参考别人的资料,知道这点就很关键。
第二个知识点:【内存】中数据的存储(更新了十六进制数大小端存储)
十六进制和整型数据的存储
计算机中,二进制数可以转为十六进制数,一个十六进制数相当于 4 个 2 进制,也就是 4 个 bit,两个十六进制数为一个字节
大端:数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中
小端:数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中,内存储存即是小端序
在 pwn 中,内存一个地址即是以小端序存储的 unsigned int64 数字,在进行程序的输入时,伪造地址需要自行以字节码的形式将对应内存改成以数字形式存储在该处的样子(十六进制小端序,C 语言认可十六进制),输入顺序是从低地址到高地址。
由于是伪造,正常逻辑是输入可见的 ASCII 码字符,伪造逻辑不考虑这个,只考虑数字的内存形式,输入十六进制小端序形式的字节字符串数据即可伪造好地址!
例子:
1
2
3
4
5
6
7
8
9
int a = 0x123;
//在内存中,int类型有4个字节,2个二进制数为一个字节
//所以有8个十六进制进制数
//补齐0是 0x 00 00 01 23
// 数据高位-------------数据低位
// 内存中:
// 大端 00 00 01 23
// 小端 23 01 00 00
// 低地址-----------------高地址
1
2
3
4
5
6
7
8
9
10
11
from pwn import *
# p8 ubyte format requires 0 <= number <= 255
In [7]: p8(0x10)
Out[7]: b'\x10'
In [8]: p8(16)
Out[8]: b'\x10'
In [16]: p32(0x8048799)
Out[16]: b'\x99\x87\x04\x08'
第三个知识点 数字操作(python 实现)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# number & 0xff 意思是获取后两位十六进制,即一个字节
In [32]: 123222 & 0xff
Out[32]: 86
In [33]: hex(123222)
Out[33]: '0x1e156'
# number >> 8 意思是右移8位二进制,即去末尾一个字节
In [37]: 0x1e156 >> 8
Out[37]: 481
In [38]: hex(481)
Out[38]: '0x1e1'
# number << 8 意思是左移8位二进制,即从左往右添8个0
In [39]: 1 << 8
Out[39]: 256
python 原生实现数字转字节:
1
2
3
4
5
6
7
# 整数.to_bytes(字节长度,字节顺序,*字节符号)
In [67]: (230).to_bytes(1,'little',signed=False)
Out[67]: b'\xe6'
# 字节转数字,负数是补码
In [70]: int.from_bytes(b'\xfc\x00',byteorder='big',signed=True)
Out[70]: -1024
泄露的内存数,转换为数字:
1
2
3
4
5
6
7
8
9
10
11
In [4]: u32(b'\x23\x01\x00\x00')
Out[4]: 291
In [6]: 0x123
Out[6]: 291
In [14]: u32(b'\x12\x31\x23\x13')
Out[14]: 321073426
In [15]: 0x13233112
Out[15]: 321073426
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# %256 求余256 得到这个数的低8位
In [1]: 0x7fff7 % 256
Out[1]: 247
In [2]: hex(247)
Out[2]: '0xf7'
# /256 除以256 左移位8bit
In [10]: 0x7fff7 / 256
Out[10]: 2047.96484375
In [11]: int(0x7fff7 / 256)
Out[11]: 2047
In [12]: hex(2047)
Out[12]: '0x7ff'
]]>
@@ -578,9 +578,7 @@
- 用户态
-
- 保护
+ 二进制
@@ -589,11 +587,11 @@
- 二进制数学
-
- /2022/02/04/%E5%9F%BA%E7%A1%80/%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%95%B0%E5%AD%A6/
+ 用户态程序的5保护
+
+ /2022/02/04/%E5%9F%BA%E7%A1%80/%E7%94%A8%E6%88%B7%E6%80%81%E7%A8%8B%E5%BA%8F%E7%9A%845%E4%BF%9D%E6%8A%A4/
- 咳咳,由于打比赛老是基础不牢,地动山摇,故开此篇以文字形式记录下,把二进制牢牢的记住!第一个问题:计算机是如何存储数字的?
答:
首先是整数:
计算机中所有的整数都是以补码的形式存储的。整数的补吗就是它本身,负数的补码是它除了符号位的位数取反(这样做生成的叫反码)加一。
使用补码,可以将符号和数值统一处理,加法和减法也可以统一处理(CPU 只有加法器)
其余知识点,如浮点数表示等参考别人的资料,知道这点就很关键。
第二个知识点:【内存】中数据的存储(更新了十六进制数大小端存储)
十六进制和整型数据的存储
计算机中,二进制数可以转为十六进制数,一个十六进制数相当于 4 个 2 进制,也就是 4 个 bit,两个十六进制数为一个字节
大端:数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中
小端:数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中,内存储存即是小端序
在 pwn 中,内存一个地址即是以小端序存储的 unsigned int64 数字,在进行程序的输入时,伪造地址需要自行以字节码的形式将对应内存改成以数字形式存储在该处的样子(十六进制小端序,C 语言认可十六进制),输入顺序是从低地址到高地址。
由于是伪造,正常逻辑是输入可见的 ASCII 码字符,伪造逻辑不考虑这个,只考虑数字的内存形式,输入十六进制小端序形式的字节字符串数据即可伪造好地址!
例子:
1
2
3
4
5
6
7
8
9
int a = 0x123;
//在内存中,int类型有4个字节,2个二进制数为一个字节
//所以有8个十六进制进制数
//补齐0是 0x 00 00 01 23
// 数据高位-------------数据低位
// 内存中:
// 大端 00 00 01 23
// 小端 23 01 00 00
// 低地址-----------------高地址
1
2
3
4
5
6
7
8
9
10
11
from pwn import *
# p8 ubyte format requires 0 <= number <= 255
In [7]: p8(0x10)
Out[7]: b'\x10'
In [8]: p8(16)
Out[8]: b'\x10'
In [16]: p32(0x8048799)
Out[16]: b'\x99\x87\x04\x08'
第三个知识点 数字操作(python 实现)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# number & 0xff 意思是获取后两位十六进制,即一个字节
In [32]: 123222 & 0xff
Out[32]: 86
In [33]: hex(123222)
Out[33]: '0x1e156'
# number >> 8 意思是右移8位二进制,即去末尾一个字节
In [37]: 0x1e156 >> 8
Out[37]: 481
In [38]: hex(481)
Out[38]: '0x1e1'
# number << 8 意思是左移8位二进制,即从左往右添8个0
In [39]: 1 << 8
Out[39]: 256
python 原生实现数字转字节:
1
2
3
4
5
6
7
# 整数.to_bytes(字节长度,字节顺序,*字节符号)
In [67]: (230).to_bytes(1,'little',signed=False)
Out[67]: b'\xe6'
# 字节转数字,负数是补码
In [70]: int.from_bytes(b'\xfc\x00',byteorder='big',signed=True)
Out[70]: -1024
泄露的内存数,转换为数字:
1
2
3
4
5
6
7
8
9
10
11
In [4]: u32(b'\x23\x01\x00\x00')
Out[4]: 291
In [6]: 0x123
Out[6]: 291
In [14]: u32(b'\x12\x31\x23\x13')
Out[14]: 321073426
In [15]: 0x13233112
Out[15]: 321073426
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# %256 求余256 得到这个数的低8位
In [1]: 0x7fff7 % 256
Out[1]: 247
In [2]: hex(247)
Out[2]: '0xf7'
# /256 除以256 左移位8bit
In [10]: 0x7fff7 / 256
Out[10]: 2047.96484375
In [11]: int(0x7fff7 / 256)
Out[11]: 2047
In [12]: hex(2047)
Out[12]: '0x7ff'
]]>
+ ASLR 与 PIE 的同与异作用位置 归属 作用时间 ASLR 1:栈基地址(stack)、共享库(.so\libraries)、mmap 基地址
2:在1基础上,增加随机化堆基地址(chunk) 系统功能 作用于程序(ELF)装入内存运行时 PIE 代码段( .text )、初始化数据段( .data )、未初始化数据段( .bss ) 编译器功能 作用于程序(ELF)编译过程中
因为 ASLR 技术的出现,攻击者在 ROP 或者向进程中写数据时不得不先进行 leak,或者干脆放弃堆栈,转向 bss 或者其他地址固定的内存块。这个基本上所有机器都开启。
而 PIE(position-independent executable, 地址无关可执行文件)技术就是一个针对代码段.text, 数据段.*data,.bss 等固定地址的一个防护技术。同 ASLR 一样,应用了 PIE 的程序会在每次加载时都变换加载基址,从而使位于程序本身的 gadget 也失效。
没有 PIE 保护的程序,每次加载的基址都是固定的,64 位上一般是 0x400000。
与 eip 有关的固定下来了,也就是代码段和数据段,但堆栈、libc 还是随机的
bypass PIE:
1、partial write(部分写入)就是一种利用了 PIE 技术缺陷的 bypass 技术。由于内存的页载入机制,PIE 的随机化只能影响到单个内存页。通常来说,一个内存页大小为 0x1000,这就意味着不管地址怎么变,某条指令的后 12 位,3 个十六进制数的地址是始终不变的。因此通过覆盖 EIP 的后 8 或 16 位 (按字节写入,每字节 8 位)就可以快速爆破或者直接劫持 EIP。
2、泄露地址 bypass PIE
3、使用 vdso/vsyscall bypass PIE
Canary
绕过 canary:
1、泄露 canary
2、劫持__stack_chk_fail
The NX bits(the No-eXecute bits)
通过在内存页的标识中增加执行位,表示是否可以执行,开启后使栈区的数据不可执行
开启 nx 保护下,常用的手段为向 bss 段写入 shellcode 或堆区写入并使用 mprotect 赋予可执行权限
RELRO (RELocate Read-Only)
只读化,未开启可实现 got 覆盖攻击,fini_array 挟持到 main
Partial RELRO:部分 RELRO: 在程序装入后, 将其中一些段(如.dynamic)标记为只读, 防止程序的一些重定位信息被修改,仍然可实现 got 覆盖攻击
Full RELRO:完全 RELRO: 在部分 RELRO 的基础上, 在程序装入时, 直接解析完所有符号并填入对应的值, 此时所有的 GOT 表项都已初始化, 且不装入 link_map 与_dl_runtime_resolve 的地址
RWX 存在可读可写可执行段,即栈为可读可写可执行
]]>
@@ -605,7 +603,9 @@
- 二进制
+ 用户态
+
+ 保护
diff --git a/page/2/index.html b/page/2/index.html
index 456bd0b..206d7e3 100644
--- a/page/2/index.html
+++ b/page/2/index.html
@@ -636,23 +636,23 @@
-
- Glibc Heap Exploit
+
+ malloc源码分析
-
+
- 关于用户态中的 glibc堆的常见利用手法总结
+ 整理
@@ -714,23 +714,23 @@
-
- malloc源码分析
+
+ Glibc Heap Exploit
-
+
- 整理
+ 关于用户态中的 glibc堆的常见利用手法总结
diff --git a/page/3/index.html b/page/3/index.html
index 1ec43f6..93fcca7 100644
--- a/page/3/index.html
+++ b/page/3/index.html
@@ -249,23 +249,23 @@
-
- 用户态程序的5保护
+
+ 二进制数学
-
+
- 用户态程序的5保护
+ 二进制数学
@@ -304,9 +304,7 @@
-
- 二进制数学
+
+ 用户态程序的5保护
-
+
- 二进制数学
+ 用户态程序的5保护
@@ -373,7 +371,9 @@
diff --git a/tags/CTF/index.html b/tags/CTF/index.html
index fd0d844..0132036 100644
--- a/tags/CTF/index.html
+++ b/tags/CTF/index.html
@@ -253,15 +253,15 @@
2022
-
+
- Glibc Heap Exploit
+ malloc源码分析
-
+
- malloc源码分析
+ Glibc Heap Exploit
@@ -318,23 +316,23 @@
diff --git a/tags/encrypt/index.html b/tags/encrypt/index.html
index ec32a49..8804303 100644
--- a/tags/encrypt/index.html
+++ b/tags/encrypt/index.html
@@ -283,15 +283,15 @@
2022
-
+
- Glibc Heap Exploit
+ malloc源码分析
-
+
- malloc源码分析
+ Glibc Heap Exploit
diff --git "a/tags/\345\240\206/index.html" "b/tags/\345\240\206/index.html"
index 8ef425f..0d81936 100644
--- "a/tags/\345\240\206/index.html"
+++ "b/tags/\345\240\206/index.html"
@@ -253,15 +253,15 @@
2022
-
+
- Glibc Heap Exploit
+ malloc源码分析
-
+
- malloc源码分析
+ Glibc Heap Exploit
Glibc Heap Exploit
Glibc Heap Exploit
malloc源码分析
malloc源码分析
-
- Glibc Heap Exploit
+
+ malloc源码分析
下一篇
diff --git "a/2023/02/24/Vulnerability/CVE/CVE-2021-3156 sudo \345\240\206\346\272\242\345\207\272\346\274\217\346\264\236\345\244\215\347\216\260/index.html" "b/2023/02/24/Vulnerability/CVE/CVE-2021-3156 sudo \345\240\206\346\272\242\345\207\272\346\274\217\346\264\236\345\244\215\347\216\260/index.html"
index 6bf1674..d46b77f 100644
--- "a/2023/02/24/Vulnerability/CVE/CVE-2021-3156 sudo \345\240\206\346\272\242\345\207\272\346\274\217\346\264\236\345\244\215\347\216\260/index.html"
+++ "b/2023/02/24/Vulnerability/CVE/CVE-2021-3156 sudo \345\240\206\346\272\242\345\207\272\346\274\217\346\264\236\345\244\215\347\216\260/index.html"
@@ -467,7 +467,7 @@ CVE-2021-3156 sudo 堆溢出漏洞复现
Fluid.utils.createCssLink('/css/gitalk.css')
Fluid.utils.createScript('https://lib.baomitu.com/gitalk/1.8.0/gitalk.min.js', function() {
var options = Object.assign(
- {"clientID":"Iv23lilCzB3rOEhdE2Ru","clientSecret":"2790b4604de40791061d705fb80c8492eadbde87","repo":"blog-gitalk-comments","owner":"k3ppf0r","admin":["k3ppf0r"],"language":"zh-CN","labels":["Gitalk"],"perPage":10,"pagerDirection":"last","distractionFreeMode":false,"createIssueManually":true,"proxy":"https://cors-anywhere.azm.workers.dev/https://github.com/login/oauth/access_token"},
+ {"clientID":"Iv23lilCzB3rOEhdE2Ru","clientSecret":"2790b4604de40791061d705fb80c8492eadbde87","repo":"blog-gitalk-comments","owner":"k3ppf0r","admin":["k3ppf0r"],"language":"zh-CN","labels":["Gitalk"],"perPage":10,"pagerDirection":"last","distractionFreeMode":false,"createIssueManually":true,"proxy":"https://shielded-brushlands-08810.herokuapp.com/https://github.com/login/oauth/access_token"},
{
id: 'c1115ee670266f450ccf40953df7d9eb'
}
diff --git "a/2023/02/27/Vulnerability/CVE/CVE-2016-5195 \350\204\217\347\211\233\346\274\217\346\264\236\345\244\215\347\216\260/index.html" "b/2023/02/27/Vulnerability/CVE/CVE-2016-5195 \350\204\217\347\211\233\346\274\217\346\264\236\345\244\215\347\216\260/index.html"
index 998dfa1..459830a 100644
--- "a/2023/02/27/Vulnerability/CVE/CVE-2016-5195 \350\204\217\347\211\233\346\274\217\346\264\236\345\244\215\347\216\260/index.html"
+++ "b/2023/02/27/Vulnerability/CVE/CVE-2016-5195 \350\204\217\347\211\233\346\274\217\346\264\236\345\244\215\347\216\260/index.html"
@@ -459,7 +459,7 @@ CVE-2016-5195 脏牛漏洞复现
Fluid.utils.createCssLink('/css/gitalk.css')
Fluid.utils.createScript('https://lib.baomitu.com/gitalk/1.8.0/gitalk.min.js', function() {
var options = Object.assign(
- {"clientID":"Iv23lilCzB3rOEhdE2Ru","clientSecret":"2790b4604de40791061d705fb80c8492eadbde87","repo":"blog-gitalk-comments","owner":"k3ppf0r","admin":["k3ppf0r"],"language":"zh-CN","labels":["Gitalk"],"perPage":10,"pagerDirection":"last","distractionFreeMode":false,"createIssueManually":true,"proxy":"https://cors-anywhere.azm.workers.dev/https://github.com/login/oauth/access_token"},
+ {"clientID":"Iv23lilCzB3rOEhdE2Ru","clientSecret":"2790b4604de40791061d705fb80c8492eadbde87","repo":"blog-gitalk-comments","owner":"k3ppf0r","admin":["k3ppf0r"],"language":"zh-CN","labels":["Gitalk"],"perPage":10,"pagerDirection":"last","distractionFreeMode":false,"createIssueManually":true,"proxy":"https://shielded-brushlands-08810.herokuapp.com/https://github.com/login/oauth/access_token"},
{
id: 'b83bf4f1e9d55e2ccd9a21498d7799bb'
}
diff --git "a/2023/03/04/IOT\345\256\211\345\205\250/IOT\346\240\210\346\272\242\345\207\272/index.html" "b/2023/03/04/IOT\345\256\211\345\205\250/IOT\346\240\210\346\272\242\345\207\272/index.html"
index 602d705..81907bf 100644
--- "a/2023/03/04/IOT\345\256\211\345\205\250/IOT\346\240\210\346\272\242\345\207\272/index.html"
+++ "b/2023/03/04/IOT\345\256\211\345\205\250/IOT\346\240\210\346\272\242\345\207\272/index.html"
@@ -446,7 +446,7 @@ 2022
-
+
- 用户态程序的5保护
+ 二进制数学
-
+
- 二进制数学
+ 用户态程序的5保护
diff --git a/archives/2022/11/index.html b/archives/2022/11/index.html
index 21e3117..4675551 100644
--- a/archives/2022/11/index.html
+++ b/archives/2022/11/index.html
@@ -249,15 +249,15 @@
2022
- + -2022
- + -2022
- + -2022
- + -作用位置 | 归属 | 作用时间 | |
---|---|---|---|
ASLR | 1:栈基地址(stack)、共享库(.so\libraries)、mmap 基地址 2:在1基础上,增加随机化堆基地址(chunk) | 系统功能 | 作用于程序(ELF)装入内存运行时 |
PIE | 代码段( .text )、初始化数据段( .data )、未初始化数据段( .bss ) | 编译器功能 | 作用于程序(ELF)编译过程中 |
因为 ASLR 技术的出现,攻击者在 ROP 或者向进程中写数据时不得不先进行 leak,或者干脆放弃堆栈,转向 bss 或者其他地址固定的内存块。这个基本上所有机器都开启。
而 PIE(position-independent executable, 地址无关可执行文件)技术就是一个针对代码段.text, 数据段.*data,.bss 等固定地址的一个防护技术。同 ASLR 一样,应用了 PIE 的程序会在每次加载时都变换加载基址,从而使位于程序本身的 gadget 也失效。
没有 PIE 保护的程序,每次加载的基址都是固定的,64 位上一般是 0x400000。
与 eip 有关的固定下来了,也就是代码段和数据段,但堆栈、libc 还是随机的
bypass PIE:
1、partial write(部分写入)就是一种利用了 PIE 技术缺陷的 bypass 技术。由于内存的页载入机制,PIE 的随机化只能影响到单个内存页。通常来说,一个内存页大小为 0x1000,这就意味着不管地址怎么变,某条指令的后 12 位,3 个十六进制数的地址是始终不变的。因此通过覆盖 EIP 的后 8 或 16 位 (按字节写入,每字节 8 位)就可以快速爆破或者直接劫持 EIP。
2、泄露地址 bypass PIE
3、使用 vdso/vsyscall bypass PIE
Canary
绕过 canary:
1、泄露 canary
2、劫持__stack_chk_fail
The NX bits(the No-eXecute bits)
通过在内存页的标识中增加执行位,表示是否可以执行,开启后使栈区的数据不可执行
开启 nx 保护下,常用的手段为向 bss 段写入 shellcode 或堆区写入并使用 mprotect 赋予可执行权限
RELRO (RELocate Read-Only)
只读化,未开启可实现 got 覆盖攻击,fini_array 挟持到 main
Partial RELRO:部分 RELRO: 在程序装入后, 将其中一些段(如.dynamic)标记为只读, 防止程序的一些重定位信息被修改,仍然可实现 got 覆盖攻击
Full RELRO:完全 RELRO: 在部分 RELRO 的基础上, 在程序装入时, 直接解析完所有符号并填入对应的值, 此时所有的 GOT 表项都已初始化, 且不装入 link_map 与_dl_runtime_resolve 的地址
RWX 存在可读可写可执行段,即栈为可读可写可执行
]]>第一个问题:计算机是如何存储数字的?
答:
首先是整数:
计算机中所有的整数都是以补码的形式存储的。整数的补吗就是它本身,负数的补码是它除了符号位的位数取反(这样做生成的叫反码)加一。
使用补码,可以将符号和数值统一处理,加法和减法也可以统一处理(CPU 只有加法器)
其余知识点,如浮点数表示等参考别人的资料,知道这点就很关键。
第二个知识点:【内存】中数据的存储(更新了十六进制数大小端存储)
十六进制和整型数据的存储
计算机中,二进制数可以转为十六进制数,一个十六进制数相当于 4 个 2 进制,也就是 4 个 bit,两个十六进制数为一个字节
大端:数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中
小端:数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中,内存储存即是小端序
在 pwn 中,内存一个地址即是以小端序存储的 unsigned int64 数字,在进行程序的输入时,伪造地址需要自行以字节码的形式将对应内存改成以数字形式存储在该处的样子(十六进制小端序,C 语言认可十六进制),输入顺序是从低地址到高地址。
由于是伪造,正常逻辑是输入可见的 ASCII 码字符,伪造逻辑不考虑这个,只考虑数字的内存形式,输入十六进制小端序形式的字节字符串数据即可伪造好地址!
例子:
1 |
|
1 |
|
第三个知识点 数字操作(python 实现)
1 |
|
python 原生实现数字转字节:
1 |
|
泄露的内存数,转换为数字:
1 |
|
1 |
|
第一个问题:计算机是如何存储数字的?
答:
首先是整数:
计算机中所有的整数都是以补码的形式存储的。整数的补吗就是它本身,负数的补码是它除了符号位的位数取反(这样做生成的叫反码)加一。
使用补码,可以将符号和数值统一处理,加法和减法也可以统一处理(CPU 只有加法器)
其余知识点,如浮点数表示等参考别人的资料,知道这点就很关键。
第二个知识点:【内存】中数据的存储(更新了十六进制数大小端存储)
十六进制和整型数据的存储
计算机中,二进制数可以转为十六进制数,一个十六进制数相当于 4 个 2 进制,也就是 4 个 bit,两个十六进制数为一个字节
大端:数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中
小端:数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中,内存储存即是小端序
在 pwn 中,内存一个地址即是以小端序存储的 unsigned int64 数字,在进行程序的输入时,伪造地址需要自行以字节码的形式将对应内存改成以数字形式存储在该处的样子(十六进制小端序,C 语言认可十六进制),输入顺序是从低地址到高地址。
由于是伪造,正常逻辑是输入可见的 ASCII 码字符,伪造逻辑不考虑这个,只考虑数字的内存形式,输入十六进制小端序形式的字节字符串数据即可伪造好地址!
例子:
1 |
|
1 |
|
第三个知识点 数字操作(python 实现)
1 |
|
python 原生实现数字转字节:
1 |
|
泄露的内存数,转换为数字:
1 |
|
1 |
|
作用位置 | 归属 | 作用时间 | |
---|---|---|---|
ASLR | 1:栈基地址(stack)、共享库(.so\libraries)、mmap 基地址 2:在1基础上,增加随机化堆基地址(chunk) | 系统功能 | 作用于程序(ELF)装入内存运行时 |
PIE | 代码段( .text )、初始化数据段( .data )、未初始化数据段( .bss ) | 编译器功能 | 作用于程序(ELF)编译过程中 |
因为 ASLR 技术的出现,攻击者在 ROP 或者向进程中写数据时不得不先进行 leak,或者干脆放弃堆栈,转向 bss 或者其他地址固定的内存块。这个基本上所有机器都开启。
而 PIE(position-independent executable, 地址无关可执行文件)技术就是一个针对代码段.text, 数据段.*data,.bss 等固定地址的一个防护技术。同 ASLR 一样,应用了 PIE 的程序会在每次加载时都变换加载基址,从而使位于程序本身的 gadget 也失效。
没有 PIE 保护的程序,每次加载的基址都是固定的,64 位上一般是 0x400000。
与 eip 有关的固定下来了,也就是代码段和数据段,但堆栈、libc 还是随机的
bypass PIE:
1、partial write(部分写入)就是一种利用了 PIE 技术缺陷的 bypass 技术。由于内存的页载入机制,PIE 的随机化只能影响到单个内存页。通常来说,一个内存页大小为 0x1000,这就意味着不管地址怎么变,某条指令的后 12 位,3 个十六进制数的地址是始终不变的。因此通过覆盖 EIP 的后 8 或 16 位 (按字节写入,每字节 8 位)就可以快速爆破或者直接劫持 EIP。
2、泄露地址 bypass PIE
3、使用 vdso/vsyscall bypass PIE
Canary
绕过 canary:
1、泄露 canary
2、劫持__stack_chk_fail
The NX bits(the No-eXecute bits)
通过在内存页的标识中增加执行位,表示是否可以执行,开启后使栈区的数据不可执行
开启 nx 保护下,常用的手段为向 bss 段写入 shellcode 或堆区写入并使用 mprotect 赋予可执行权限
RELRO (RELocate Read-Only)
只读化,未开启可实现 got 覆盖攻击,fini_array 挟持到 main
Partial RELRO:部分 RELRO: 在程序装入后, 将其中一些段(如.dynamic)标记为只读, 防止程序的一些重定位信息被修改,仍然可实现 got 覆盖攻击
Full RELRO:完全 RELRO: 在部分 RELRO 的基础上, 在程序装入时, 直接解析完所有符号并填入对应的值, 此时所有的 GOT 表项都已初始化, 且不装入 link_map 与_dl_runtime_resolve 的地址
RWX 存在可读可写可执行段,即栈为可读可写可执行
]]>
-
- Glibc Heap Exploit
+
+ malloc源码分析
-
+
- 关于用户态中的 glibc堆的常见利用手法总结
+ 整理
@@ -714,23 +714,23 @@
-
- malloc源码分析
+
+ Glibc Heap Exploit
-
+
- 整理
+ 关于用户态中的 glibc堆的常见利用手法总结
diff --git a/page/3/index.html b/page/3/index.html
index 1ec43f6..93fcca7 100644
--- a/page/3/index.html
+++ b/page/3/index.html
@@ -249,23 +249,23 @@
-
- 用户态程序的5保护
+
+ 二进制数学
-
+
- 用户态程序的5保护
+ 二进制数学
@@ -304,9 +304,7 @@
-
- 二进制数学
+
+ 用户态程序的5保护
-
+
- 二进制数学
+ 用户态程序的5保护
@@ -373,7 +371,9 @@
diff --git a/tags/CTF/index.html b/tags/CTF/index.html
index fd0d844..0132036 100644
--- a/tags/CTF/index.html
+++ b/tags/CTF/index.html
@@ -253,15 +253,15 @@
2022
-
+
- Glibc Heap Exploit
+ malloc源码分析
-
+
- malloc源码分析
+ Glibc Heap Exploit
@@ -318,23 +316,23 @@
- - Glibc Heap Exploit + + malloc源码分析
- +
-
- malloc源码分析
+
+ Glibc Heap Exploit
-
+
- 整理
+ 关于用户态中的 glibc堆的常见利用手法总结
diff --git a/page/3/index.html b/page/3/index.html
index 1ec43f6..93fcca7 100644
--- a/page/3/index.html
+++ b/page/3/index.html
@@ -249,23 +249,23 @@
-
- 用户态程序的5保护
+
+ 二进制数学
-
+
- 用户态程序的5保护
+ 二进制数学
@@ -304,9 +304,7 @@
-
- 二进制数学
+
+ 用户态程序的5保护
-
+
- 二进制数学
+ 用户态程序的5保护
@@ -373,7 +371,9 @@
diff --git a/tags/CTF/index.html b/tags/CTF/index.html
index fd0d844..0132036 100644
--- a/tags/CTF/index.html
+++ b/tags/CTF/index.html
@@ -253,15 +253,15 @@
2022
-
+
- Glibc Heap Exploit
+ malloc源码分析
-
+
- malloc源码分析
+ Glibc Heap Exploit
@@ -318,23 +316,23 @@
- - malloc源码分析 + + Glibc Heap Exploit
- +- - 用户态程序的5保护 + + 二进制数学
- +
-
- 二进制数学
+
+ 用户态程序的5保护
-
+
- 二进制数学
+ 用户态程序的5保护
@@ -373,7 +371,9 @@
diff --git a/tags/CTF/index.html b/tags/CTF/index.html
index fd0d844..0132036 100644
--- a/tags/CTF/index.html
+++ b/tags/CTF/index.html
@@ -253,15 +253,15 @@
2022
-
+
- Glibc Heap Exploit
+ malloc源码分析
-
+
- malloc源码分析
+ Glibc Heap Exploit
@@ -318,23 +316,23 @@ - - 二进制数学 + + 用户态程序的5保护
- +diff --git a/tags/CTF/index.html b/tags/CTF/index.html index fd0d844..0132036 100644 --- a/tags/CTF/index.html +++ b/tags/CTF/index.html @@ -253,15 +253,15 @@
2022
- + -2022
- + -2022
- + -