第一道:


第一步:连接nc靶场
第二步:连接靶场后,执行 ls 命令,展示该靶场下目录文件。

第三步:里有个 flag文件 使用 cat命令进行查看。
得到flag

nc命令详解

第二道:


第一步:下载得到 pwn1,利用 file 命令查看。


显而易见(ELF 64-bit)。放入IDA中查看。
第二步:用IDA查看
首先 f12+shift 转到字符串窗口。

之后,按下f5 查看伪代码

此时注意到 gets函数
gets函数的缓冲区是由用户本身提供,由于用户无法指定一次最多可读入多少字节,导致此函数存在巨大安全隐患。换句话来说,就是gets若没有遇到 \n 结束,则会无限读取,没有上限。
双击 s ,查看需要多少字节 。以此来确定偏移量。

也就是说只需要存入15个字节地址,就可以get函数返回地址。
解题要点

注意到 后面还有 db 8 dup(?)db: 定义字节类型变量的伪指令dup(): 重复定义圆括号中指定的初值,次数由前面的数值决定?: 只分配存储空间,不指定初值

因此 最后偏移量为 : 15+8 = 23 。
或者通过 peda 来计算偏移量。
对其进行gdb调试:
gdb pwn1


生成溢出字符,需保证其长度能覆盖至RIP。执行 pattern create 200 命令


执行 r 或者 start 命令让程序运行。//注意 start 命令执行后,还需执行 contin 命令。
在 please input 命令后,将之前生成的溢出字符串粘贴上去


注意到 RBP寄存器。也可以计算此时 nAACAA-A 的偏移量:
执行 pattern offset xxxxxx 命令。


这里计算出的偏移量。不需要考虑堆栈平衡。构造playload时,直接与系统调用地址相加就可。
通俗办法:
找到 stack 复制栈顶的字符串 // 前四个字节(64 bits为前8个字节) 计算偏移量


执行 pattern offset xxxxxx 命令。

第三步:回到 IDA pro中。寻找是否存在 系统调用函数。

找到 fun() 函数

第四步:编写脚本

第五步:执行代码,得到flag

第三道:

第一步:nc一下靶场

file 命令查看一下

第二步:用IDA查看

存在一个 cat flag.txt 命令。对其进行 gdb调试,得到偏移量。
遇到这这个问题时
使用chmod 777 +文件名,来扩大其权限

第三步:编写exp.py

第四步:执行代码,得到flag

第四道:

第一步:用file指令打开查看

第二步:用IDA查看

第三步:计算偏移量


20个I 可以填满s溢出

第三步:编写exp.py

第四步:执行代码,得到flag

第五道:

第一步:用file指令打开

第二步:在IDA查看,发现func里发现溢出点

当v2=11.28125时可以得到flag
因为无法直接对v2进行操作,只能通过溢出v1来修改v2的值,所以要对v1填充数据0x30-0x4,再令v2的值为11.28125


因为浮点数在内存中的储存方式不同,我们需要先进行转化
11.28125 转化为二进制为 1011.01001
规范化为1.01101001*2^3
所以11.28125在内存中的储存形式为

11.28125 =>
0100 0001 0011 0100 1000 0000 0000 0000

用16进制数表示为 0x4134800

第三步:编写exp.py

第四步:执行代码,得到flag

第六道:

第一步:用file指令打开

第二步:在IDA查看

点开vulnerable_function函数,发现栈溢出的read函数

第三步:编写exp.py

第四步:执行代码,得到flag

第七道:

第一步:用file指令打开

第二步:在IDA查看

shift+f12查看一下程序里的字符串,看到了 /bin/sh
双击跟进,ctrl+x找到调用这个字符串的函数

第三步:编写exp.py

第四步:执行代码,得到flag

第八道:

第一步:用file指令打开

第二步:在IDA查看

进入主函数,使用F5反编译后得到

首先看&buf,双击,发现并没有溢出

然后查看name_check

看到上述的代码,可以判断是整型溢出

第三步:编写exp.py

第四步:执行代码,得到flag

mrctf2020_easyoverflow


一道简单的栈溢出

用checksec查看保护

别看保护都全开就有些害怕,进IDA看看伪代码
存在栈溢出,而且存在后门函数。
所以思路很明确,只要满足check(v5)这个函数的返回值为真就可拿到shell。
来看看check函数
该函数的作用就是查看v5的值是否和fake_flag的值相等
在.data段查看fake_flag的值
我们可以填充v4的数值,但判断的是v5的数值,所以我们可以通过gets溢出,来填充v5的数值,所以来判断v4和v5的距离。

可以看到v4和v5相差0x30个字节。
emmm 可以构造payload了
from pwn import * io=remote("node4.buuoj.cn",25711) payload=b'a'*0x30+b'n0t_r3@11y_f1@g' io.sendline(payload) io.interactive()

