本人PWN入行普遍方式小结

黑客信息网

文中详细介绍本人学习培训pwn全过程中的一些小结,包含常见方式,在网上众多实例教程尽管有出示详细的exp,但仍未表述exp为什么是那样的,例如shellcode写到哪里来到(这关联到自动跳转详细地址),ROP链怎么选择的。针对pwn,自己也是初学者,在其中有小结不正确的,热烈欢迎诸位巨头纠正。

原文中采用的测试代码都是在:

0×02 PWN常见的基础知识

最先取得一个PWN程序流程,能够先应用file指令,分辨是32位系统還是64位。

能够应用objdump载入plt和got表,plt和got在网上都是有详尽的详细介绍,在此不会再过多阐释。

这里要提一下数据信息在存储器中的储放次序,这一在恢复出厂设置字符串数组系统漏洞时要分外留意,尤其是64位,32位系统的顺序是eax->edx->ecx->ebx,64位的顺序是rdi->rsi->rdx->rcx->r8->r9。

刚开始学习的情况下,本人常常把pop和push常常搞反,因而在这里把这两个命令的详细介绍说一下:push[reg]/[num]是将reg存储器中的值或者数据num压进堆栈中,而pop[reg]是将堆栈栈顶的值弹出来到reg存储器中,并将这一值从堆栈中删除。

有时要查询存储器中的值,能够采用以下指令:

print $esp:复印esp的值

x/10x $esp:复印出10个从esp逐渐的值

x/10x $esp-4:复印出10个从偏位8开始的值

x/10gx $esp:以64位文件格式复印

下边先应用hello试一试,最先应用IDA的F5秘笈能够见到內部有一个getshell函数,能够立即自动跳转到该函数getshell。

应用专用工具pade能够很便捷的测算出偏移,pattern create 100。

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

查询汇编代码,获得getshell的详细地址,也就是要自动跳转的详细地址。

最终获得详细的exp以下。

0×03 shellcode

生成方式

1、在shellcode数据库查询网址找一个shellcode,

2、应用kali的msfvenon形成shellcode,如指令msfvenon -p linux/x86/exec CMD=/bin/sh -f python

3、应用pwntools内置的函数如asm(shellcraft.sh())

但有时不清楚shellcode写到哪里来到,在回应这个问题前,要提一下bss段、data段、text段、堆(heap)、栈(stack)的一些差别。

1、bss段(bss segment)一般就是指用于存放程序中未复位的静态变量的一块内存地区,bss段归属于静态数据内存分派。

2、data段:数据信息段(data segment)一般就是指用于存放程序中已复位的静态变量的一块内存地区,数据信息段归属于静态数据内存分派。

3、text段:代码段(code segment/text segment)一般就是指用于存放程序实行编码的一块内存地区。这些地区的尺寸在程序执行前就早已明确,而且内存地区一般归属于写保护(一些构架也容许代码段为可写,即容许改动程序流程)。在代码段中,也是有很有可能包括一些写保护的参量自变量,比如字符串常量等。

4、堆(heap):堆是用以储放过程运作中被动态分配的内存段,它的尺寸并不固定不动,可动态性扩大或减缩。当过程调用malloc等函数分派内存时,新分派的内存就被动态加上到堆上(堆被扩大);当运用free等函数释放出来内存时,被释放出来的内存从堆中被去除(堆被减缩)。

5、栈(stack):栈又被称为堆栈,是客户存放程序临时性建立的局部变量,换句话说大家函数括弧“{}”中界定的自变量(但不包括static申明的自变量,static代表着在数据信息段中储放自变量)。除此之外,在函数被调用时,其主要参数也会被压进进行调用的过程栈中,而且待到调用完毕后,函数的返回值也会被储放回栈中。因为栈的先进先出法(FIFO)特性,因此栈尤其便捷用于储存/修复调用当场。

下边以ret2shellcode,一样应用IDA看下编码,很显著,shellcode载入到bss段。

应用指令readelf -S ret2shellcode查询获得bss段详细地址为0x0804a040。

标签:

发表评论 (已有条评论)

  • 评论列表