奥运会网球比分规则|雪缘网网球比分直播|
欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

个人PWN入坑常见方法总结

来源:本站整理 作者:佚名 时间:2019-04-16 TAG: 我要投稿

本文介绍个人学习pwn过程中的一些总结,包括常用方法,网上诸多教程虽然有提供完整的exp,但并未解释exp为什么是这样的,比如shellcode写到哪里去了(这关系?#25945;?#36716;地址),ROP链怎么选择的。对于pwn,本人也是新手,其中有总结错误的,欢迎各位大佬指正。
文中用到的测试程序都在:https://github.com/silience/pwn
0×02 PWN常用的基本知识
首先拿到一个PWN程序,可以先使用file命令,判断是32位还是64位。

可以使用objdump读取plt和got表,plt和got网上都有详细的介绍,再此不再赘述。


这边要提一下数据在寄存器中的存放顺序,这个在格?#20132;址?#20018;漏洞中要格外注意,特别是64位,32位的先后顺序是eax->edx->ecx->ebx,64位的先后顺序是rdi->rsi->rdx->rcx->r8->r9。
刚开始学习的时候,个人经常把pop和push经常搞反,因此在此把这两个指令的介绍说一下:push [reg]/[num] 是将reg寄存器中的值或是数字num压入堆栈中,而pop [reg]是将堆栈?#27426;?#30340;值弹出到reg寄存器中,并将这个值从堆栈中删去。
有时候要查看寄存器中的值,可以用到如下命令:
print $esp:打印esp的值
x/10x $esp:打印出10个从esp开始的值
x/10x $esp-4:打印出10个从偏移4开始的值
x/10gx $esp:以64位格式打印

下面先使用hello练练手,首先使用IDA的F5大法可以看到内?#22353;?#20010;getshell函数,可以直接跳转到该函数getshell。

使用工具pade可以很方便的计算出偏移量,pattern create 100。

pattern offset 0×41284141,计算出偏移量为22。

查看汇编代码,获取getshell的地址,也就是要跳转的地址。

最后得到完整的exp如下。

0×03 shellcode
生成方式
1、在shellcode数据库网站找一个shellcode,http://shell-storm.org/shellcode/
2、使用kali的msfvenon生成shellcode,如命令msfvenon -p linux/x86/exec CMD=/bin/sh -f python
3、使用pwntools?#28304;?#30340;函数如asm(shellcraft.sh())
但有时候不知道shellcode写到哪里去了,在回答这个问题前,要提一下bss段、data段、text段、堆(heap)、栈(stack)的一些区别。
1、bss段(bss segment)通常是指用来存放程序中未初始化的全?#30452;?#37327;的一块内存区域,bss?#38382;?#20110;静态内存分配。
2、data段:数据段(data segment)通常是指用来存放程序中已初始化的全?#30452;?#37327;的一块内存区域,数据?#38382;?#20110;静态内存分配。
3、text段:代码段(code segment/text segment)通常是指用来存放程序执?#20889;?#30721;的一块内存区域。这部分区域的大小在程序运行前就已经?#33539;ǎ?#24182;且内存区域通常属于?#27426;?某些架构也允许代码段为可写,即允许修改程序)。在代码段中,也有可能包含一些?#27426;?#30340;常数变量,例如?#22336;?#20018;常量?#21462;?br/> 4、堆(heap):堆是用于存放进程运行中?#27426;?#24577;分配的内存段,它的大小并?#36824;?#23450;,可动态扩张或缩减。当进程调用malloc等函数分配内存时,新分配的内存就?#27426;?#24577;添加到堆上(堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)。
5、栈(stack):栈又称堆栈,是用户存放程序临时创建的局部变量,也就是说我们函数括弧“{}”中定义的变量(但不包括static声明的变量,static意味着在数据段中存放变量)。除此以外,在函数被调用时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也会被存放回栈中。由于栈的先进先出(FIFO)特点,所以栈特别方便用来保存/?#25351;?#35843;用现场。
下面以ret2shellcode,同样使用IDA看下代码,很明显,shellcode写入到bss段。

使用命令readelf -S ret2shellcode查看获取bss段地址为0x0804a040。

[1] [2] [3]  下一页

【声明】:黑吧安全网(http://www.nddver.tw)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱[email protected],我们会在最短的时间内进?#20889;?#29702;。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载
        奥运会网球比分规则