- 博客(4)
- 收藏
- 关注
原创 栈迁移:ciscn_2019_es_2
这里的思路就是通过第一次输入泄露ebp所指向的ebp’的地址 然后搞到ebp和ebp’的偏移量 利用第二次read布置栈空间 然后通过覆盖ebp’迁移到布置好的栈空间。为什么要泄露ebp’?既然我们可以覆盖ebp所指向的ebp’ 直接将其改写成为s的起始位置不就好了 这么麻烦干嘛?然后我们要搞清楚ebp和ebp’的偏移 因为ebp和s的偏移已知 只要知道ebp’和ebp的偏移就可以知道 ebp’和s的偏移。既然每次的都不一样 就没法通过一个固定的值来覆盖了 就需要泄露此次的ebp’的地址以及偏移量了。
2025-04-06 16:32:13
736
1
原创 leave ret指令和栈迁移
然后我们来看rbp rbp变为了ddd0 因为rbp指向的是母函数的旧的rbp 当执行pop指令后 rbp就回到了原位置 变成了母函数的old rbp。首先我们先看rsp本来为dd30 执行一个pop rbp指令后弹出了8字节的空间(x86)所以此时rsp变为了dd38。Leave指令执行之后 rbp回到了母函数的rbp 而 rsp 从被调函数栈顶移动到了被调函数返回地址的位置。可以看到此时rbp的值为dd30,,rbp存储的也是一个地址是ddd0,,而rsp存储的是dd20。此时就实现了原栈帧的恢复。
2025-04-05 21:14:12
348
原创 pwn格式化字符串
###将s覆盖为目标变量c的地址 由于p32(c)是4字节 再填充12个a 以达到输出16个字节的目的 然后%6$n会将输出的个数也就是16覆盖的第7个参数的位置 而此位置此时已经覆盖上了c的地址 这就成功把16覆盖的c中。表示我们的填充内容,overwrite addr 表示我们所要覆盖的地址,overwrite offset 地址表示我们所要覆盖的地址存储的位置为输出函数的格式化字符串的第几个参数。因为我们的格式化字符串是%p,他会根据站上的位置以16位的形式以此解析栈地址上存的数据。
2025-03-29 20:58:53
1371
1
原创 32位传参和64位传参
payload = 'a' * buf + p32(ebp) + p32(hack1) + p32(调整栈帧) + p32(参数2_1) + p32(参数1_1) + p32(hack2) + p32(hack2返回地址) + p32(参数2_2) + p32(参数1_2)Payload=p32(buf)+p32(ebp)+p32(t1)+b’a’*4+p32(参数2)+p32(参数1)| 参数2_2 | <-- p32(参数2_2),`hack2` 的第二个参数。多余的参数存放于栈中。
2025-03-22 21:23:52
951
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