avatar
Articles
65
Tags
0
Categories
16

Home
Archives
Categories
About
月明星稀
Search
Home
Archives
Categories
About

月明星稀

writeup_level2_pwn
Created2022-02-24|pwn
writeup_level2_pwn属于是level0的升级版,没啥可查的,直接ida: 可以看到,依然是有缓冲区溢出漏洞的一个函数,buf数组的大小转换成十六进制也就0x88,却能读入0x100的数据。 依然是通过溢出,对函数的返回地址进行覆盖: 进入调用函数system,然而system函数需要一个参数的地址(即/bin/sh)字符串的地址,我们没有该字符串,无法虚空调用,只能在程序的字符串列表中进行寻找: view-subview-string可以看到系统贴心的准备了: 现在我们就可以在调用_system函数时,通过缓冲区的覆盖把字符串的地址也提前覆盖进去: 创作一下脚本: 行! cyberpeace{40fb2960396105316b3733bd0c6cf1fd}
writeup_level0_pwn
Created2022-02-24|pwn
writeup_level0_pwnida打开附件: 可以看到read函数把int读入数组,有溢出漏洞,然后找到程序中的危险函数: 只要成功对此函数实现调用就可以通过sh命令行控制系统。 查看数据区域,可以看到上面贴心的给出了解释,r和s代表了程序的返回地址和储存的寄存器值,我们只要通过缓冲区溢出覆盖程序的返回地址,将返回地址覆盖为我们的目标函数起始地址,即可执行该函数。 起始地址锁定为596,直接脚本抄袭开始! 12345678910# coding=utf-8 from pwn import * #导入 pwntools 中 pwn 包的所有内容 p = remote('111.198.29.45',33907) # 链接服务器远程交互 elf = ELF('./level0') # 以 ELF 文件格式读取 level0 文件 sysaddr = elf.symbols['callsystem'] # 获取 ELF 文件中 callsystem 的地址 # 先用 0x88 个无用字符覆盖 buf 和 push ...
writeup_easyMaze_reverse
Created2022-02-23|reverse
writeup_easyMaze_reverseelf文件,直接ida: main函数里定义了一大堆变量。 为了便于分析,从step_2开始看起: 循环校验输入(WASD),然后按照输入内容控制输出相关结果。 再看加密逻辑: step_0貌似是在生成地图 step1中还有子调用,太麻烦了,因此直接选择动态调试,在step2直接查看数据。 连接linux开始动态调试:断点下载step_2的循环开始处: 双击a1数组查看变量: 很多0和1组成的数组,d键位转化为dd,然后右键生成数组,长度为49 (dd定义双字类型变量,一个双字数据占4个字节单元,读完一个,偏移量加4;) 复制,生成地图: 按照地图,应该为 SSDDWDWDDDSSAASASAAASSDDDDWDDS 最终flag:UNCTF{ssddwdwdddssaasasaaassddddwdds}
汇编 db,dw,dd的区别
Created2022-02-23|Note-re
汇编 db,dw,dd的区别db定义字节类型变量,一个字节数据占1个字节单元,读完一个,偏移量加1; dw定义字类型变量,一个字数据占2个字节单元,读完一个,偏移量加2; dd定义双字类型变量,一个双字数据占4个字节单元,读完一个,偏移量加4; dq定义四字节类型,一个四字类型数据占8个字节单元; 格式:〔符号名〕 DB\DW\DD\DF\DQ\DT 初值序列DB定义的为字节类型,DW定义字类型,DD定义双字类型,DF为长字类型,DQ为四字类型,DT为十字节类型,该指令分别定义8位,16位,32位,48位,64位,80位的数据 DW就是表示为该数据分配一个字的存储空间,即16位 摘抄自:https://blog.csdn.net/baidu_37503452/article/details/83147318
writeup_梅津美治郎reserve
Created2022-02-22|reverse
writeup_梅津美治郎reserve查壳,没壳 ida打开: level1太简单不说,r0b0RUlez! 直接,步入sub_4015EA 发现有一个九次的小递归: 判断有猫腻,直接上动调,然而x32dbg怎么调都是一个异常终止。 查wp,改用虚拟机下的od,可以正常运行,简单的概述一下具体情况: 在运行完int3语句后,程序跳转到7地址开头系统领空,一段时间后,再次调用了4开头的正常函数,可以猜到应该是level2的主函数: 逻辑很简单: 直接比较了v1和另一串字符。 打开比较函数: 可以看到是将a2异或2后进行的比较,至此比较流程已经清晰,下面找到a2就可以解决问题。 依然需要动调: 可以看到数据窗口中显示的就是实际参与比较的a2字符串(以02结尾),我们直接解密: 为welldone字样,然而这还不是最终flag。。。 最终的flag是第一层的结果下划线第二层的结果,即: flag{r0b0RUlez!_w3lld0ne} 坑爹啊。。。
writeup_攻防世界_WindowsReserve2
Created2022-02-21|reverse
writeup_攻防世界_WindowsReserve2首先,除了攻防世界的wp以外,网上关于这题的wp我个人都认为不太详细 有as壳,esp定律手动脱壳。 拖入ida,根据功能对函数进行重命名: 锁定关键函数: ①检查输入函数: ②加密函数: 最后一位通过v9和v4加密,存入了v10 进入下一层逻辑: 仔细观察逻辑发现有一个密码表,通过python脚本转化一下: 发现还是经典base64,仔细观察代码逻辑,推测是base64加密函数。 因此,可以对程序的总体流程进行推测: 传入加密函数,分奇数偶数位进行加密 加密后的内容进行base64编码(结果为reverse+) 然而,对reverse+进行解码却发现解不开。。。这应该是其解码之后的结果无法打印 遂自己写脚本如上,左侧为输出。 然后回到上一层函数 上一层函数的输出为173,235,222,174,199,190 因此可以初步判断本层函数的输入应为12位,由于可能性较少,可以直接正向碰撞,可能性仅仅有12*(10+6)种,直接复刻正向逻辑: 首先,上面的一大串加密逻辑的输出结果只可能是整数0~15 然后使用0~1 ...
base64编码、解码c语言实现
Created2022-02-21|other
搬运自:https://blog.csdn.net/qq_26093511/article/details/78836087 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116#include<stdio.h>#include<stdlib.h>#include<string.h>unsigned char *base64_encode(unsigned char *str) { long len; long str_len; unsigned char *res; int i ...
python_re爬虫模块(RE、BS4、Xpath)
Created2022-02-20|python
python爬虫模块(RE、BS4、Xpath)一、RE模块基本使用:findall:匹配字符串中所有符合正则的内容 finditer:匹配内容后返回迭代器,从迭代器中取数据可以用循环加.group() search:找到一个结果就返回,返回的结果是match对象,取数据可以用.group() match:从头开始匹配,从第一个字母匹配不到就没有(不常用) 其中,上述内容的调用通过: ret=re.findall(r'正则串','匹配目标串')实现调用。 预加载:预加载正则表达式(用于正则表达式较长、且多次使用时的封装) 格式为: 1234obj = re.compile(r"\d+")ret = obj.finditer("目标字串666")for it in ret: print(it.group()) 内容提取:​ 正则可以用来匹配固定格式的一串字符串,如<html>xxx<html>,然而当我们不想要两侧的,只想要xxx时,需要从正则中取出不重复信息,即内容提取。 ...
python异步爬虫基础
Created2022-02-20|python
pyhton异步爬虫基础一、多线程/多进程多线程:1234567891011121314# 多线程from threading import Thread # 线程类#实现方法1:def func(): for i in range(1000): print("func", i)if __name__ == '__main__': t = Thread(target=func) # 创建线程并给线程安排任务 t.start() # 多线程状态为可以开始工作状态, 具体的执行时间由CPU决定 for i in range(1000): print("main", i) 1234567891011121314#实现方法2:class MyThread(Thread): # def run(self): # 固定的 -> 当线程被执行的时候, 被执行的就是run() for i in range(1000): print("子线程", i ...
pwn栈基础
Created2022-02-14|Note-re
PWN_栈基础程序段结构图: 栈结构图: 栈在内存中向下增长(地址下降)。每个函数有自己的栈空间,从栈底(高地址)向栈顶(低地址)增长,函数与函数之间被称为栈帧。 其中, EBP指向栈底;ESP指向栈顶;
1…4567
avatar
lhl_2507
Articles
65
Tags
0
Categories
16
Recent Post
adb使用学习2023-12-10
LAnoBERT System Log Anomaly Detection based on BERT Masked Language Model (Reading note)2023-09-20
环境变量理解2023-06-25
No title2023-05-22
Wireshark分析TLS协议2023-04-22
Categories
  • Note-re8
  • ai2
  • android2
  • cve6
  • environment3
  • kali2
  • linux5
  • network1
Archives
  • December 20231
  • September 20231
  • June 20231
  • May 20231
  • April 20232
  • March 20233
  • January 20232
  • September 20221
Info
Article :
65
UV :
PV :
Last Push :
©2020 - 2023 By lhl_2507
Framework Hexo|Theme Butterfly
Local search
Loading the Database