计算机组成原理SRop,XMan-Day3-muhe大大《pwn基础》&话不多说导入markdown→_→

背景介绍

必备基础

C python

计算机组成原理

汇编语言

linux操作系统

IDA、GDB等常见工具的基本操作

特别的

got/plt

elf文件结构

函数调用的栈结构

一些基本的常用术语

pwn

shellcode:一段完成特定功能的代码

payload:攻击代码(可以说包含shellcode)

PoC:Proof of Concept

Exp:Exploit 完整的利用

基础环境

socat

sudo apt-get install socat

socat TCP-LISTEN:4444。。。

不同点:socat打进pwn后的目录是home/pwn

xinetd 【手动进程】

sudo apt-get install xinetd

/etc/services下先添加自己的服务端口信息

/etc/xinetd.d/下添加自己的服务

services。。。

不同点:打进pwn后的目录是根目录

交互方式

socket

zio

pwntools

反编译与调试工具

IDA pro

gdb(peda, gef, pwndbg插件 着色)

调试exp

远程调试

首先在ida中分析程序,寻找要下的断点

使用raw_input()使远程程序暂停

找到进程attach

下断点

c > continue

成功断下

如果使用了pwntools的话可以使用内置的方法

gdb.attach(p,'''

B *0x0804000

B *0xxxxxxxx

)

关于一些缓解措施

ASLR:地址随机化

RELocation ReadOnly(RELRO):重定位只读,它能够保护函数的调用不受攻击者重定向的影响

PIE:位置无关可执行文件

NX[NoeXecute(NX) bit]:不可执行位(类似win下的DEP)参考github 0x9x/peda

x86 汇编

Registors : 【常用寄存器的功能记住】

leave 将ebp恢复成之前的ebp

ret return到ret addr

栈:往低地址跑 变量...

堆:往高地址跑 malloc较小的空间时,分配较大的空间会用map映射一块

GOT

【延迟调用】

【Lazy binding】

应用 比如格式化字符串

while(1){

scanf();

printf(s);

}

利用got劫持,将printf()劫持成system(),再传进去一个"/bin/sh"

Buffer overflow

outline

stack frame

buffer overflow

Dangerous function

strategy

Stack canary

checksec 查看保护开没开

小端地址怎么构造:

1. p32()[pwntools]或l32()[zio]

2. 自己构造

格式化字符串

没有libc

printf addr

info leak vuln

泄露出来好几个函数,libc中函数之间的偏移都是定死的

收集libc.db

%x

很多%x泄露栈上的信息

同理也可以写入栈

第一次写进来,第二次再去修改

盲打format string

只给了 ip port

while(1){

read(..)

printf(..);

}

arch x86?x64?%p --> addr

确定在栈上面的输入位置

aaaa%x,%x,%x...

dump bin file

get target_function 通过泄露got表找到

overwrite got

ROP:Return-Oriented-Programming

re2libc

是一种rop链的构造方法

gadgets 一般是多个pop再加一个return

插件:rop++,ropgadget tool,readelf插件定位函数在libc.so中的偏移 readelf -r ...| grep -w read@

re2dlresolve

利用lazy binding的特性,寻找想要执行的函数的地址

不需要info leak

必须可以控制resolve的参数 可控的区域要大一点

PIE RELRO 必须要是关闭的PIE存在必须leak.text段地址

SROP利用-Sigreturn Oriented Programming

利用信号机制,构造出想要的

pwntools中有一个模块

mmap映射

参数传递区别

x86 通过栈传递参数

x64

win:前3个参数走寄存器(rdi rsi rdx)

linux:前6个参数走寄存器,后面的通过栈

一点小感想

只听懂了差不多一半左右 0- 0 ToT

有趣啊有趣

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值