运行exp得到flag

BUUCTF pwn相关推荐

  1. BUUCTF Pwn warmup

    BUUCTF Pwn warmup 1.题目下载地址 2.checksec检查保护 3.IDA静态分析 4.exp 1.题目下载地址 点击下载题目 2.checksec检查保护 啥都没开,果然是war ...

  2. 持续更新 BUUCTF——PWN(一)

    文章目录 前言 test_your_nc rip warmup_csaw_2016 ciscn_2019_n_1 pwn1_sctf_2016 jarvisoj_level0 [第五空间2019 决赛 ...

  3. BUUCTF PWN rip1 WP

    BUUCTF   PWN   rip 1 这是一个WP,也是一个自己练习过程的记录. 先把文件放入pwn机中检查一下,发现并没有开启保护,所以应该是一道简单题 我们运行一下试试,它让你输入一段字符然后 ...

  4. buuctf pwn bjdctf_2020_babyrop

    buuctf pwn bjdctf_2020_babyrop 1.checksec 2.IDA分析 ropper 3.exp 1.checksec 运行一下 2.IDA分析 这里调用了vuln函数 我 ...

  5. 持续更新 BUUCTF——PWN(二)

    文章目录 前言 0ctf_2017_babyheap ciscn_2019_s_9 hitcon2014_stkof roarctf_2019_easy_pwn picoctf_2018_shellc ...

  6. 持续更新 BUUCTF——PWN(三)

    文章目录 前言 axb_2019_heap oneshot_tjctf_2016 护网杯_2018_gettingstart wustctf2020_number_game zctf2016_note ...

  7. Buuctf(pwn) picoctf_2018_rop chain 栈溢出

    32位,开启了NX保护 利用思路 首先溢出后覆盖ret为function1函数地址,将win1赋值为1,之后跳转到function2的地址,a1是传入的参数,将a1传入即可满足条件去设置win2的值为 ...

  8. BUUCTF(pwn) jarvisoj_level4 栈溢出,泄露libc

    思路 我们没有system和'/bin/sh'地址.也不知道libc版本, 我们可以先leek出来一个地址, 利用偏移找到system和'/bin/sh'地址.再返回main进行循环调用,第二次就可以 ...

  9. Buuctf(pwn) jarvisoj_tell_me_something 栈溢出

    64位程序,开启了NX保护 400620 from pwn import *r=remote('node4.buuoj.cn',29273)flag_addr=0x400620payload='a'* ...

  10. Buuctf(pwn) ez_pz_hackover_2016 泄露栈地址,retshellcode;调试计算

    32位,开启了RELRO保护,堆栈地址随机化 没有开启nx保护,可利用写入shellcode来获取shell 一开始给我们输出了参数s的地址 strcmp函数: 两个字符串自左向右逐个字符相比(按AS ...

最新文章

  1. Android Studio 三种添加插件的方式,androidstudio
  2. 我开发中总结的小技巧
  3. fodera开机启动优化
  4. 时序数据库连载系列: 时序数据库一哥InfluxDB之存储机制解析 1
  5. windows系统OLLVM + NDK 混淆编译环境搭建
  6. python学生管理系统2.0-python3.6+django2.0开发一套学员管理系统
  7. thinkjs——两表联查
  8. java语言环境变量_java语言环境jdk的安装和环境变量的配置
  9. Rust: CTP的rust版本如何手工封装
  10. Linux 内核 下载 编译 安装 2021 ubuntu
  11. ZZULIOJ.1092:素数表(函数专题)
  12. qq人脸更换_QQ安全中心现在怎么替换人脸设置或删除人脸?
  13. 计算机回收站设置大小,电脑怎么设置回收站容量 电脑回收站的数据文件位置在哪...
  14. built a JNCIS LAB系列:Chapter 1 Routing Policy Processing v1.0
  15. 前端不错的相关网站和论坛
  16. (转)iOS 上的相机捕捉
  17. 《罗曼蒂克消亡史》影评
  18. 【MySQL】数据库表操作
  19. 基于Java+Swing实现餐厅点餐系统
  20. 中国量子计算机的运算速度是,中国量子计算机问世,运算速度碾压顶级超算,美国:时代变了...

热门文章

  1. app使用经验分享——墨墨背单词
  2. 网络安全之信息收集(一)
  3. 了解 CSS 网格:网格模板区域
  4. 微信小程序 后端用Flask实现
  5. 日志分析ELK平台部署第一节
  6. JavaScript使用for循环和splice删除数组指定元素的注意点
  7. VirusShare怎么下载数据集?
  8. Jmeter界面字体大小设置方法
  9. 格莱美全明星团队推出区块链音乐版权项目TUNE
  10. html石头剪刀布源码,JavaScript实现的石头剪刀布游戏源码分享