美文网首页
一步一步学pwn之栈溢出利用(1)

一步一步学pwn之栈溢出利用(1)

作者: yahoo0o0 | 来源:发表于2017-10-11 20:39 被阅读0次
    shellcode
    

    1.前提:在函数调用栈上的数据有可执行的权限并且关闭ASLR
    2.可用msf生成
    3.shellcode是用来打开shell的攻击指令,是软件漏洞中一线段用作攻击载荷的代码,会启动命令行的shell来达到执行命令的操作
    4.payload = padding1 +address of shellcode +padding2+shellcode
    5.address of shellcode起始的地址,可用若干"/x90"代替
    6.可使用mmap开一段可执行的空间,将shellcode放入进去执行
    7.使用mprotect将一段空间设置为RWX,将shellcode放进去执行
    8.return2shellcode,将shellcode插入栈中,然后return到buf

    return2libc
    

    1.含有libc库
    2.目标:在内存中确定某个函数的地址,并用其覆盖掉返回地址
    2.思路:由于libc的动态链接库中的函数被广泛应用。所以可以利用libc库包含的(一般是system)系统级的函数来获取当前进程的控制权,执行的函数需要参数,例如system("/bin/sh")
    3.payload = padding1+address of system + padding2+address of '/bin/sh'
    4.ldd可以查看目标程序调用的so库
    5.read/write/puts
    6.strings -a -t x libc-2.19.so | grep "bin/sh" readelf -a ./libc-2.19.so | grep "system@"

    ROP
    

    1.如果想连续执行若干端指令,就需要每个gadget执行完毕可以将控制权交给下一个gadget,所以gadget的最后一步是ret指令
    2.payload = padding1+address of gadget1 + address of gadget2+....+address of gadget n
    3.对于单个gadget,pop所传输的数据应在gadget之后
    4.假定输入溢出数据不收“/x00”字符的影响,所以payload可以直接包含"/x7d/x00/x00/x00"(传给eax的参数125)
    5.程序中的一些pop/ret的代码块称之为gadget->用来平衡堆栈
    6.绕过ASLR
    7.gadget需要是的rdi的值指向“/bin/sh”的地址

    Hijack GOT
    

    1.目标:在内存中修改某个函数的地址,使其指向另一个函数
    2.思路:修改其他函数地址使其指向system,这样修改之后程序内对该函数的调用就相当于执行system函数
    3.程序对外部函数的调用需要在生成可执行文件时,将外部函数链接到程序中,链接的方式有两种,静态链接和动态链接。静态链接得到的文件包含外部函数的全部代码,而动态链接得到的可执行文件并不包含外部函数的代码,而是在运行时将动态链接库加载到内存的某个位置。

    相关文章

      网友评论

          本文标题:一步一步学pwn之栈溢出利用(1)

          本文链接:https://www.haomeiwen.com/subject/aqwwyxtx.html