Archived
「 92 」
-
July 2021
-
July 04, 2021Docker相关知识学习
一、什么是Docker?之前一直用的虚拟机打pwn题,但是遇到不同架构时,要多开虚拟机就觉得听离谱的,占用太多内存,还贼麻烦其实,偶然间见识了docker搭建的pwn环境,觉得非常实用,而且命令行操作其实就是以后的趋势,所以决定好好学习一下docker的操作和使用。 Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 do...
-
June 2021
-
June 21, 2021Go语言入门学习
前言我觉得Go语言就是C(有些格式要求)和python(有些语法的写法)的融合体,还夹杂着一点java的影子(调用名字大小写)。 一、环境安装在菜鸟编程里有源码安装的说明: https://www.runoob.com/go/go-environment.html 当然也可以直接命令行安装go的编译运行环境: 1sudo apt install gccgo-go 当装好了以后,会自动...
-
June 18, 20215G知识点梳理
前言学习之前,先问下自己,什么是5G,有什么用,知己知彼,方能百战不怠。 5G在物联网方面的使用很广,目前韩国三星、(威瑞森电信)verizon、(土耳其通信公司)turkcell和瑞典爱立信均可提供5g服务。 5g系统采用的是基于服务的架构(service-based),也叫SBA架构。 一、5G常见词汇解析5GC(5g core network)5g核心网对用户面和控制面分离,采用服...
-
June 10, 2021Shell脚本编程
一、什么是shell以前没有系统学习shell,只是在做pwn时一般是直接调用system(“/bin/sh”)实现root权限的获取,所以觉得/bin/sh就是getshell。 Shell脚本中很多开头有#!/bin/sh,#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。个人感觉shell有点像python,所以就着类比学习一下, 二、一般规则1、变量命名和...
-
June 08, 2021ida插件安装踩坑经历
前言这里把安装要用到的插件工具等都打包好了,后面直接讲怎么安装。 链接: https://pan.baidu.com/s/1ADjpb9RDXuz-ACfHaka5fQ 密码: j8iw 一、Lazyida这个直接放到plugins目录下即可,没有什么大问题,用于数据提取的方便~ 二、keypatch这个工具需要提前安装keystone 具体命令如下: 12pip install ke...
-
June 08, 2021PWN和RE环境安装合集
一、Re常用工具下载与安装地址链接:https://pan.baidu.com/s/1js7wdznG-Up2EBXOIR5BxQ 密码:fr8f 切记!!!下载下来之前先关闭防火墙、病毒防护等、还有腾讯管家、360安全卫士等安全防护软件,因为会报毒,然后辛苦下的就会被删除掉,但是其实是没有伤害的,程序破解软件一般都比较敏感而已。Devc++需要安装,其他的是绿色版,不需要安装可以直接使用...
-
April 2021
-
April 26, 2021BUUCTF刷题
前言最近准备打一下铁三,因为知道有3道pwn题,正好毕业答辩完,刷刷题目,准备一手,只记录有意思的题目,或者自己忘记的知识点或者知识盲区的题目。 一、pwn1_sctf_2016一道有趣的题目,先来看看函数: 可以发现用到了C++中的replace函数,也就是替代,用you替代了输入中的所有I,这样就能实现输入字符的3倍扩展,那么最后strcpy时就能造成溢出了,这里动态调试稍微计算下...
-
April 19, 2021Mininet的使用方法
一、工具环境安装这里集成了shell脚本进行环境的安装: 123456789101112#!/bin/bashsudo apt-get update sudo apt-get install curl sudo apt-get install iproute2 sudo apt-get install iputils-ping sudo apt-get install mininet s...
-
April 02, 2021CVE-2015-5621-net-snmp之空指针错误Dos攻击
一、net-snmp简介SNMP协议是个成熟的网络管理协议,可以使用在远程系统中检索信息和设定值,在传输层它使用的是UDP协议,而net-snmp是个开放源代码的snmp协议实现。支持v1,v2c还有v3,并可以使用ipv4和ipv6,也包含了snmp trap的所有相关实现。net-snmp包含了snmp实用程序集和完整的snmp开发库。可以理解成net-snmp就是对snmp的封装,可以...
-
March 2021
-
March 23, 2021linux下常用指令整合
一、单纯方便记忆有时记不住那么多,有些用的不多的就直接写了,觉得好记性不如烂笔头,hhhh~ 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787...
-
March 22, 2021CVE-2018-6789——Exim RCE Vulnerability
前言这个漏洞由台湾的安全研究员工meh发现,经过华为未然实验室的师傅复现,成功实现了远程代码执行,最近在学习网络协议漏洞的挖掘,正好复现一下这块的东西,这两天要啃下来! 一、漏洞介绍漏洞的成因是b64decode函数在对不规范的base64编码过的数据进行解码时可能会溢出堆上的一个字节,比较经典的off-by-one漏洞。 存在漏洞的b64decode函数部分代码如下: 1234567...
-
March 20, 2021AFL-V1ct0r安装说明
一、AFL-Fuzz的安装将压缩包解压后,放到虚拟机中,进入文件夹,执行下面的命令进行安装: 12makesudo make install afl-fuzz安装说明: [-] Error: ‘bison’ not found, please install first.[-] Error: ‘flex’ not found, please install first. 缺失库的话先安装下...
-
February 2021
-
February 04, 2021sm4国密加密算法研究
一、sm4算法1、其实和aes和des类似,sm4算法也是一种分组加密算法。 2、密钥长度128bit(16字节),分组长度也是128bit(16字节),也就是16位字符为一个组作为输入进行加密,得到对应的16位的输出。 3、加密算法与密钥扩展算法均采用32轮非线性迭代结构,以4字节为单位进行加密运算,每一次迭代运算均为一轮变换函数F 4、sm4算法的加解密的结构相同,只是使用的轮密钥是相反...
-
January 2021
-
January 20, 2021六星CTF二进制题解
一、PWN1、babyheap一道2.27的新机制的题目 https://www.anquanke.com/post/id/219292 但是直接改bk指针即可,因为和2.31一样 漏洞点:UAF 输入点:只能改bk指针,所以需要切割实现overlap通过上一个堆块改下一个堆块的fd指针 123456789101112131415161718192021222324252627282...
-
December 2020
-
December 29, 2020linux下的对进程的学习
一、什么是进程?就是操作系统为了实现某些功能进行的分身术,生成的子进程可以进行相应的工作 创建进程最基本的调用是fork 123# include <unistd.h>pid_t fork(void);pid_t vfork(void); 调用 fork 时,系统将创建一个与当前进程相同的新进程。通常将原有的进程称为父进程,把新创建的进程称为子进程。子进程是父进程的一个拷贝,子...
-
December 23, 2020CVE-2017-13089—wget栈溢出
一、漏洞描述wget 是一个从网络上自动下载文件的工具,支持通过 HTTP、HTTPS、FTP 三种最常见的 TCP/IP 协议,在1.19.2的版本之前,被爆出一个严重的栈溢出漏洞,wget在处理重定向时,会调用http.c:skip_short_body()函数,解析器在解析时会使用strtol函数去读取每个块的长度,但是不检查块的长度是否为非负数,解析器试图通过MIN()函数跳过块的前...
-
December 04, 2020AFL-fuzz源码阅读计划
一、什么是afl-fuzzAmerican fuzzy lop 号称是当前最高级的Fuzzing 测试工具之一,由谷歌的Michal Zalewski 所开发。通过对源码进行重新编译时进行插桩(简称编译时插桩)的方式自动产生测试用例来探索二进制程序内部新的执行路径。与其他基于插桩技术的fuzzers 相比,afl-fuzz 具有较低的性能消耗,有各种高效的fuzzing 策略和tricks ...
-
November 2020
-
November 26, 2020glibc2.29-2.31刷题
一、small bin attack祥云杯babyheap分析下程序的流程 在menu前面还有个vmmap申请出内存,然后往里面存flag的操作,我们来看看: 这里会放flag到内存中,然后在flag上方放入随机数,接着打印出随机数的地址给我们 接着我们分析下这个程序: calloc 这是一个会清空内存的堆申请操作,而且不按照malloc那种方式优先利用tcache而是另起炉灶从top...
-
November 19, 2020SROP专题
一、什么是srop?有什么用?srop技术用来还原系统调用前的寄存器信息,那么我们可以伪造寄存器的值实现函数调用利用~简单理解成类似栈溢出劫持控制流。 在CTF中最常和orw的题目相结合。 二、不同ubuntu版本下的srop的使用技巧1、16.04(glibc2.23) 这里简单拿一道题示范一下: 题目本身不难,就一个堆任意溢出,但是作为复习的话,用不同的方法去把它打出来,打法也是比...
-
November 09, 2020Windows-pwn入门
一、前言因为讲漏洞挖掘的老师讲到了windows下的栈溢出漏洞等,本着学习的心态,想学习一下具体的利用方式,所以干脆直接装一下环境。 二、环境安装1、下载xdbg和ida作为调试器(32位+64位) 这个相信搞二进制的师傅都有~ 2、下载安装pwntools1sudo python -m pip install pwntools 可能有些师傅直接pip install 就可以装了,这里...
-
October 2020
-
October 21, 2020ELF文件解析
一、什么是ELF文件?elf是简称,全名是excutable and linkable format,可执行可链接格式,可以简单理解成linux操作系统下的可执行文件格式,在linux操作系统下,可以用readelf直接分析它的结构,是个好用的工具。 二、ELF文件的格式通常有3种: 1、可重定向文件文件保存着代码和适当的数据,用来和其他的目标文件一起来创建一个可执行文件或者是一个共享目标文...
-
October 07, 2020PE文件结构详解
一、PE文件基础介绍pe文件是windows操作系统下的可执行文件的一种称呼,常见的有exe文件和dll文件等,32位是PE32,64位的是PE+或者PE32+。 二、PE文件格式1、PE文件种类如下表所示 种类 主扩展名 可执行系列 EXE, SCR 库系列 DLL, OCX, CPL, DRV 驱动程序系列 SYS, VXD 对象文件系列 OBJ 2、我们直...
-
September 2020
-
September 01, 2020babyre题解
一、babyre这题直接写个魔改的rc4算法计算s_box的值得到smc加密的异或值,然后进行patch操作即可还原出真实的judge加密逻辑: 12345s_box = [0x83,0x24,0x84,0xcf,0x6c,0x8f,0x35,0x80,0x62,0xe6,0x3b,0x0c,0xc4,0x7c,0xad,0x1b,0xbe,0xbc,0x75,0x01,0x91,0x5...
-
August 2020
-
August 13, 2020LTE入网信令流程学习
一、LTE入网信令流程学习1接口与协议 接口是指不同网元之间的信息交互时的节点,每个接口含有不同的协议,同一接口的网元之间使用相互明白的语言进行信息交互,称为接口协议,接口协议的架构称为协议栈。在LTE中有空中接口和地面接口,相应也有对应的协议和协议栈,如下图所示: 我们来看下各层详细的运行方式 LTE系统的数据处理过程被分解成不同的协议层。简单分为三层结构:物理层、数据链路层L2和...
-
August 12, 2020wireshark抓包流量分析
一、下载安装直接在官网下载安装最新版即可 https://www.wireshark.org/ 二、使用方法和技巧1、选网卡抓流量 选择菜单栏上Capture -> Option,勾选WLAN网卡(这里需要根据各自电脑网卡使用情况选择,简单的办法可以看使用的IP对应的网卡)。点击Start。启动抓包,即可抓想要抓的网口的流量信息。 2、过滤流量包 直接填入想要的过滤的条件即可,...
-
August 03, 2020关于lief库的学习研究
一、lief库安装环境:python3 命令如下: 12sudo pip3 install setuptools --upgradesudo pip3 install lief 二、将elf文件转成so库的使用1、将源码crackme101.c 编译为elf文件crackme101.bin 12345678910111213141516171819202122232425262728#...
-
July 2020
-
July 27, 2020文件流真随机产生
学习一下文件流产生随机数的操作: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd...
-
July 14, 2020AFL-fuzz初探
一、下载与安装这里附上官网下载地址:https://lcamtuf.coredump.cx/afl/ 下载下来解压后,放到虚拟机中,进入文件夹,执行下面的命令进行安装: 12makesudo make install 说明安装好了,这里解析下每个文件的作用 12345678910afl-gcc和afl-g++ 分别对应 gcc和g++的封装 afl-clang和afl-clang++...
-
May 2020
-
May 22, 2020smc加密研究
一、smc的概念所谓SMC(Self Modifying Code)技术,就是一种将可执行文件中的代码或数据进行加密,防止别人使用逆向工程工具(比如一些常见的反汇编工具)对程序进行静态分析的方法,只有程序运行时才对代码和数据进行解密,从而正常运行程序和访问数据。计算机病毒通常也会采用SMC技术动态修改内存中的可执行代码来达到变形或对代码加密的目的,从而躲过杀毒软件的查杀或者迷惑反病毒工作者对...
-
May 17, 2020IOT固件mips环境安装与漏洞复现
一、mips的编译环境安装1、下载buildroot123wget http://buildroot.uclibc.org/downloads/snapshots/buildroot-snapshot.tar.bz2tar -jxvf buildroot-snapshot.tar.bz2cd buildroot 2、配置buildroot1234sudo apt-get install...
-
May 13, 2020angr的学习与使用探究
一、什么是angr?angr 是一个功能强大的二进制程序分析框架,可用于程序的静态分析和动态符号执行。支持 x86、ARM、MIPS 和 PPC 架构中 32 bit 和 64 bit 可执行程序的分析,是一款非常强大的python库。 二、angr怎么安装?1、安装 virtualenvwrappervirtualenv 是一个可以在同一台计算机中隔离多个 Python 环境的工具。它...
-
May 09, 20202.31中check机制和漏洞利用分析
前言之前一直有2.31的题目出现在赛场上,趁着这个机会,整理一波2.31下的tcache机制和利用技巧,以学习的目的为主。 一、check机制和利用技巧说明1、fastbin的double free只要填满了7个tcache,下一步就是放入到fastbin中,接着如果存在uaf的话,可以直接121实现和2.23一样的double free效果 2、tcache的double free 我们...
-
May 08, 2020RC4校验算法研究
一、RC4算法原理1、概念 rc4是一种基于密钥流的加密算法,它的密钥长度可变,密钥长度在1-256字节范围,主要是因为这个算法的非线性度良好,因为加解密使用的是相同的密钥,所以也是对称加密算法。 2、原理 最关键的点就是明文x和密钥经过动态的s盒生成的密钥流进行了一一异或加密,得到了密文,这里rc4是对明文进行一个个加密的,密钥流的长度和要加密的明文长度一致。 3、代码 1234567...
-
April 2020
-
April 23, 2020windows下的壳研究
一、什么是壳加壳的全称是可执行程序资源压缩,是保护文件的常用手段。加壳过的程序可以直接运行,但是不能查看源代码。要经过脱壳才可以查看源代码。 加壳是利用特殊的算法,对EXE、DLL文件里的资源进行压缩、加密。类似WINZIP 的效果,只不过这个压缩之后的文件,可以独立运行,解压过程完全隐蔽,都在内存中完成,因此我们需要dump内存。 壳的类型通常分为压缩壳和加密壳两类。压缩壳的特点是减小...
-
April 17, 2020看雪ctf二进制题解
一、keygenme(逆向) 是一个crackme,已经知道用户名是KCTF的情况下,计算出序列号。这题真的是很好地锻炼了动态调试的能力,学到了~ 1、首先ida分析逻辑: 这里要求输入name是大于3位小于20位,sn一定是64位的 接着进入check 这里因为进行了去符号表: 所以我们可以通过修复符号表+自定义函数名来进行加密算法的查看: ida中shift+f5然后导入我们的静态链...
-
January 2020
-
January 29, 2020安卓开发入门
一、准备工作1、android studio +自带模拟器(或者真机root) 2、frida(一个hook神器) 3、jeb(反编译利器) 4、java环境变量jdk的配置(谷歌) 5、gradle安装 6、ndk的配置与安装 二、开始编程1、程序基础12345678public class MainActivity extends AppCompatActivity { ...
-
January 14, 2020安卓动态调试专题
安卓动态调试smali安装smalidea # 下载链接: https://bitbucket.org/JesusFreke/smali/downloads/smalidea-0.05.zip 下载 Android Studio安装smalidea 进入Settings->Plugins点击Install plugin from disk选中下载好的压缩包 安装完成 解包并配置A...
-
January 03, 2020做pwn题的心得
一、做栈题的心得:1、看栈的大小 2、判断栈溢出的字节数(够的话直接栈上操作再跳回main函数再次操作,不够的话,栈迁移到bss上) 命令:cyclic n cyclic -l 报错(4位) 3、如果开了canary,先泄露出canary(覆盖低字节或者格式化字符串泄露),记得函数调用完要回填canary 4、如果开了pie,先利用write或者puts函数(覆盖0截断)或者格式化字符串泄...
-
January 03, 2020堆入门学习知识总结
一、堆的分析: 通过系统调用brk和mmap实现malloc内存分配: thread有个arena空间,可以申请chunk arena的个数是跟系统中处理器核心个数相关的: 1234For 32 bit systems: Number of arena = 2 * number of cores + 1.For 64 bit systems: Number of arena ...
-
January 03, 2020栈溢出入门到放弃1
一、缓冲区溢出原理介绍:缓冲区:stack、heap 1、栈溢出:当前输入的字符的数量大于buf的大小,造成溢出,ret地址被覆盖,造成任意地址跳转来道题目直接看看: 这里很清晰,一个main函数,调用puts函数和read函数和puts函数,下面简单的例子演示下参数入栈: 单步走:先调用puts函数,先将参数“give me some thing?”压入栈中 执行完puts函数...
-
January 03, 2020栈溢出从入门到放弃3
一、初级栈溢出系列从现在开始温习栈溢出,从初级栈溢出到高级栈溢出到花式栈溢出都重温一遍,主要结合题目练习加深巩固。 一般来说,实现栈溢出,都是因为读入的字节数超过了buf允许的大小,导致ret地址被覆盖,我们的最终目标都是实现调用system(“/bin/sh”)函数去getshell,过程花样可以千奇百怪,但是总有规律可以寻找~ 1、第一步找危险函数。输入函数: gets(&b...
-
January 03, 2020栈溢出入门到放弃2
一、对保护机制的探索:本文针对刷过的题目,介绍一些常见的保护机制以及破解方法,这里一个个介绍。 1、checksec工欲善其事必先利其器,这个指令用于检查题目的保护机制以及判断是32位还是64位的程序,专业地讲是用来检查可执行文件属性,例如PIE, RELRO, PaX, Canaries, ASLR, Fortify Source等等属性。 举个栗子: checksec + 文件名,可实现...
-
January 03, 2020栈溢出入门到放弃4
一、中级栈溢出总结:来到中级栈溢出这里,当64位的程序很难得到有用的rop链时(参数在rdi,rsi,rdx中,通常是很难凑齐这3个的)就需要我们用程序现有的链子去构造,找找看: 重点介绍一个64位的很好用的ROP链子,这个链子是根据 这两个函数的汇编写出来的,我们可以去看看: 就是这里了,看到loc_4006A6和loc_400690两个位置,这里怎么利用呢? 首先先读懂这段汇编的...
-
January 03, 2020玩转花式栈溢出
一、花式栈溢出介绍: 花式栈溢出又叫栈迁移技术,是指在可以写的payload的长度不佳的情况下(一般只有ebp和ret位置可以写,没有多的了,或者再多给两行可以写的),这样的话我们需要进行栈迁移,具体做法有如下两种: 1、迁移到栈本身,2、迁移到bss段中,3、迁移到堆块(后期补充) 先来看看迁移到栈的情况: 来一道题目: 这里堆栈不可执行保护,其他的没开,然后栈溢出发现只能溢出8字节...
-
January 03, 2020数字经济3pwn题
一、前言 这次的pwn题做的不是很理想,现在复现下,发现当时没出确实挺可惜的哎,以下复现过程。 二、题目2、fkroman 这题保护全开(习惯了,不全开反而不好玩了hhhhh),先来查看一波漏洞点: free时,有UAF漏洞 edit时没有对size检查,随便溢出。 这里我们可以一步步逆推思路: 1、UAF可以实现改FD指针为fake_chunk,改malloc_hook...
-
January 03, 2020师傅给的2道pwn题
题目一:read_note: 一波分析: 这里开了栈溢出保护,堆栈不可执行,然后还有内存地址随机化,只有got还可以写,适应了就好~ 动态链接,库是libc.so.6,可以得到,再去看看ida吧: 这里程序大概的流程也出来了,就是让你输入路径(字符串长度为5其实根本不可能),然后能打开该路径下的文件(就是个幌子,没用的),跳过,输入的字符长度大于5,就false,继续执行程序,要写not...
-
January 03, 2020强网杯二进制部分wp
一、逆向:1、task_main(强网先锋) 分析算法可知是base64加密: 提取字符,’ZmxhZ3ttYWZha3VhaWxhaXFpYW5kYW9ifQ==’ 直接在线解密: 1flag{mafakuailaiqiandaob} 2、JustRe: 进入主逻辑,分析程序: 这里可知道有2关,先看第一关: 12345678910111213141516171...
-
January 03, 2020星盟AWD的pwn题
一、题目pwn1: 64位保护全开,ida分析一波: 会发现常规菜单题,然后有3个函数,一个个看吧: malloc: 这里可以看到最多7个堆块,而且堆块大小限定在0x90到0x2333,当堆块量等于7时,貌似有UAF的free,但是其实没有什么用,因为bss上并不会存储chunk的地址,所以正常的malloc,同时可以打印地址,这里直接打印出了堆地址和libc地址 简单的free函...
-
January 03, 2020数组下标越界专题
一、数组下标越界简介:栈是由高往低增长的,而数组的存储是由低位往高位存的,如果越界的话,会把当前函数的ebp和下一跳的指令地址覆盖掉,如果覆盖了当前函数的ebp,那么在恢复的时候esp就不能指向正确的地方,从而导致未可知的情况,如果下一跳的地址也被覆盖掉,那么肯定会导致crash,看一张图: 这样一下看就很明显了,当你把数组的下标越过了最大索引值的时候,所指向的指针就会指向更高地址的栈空间...
-
January 03, 2020格式化字符串漏洞学习
前置知识:一些小技巧和知识: 1234567891011121314151617181920212223242526272829303132333435363738这部分来自icemakr的博客32位读'%{}$x'.format(index) // 读4个字节'%{}$p'.format(index) // 同...
-
January 03, 2020桂林CTF逆向题解
一、逆向1、re第一题,拖进ida发现是打不开的,怀疑题目加壳了,elf文件加壳的话,拖进虚拟机,直接打命令: strings re 看到: UPX的壳直接脱了,upx -d 文件名 看到函数名被隐藏了,但是很简单,直接shift +f12查找字符串,input flag,双击定位到那里,查看引用,ctrl + x,就可以定位到主逻辑了,F5,就是上面的界面了,接着分析一波,看到c...
-
January 03, 2020消息验证码MAC和数字签名研究
一、MAC的原理和分析MAC算法结合了md5和sha算法的优势,并加入密钥的支持,是一种更为安全的消息摘要算法,MAC是含有密钥的散列函数算法,兼容了md5和sha算法的特性,并在此基础上加入了密钥。 经过mac算法得到的摘要值也可以用16进制编码表示,其摘要值长度与参与实现的摘要值长度相同,例如,HmacSHA1算法得到的摘要长度就是SHA1算法得到的摘要长度,都是160位二进制,换算...
-
January 03, 2020湖湘杯CTF二进制部分wp
一、Pwn1、HackNote | solved这题什么保护也没有开,分析程序发现是常见的菜单题: ![57371788851](/blog_img/1573717888513.png) 漏洞点在于edit函数: ![img](/blog_img/1573717896780.png)会计算输入的字符个数作为下一次edit的size,这里只要申请时0xx8形式的大小,这样...
-
January 03, 2020神奇的gadget
一、神奇的gadget: 这个gadget一般存在于__do_global_dtors_aux中,可能是出题人自己写的gadget吧~适用于no leak类型的题目。 1add [rbp-3Dh],ebx //当rbp和ebx可控时,我们可以修改rbp-0x3d地址里面内容,一般用于计算真实地址之间的偏移,从而获取想要的真实地址 拿一道题看看吧: no_leak...
-
January 03, 2020library题解
一、题目library先checksec下: 除了pie没有开,其他保护都开了,got表不可改,那么只能改malloc_hook和free_hook了,这题ida看下逻辑: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253int __cdec...
-
January 03, 2020红帽杯CTF线上赛二进制部分wp
一、Pwn1、three | solved 这题看到程序输入3字节后有个call指令,可以执行命令: 所以填入机器码,利用mov指令跳转到ecx寄存器(rcx正好有我们后面的输入的bss的地址),就可跳到bss地址执行我们的静态ropchain,直接getshell~ 123456789101112131415161718192021222324252...
-
January 03, 2020西湖论剑部分wp
Pwn题目:story ![image.png](https://upload-images.jianshu.io/upload_images/9085575-5c9429d71ed20cb7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 这题一看除了没开内存地址随机化,其他都开了,分析逻辑发现漏洞点,格式化字符串漏洞,...
-
January 03, 2020House of Lor
一、原理: 先来看下small bin中的源码: 123456789101112131415161718192021222324252627282930313233343536373839if (in_smallbin_range(nb)) { // 获取 small bin 的索引 idx = smallbin_index(nb); // ...
-
January 03, 2020House of Rabbit
一、原理介绍: 1、修改size: 123456789101112#include "stdio.h"#include "string.h"int main(){unsigned long* chunk1=malloc(0x40); //0x602000unsigned long* chunk2=malloc(0x40); //0x602050malloc(0x10);free(c...
-
January 03, 2020House of orange
一、第一种类型的原理House of Orange 的利用比较特殊,首先需要目标漏洞是堆上的漏洞但是特殊之处在于题目中不存在 free 函数或其他释放堆块的函数。我们知道一般想要利用堆漏洞,需要对堆块进行 malloc 和 free 操作,但是在 House of Orange 利用中无法使用 free 函数,因此 House of Orange 核心就是通过漏洞利用获得 free 的效果。...
-
January 03, 2020IO_FILE探索
一、IO_File结构体一览首先看一波源码: 123456789101112131415161718192021222324252627282930313233343536373839404142struct _IO_FILE { int _flags; /* High-order word is _IO_MAGIC; rest is flags. */#defi...
-
January 03, 2020MD5加密和Hash函数分析
一、MD5加密算法的原理分析 md5的输入是512位的倍数,输出是128位,首先填充消息,使其长度为与448 mod 512同余,即长度是512的倍数减去64,填充的消息第一位是1,后面全部都是0,即使原来的消息长度刚好与448 mod 512同余(64),仍然需要填充,即使原来的消息长度刚好是512的整数倍,仍需要填充。 再将这剩余的64位填充为原来消...
-
January 03, 2020OD动态查看栈技巧
一、准备工作:题目链接:https://pan.baidu.com/s/1p3s_RpW_fO_CUWXriFGuAQ 提取码:4lvd(提示:给出的这道题是我脱壳后的,因为没有及时保存原题,抱歉,不过是简单的UXP壳,大家直接用工具去脱也是可以的,所以相信大家没毛病) 二、开始分析: 这题是当时打南宁杯时的题目,拿到题目一起分析下: 1、首先用PEID查壳,发现是UXP壳,直接用工具脱壳...
-
January 03, 2020万圣节Pwnhub一道题
一、pwnhub这题感觉挺有意思的 ,思路清晰了,但是过程煎熬了,下面记录下自己经历的事和学到的东西。 保护全开,就不说了直接看看ida: 3个功能,一个malloc、一个free、一个write函数,这里先看下malloc函数: 先申请一个0x10的没用的块用来隔开堆块,再申请不超过0xff的堆块去写内容,然后每一次malloc,num就会加一,这里只能malloc10次,超了就没...
-
January 03, 2020Pwnable.tw的shellcode系列
这篇博客专门讲shellcode的系列,也作为一个复习内容吧,主要针对的是,各种情况下的绕过shellcode检测: 首先是shellcode的生成,一般2种途径:工具+手撕 这里优先推荐手撕,不然你就是脚本小子,遇到难一点的检测机制,还是会绕不过,从最简单的开始: 一、一般的getshell或者orw出flag 32位下: 1、找准寄存器,确定系统调用的对应值 eax、ebx、ecx、e...
-
January 03, 2020RSA算法体系研究
在打0CTF时看到了RSA的那题,但是不会做,于是先学习一波RSA吧,算做入门,自己也喜欢数学,正好积累下,RSA是非对称加密,相对于DES对称加密而言的,下面进去正题。 一、欧拉定理:如果两个正整数a和n互质,则n的欧拉函数 φ(n) 可以让下面的等式成立: 这是个很重要的公式,先来理解下,首先n = pq(q和p互为质数),欧拉函数 φ(p) = p-1(表示与p互质的数的个数为p...
-
January 03, 2020SUCTF二进制部分wp
前言这场比赛打了2天,学到了东西,在这里做下总结,方便后续学习。一、Pwn方向1、playfmt这次的pwn题很不友好,只有这题能做,菜鸡Orz,先检查保护机制: got表不可改,堆栈不可执行,看名字知道是格式化字符串漏洞的题目~ida分析一波: 可以看到申请了堆块去存放flag的内容,然后进去logo函数的do_fmt函数,里面有格式化字符串漏洞: 漏洞点就是格式化字符串,这里能...
-
January 03, 2020TAMUCTF-pwn1到pwn5
师傅们说去做做TAMUCTF的题目,积累经验,于是去尝试了一波,才发现真的是有些地方自己不懂的知识盲区,也作为一个积累吧,在这里记录 题目:pwn1首先看看题目先 有栈溢出的漏洞,其他的保护全开,拖进ida分析一波: 逻辑很清晰了,前面的几个strcmp可以直接逆向思维,把正确的答案写到payload中,最后一步直接覆盖那个数v5为目标值即可:于是可以写出payload: 12345...
-
January 03, 2020tea、xtea、xxtea算法研究
一、Tea先来看一波C语言实现的代码,通过代码学习更快理解原理: 12345678910111213141516171819202122232425262728293031323334353637383940#include <stdio.h> #include <stdint.h> //加密函数 void encrypt (uint32_t* v, u...
-
January 03, 2020mmap下的offbynull
一、题目:pwn1先checksec下: 保护全开,ida分析一波: 12345678910111213141516171819202122232425262728293031void __fastcall __noreturn main(__int64 a1, char **a2, char **a3){ signed int choice; // eax init_0...
-
January 03, 2020offbyone引发的一连串问题
一、题目:Book先来看看保护机制: 栈溢出保护没开(这是一道堆题。。),其他保护全开 ida清晰地分析一波: 1234567891011121314151617181920212223242526272829303132333435__int64 __fastcall main(__int64 a1, char **a2, char **a3){ __int64 save...
-
January 03, 2020上海市大学生信息安全竞赛
一、Pwn1、login先看保护机制: 除了pie,其他保护全开,这题因为pie是关的,但是做太多保护全开的题目,下意识已经觉得堆的地址是变的了,但是堆地址是不变的,所以饶了下弯路才走出来,下面进入正题: 熟悉的菜单堆题,这里漏洞点主要在于free函数,有个UAF的漏洞,还有在login时可以打印出密码,这里应该是泄露地址的地方 但是按照一般的方式去unsorted bin的att...
-
January 03, 2020unlink初探
一、源码介绍:当需要合并相邻的freechunk时用到unlink:前言:P的选取一定是你要unlink合并后的P的地址,不是随便选取的~1、向后合并: 123456789101112131415161718192021222324#!c /*malloc.c int_free函数中*//*这里p指向当前malloc_chunk结构体,bck和fwd分别为当前chunk的向后和向...
-
January 03, 2020VM下的RE和PWN学习
一、前言前段时间一直碰到vm的pwn题,之前打re也是,遇到就懵,所以花时间好好整理下这部分知识点。 二、VM下的逆向首先需要搞清楚的是,vm是一种逻辑,就是自己实现一个小型的虚拟机来实现简单的操作,有点自己开发计算机的感觉。 下面一步步讲解下最重要的内容: 1、register 1234567enum regist{ R1 = 0xe1, R2 = 0xe2, R3 = 0xe...
-
January 03, 20202019roarCTF二进制部分题解
一、PWN1、easy_pwn 这题是简单题,漏洞点在edit函数: 当我们edit时输入的size大于malloc申请时输入的size,多出10即可实现offbyone,这里malloc时只能小于0x100,所以很明显直接extend我们的chunk,先扩大然后free再malloc回来即可实现下溢出修改,大概思路如下: 1、extend the chunk,切割放真实地址到我们的u...
-
January 03, 2020第一篇github博客
搭建之路第一次搭建自己的个人github博客,前前后后用了大概有2天的时间吧, 下载软件+建立库+修改主题+主题配置+文章的攥写 最头疼的是各种玄学问题的出现,让人很无语,找了各种资料去解决,收获了很多知识,也学到了很多东西,实践出真知,多实践真的很好! 配置推荐关于博客的搭建,网上有一大把教程,这里就不多说了,这里分享一个大佬的基本主题配置,很受用:https://www.jiansh...
-
January 03, 2020堆进阶学习之4大利器
一、Tcache攻击前言: 之前打比赛一直都是做ubuntu16.04的,很少做ubuntu18下的(有tcache机制),护网杯有道题是libc-2.27.so,我一开始不会做tcache,学了一晚上,理解了基础的原理和攻击方式,这里做个小小的总结。 首先是tcache的原理,这个在ctfwiki上讲的挺透彻的,这里做个复习。 1、重点需要理解的2个函数:1234567...
-
January 03, 202032位、64位下arm_pwn学习
前言:pwn的学习之路一直在进行,今天看了arm_pwn,搞环境就搞了半天,琢磨工具使用到做题,这里总结下,希望能帮助到大家,少走一点弯路。 一、环境配置:环境是一大玄学问题,这里仅仅是 我Ubuntu16.04下的环境配置,亲测有效,但是遇到玄学的问题时,也请留言,努力帮大家解决。 12345678910111213141516171819202122232425#安装qemusudo...
-
January 03, 2020AWD中的patch技巧总结
一、栈题的patch技巧1、修改read的大小: 这里很明显栈大小是0x30,但是可以输入的大小是0x12C,所以绝对的栈溢出,这里改size为0x30就不会溢出了:记住是改汇编 2、第二种改法是改leave_ret为ret_ret: 修改后: 方法二只适用于只有main函数的,没有子函数调用的栈溢出类型题目。 3、当遇到gets函数时,改成read函数: 这里改到我们的en...
-
January 03, 2020Base64加密算法小研究
1、先了解一波什么是Base64编码的加密与解密:1、Base64使用A–Z,a–z,0–9,+,/ 这64个字符. 2、编码原理:将3个字节转换成4个字节( (3 X 8) = 24 = (4 X 6) )先读入3个字节,每读一个字节,左移8位,再右移四次,每次6位,这样就有4个字节了. 3、解码原理:将4个字节转换成3个字节.先读入4个6位(用或运算),每次左移6位,再右移3次,每次8位...
-
January 03, 2020Diffie-Hellman算法
一、原理分析离散对数问题假定 a, p 均是素数,下面两个集合相等,证明过程请参考 Cryptography and Network Security 第八章: 1{ a^1 mod p, a^2 mod p, ..., a^(p-1) mod p } = {1, 2, ... , p-1 } {} 表示集合 上述式子可概...
-
January 03, 2020DES加密算法和AES加密算法初探
一、DES加密算法原理分析1、所需要的参数:key:8个字节共64位的工作密钥 data:8个字节共64位的需要被加密或者被解密的数据 mode:DES工作方式,加密或者解密(CBC模式和ECB模式) 2、初始置换DES算法使用64位的密钥key将64位的明文输入块变成64位的密文输出块,并将输出块分为L0和R0两部分,每部分均为32位。初始置换规则如下: 注意:这里的数字表示的是原数据...
-
January 03, 2020House of spirit系列
一、原理分析:House of spirit思想: 这是fastbin的一种attack的方式,就是我们想要控制的区域是不可控的,但是我们能通过伪造fake_chunk来释放它再申请从而得到目标区域,但是有前提: (1)获取目标区域地址(堆、栈、bss….) (2)伪造堆块(找到那两个可控区域) (3)有能覆盖堆指针的漏洞存在(覆盖堆指针为我们的目标区域地址) (4)调用free函数将伪堆...
-
January 03, 2020Hackme复现
开启刷题模式:学了栈溢出和格式化字符串漏洞,现在是练手的时候,打完题目总结好准备开坑堆,师傅说Hackme的题目还不错,于是果断去刚一波~下面对所有题目进行复现,也检验自己的学习情况,查缺补漏。 1、bash一波常规操作: 这题是最简单的pwn了,题目疯狂暗示cat flag,猜想应该是直接连接远程,ls再cat flag,没什么好讲的。 1234567#coding=utf8from pw...
-
January 03, 2020House of Einherjar
一、原理:那个的是unlink中的向前合并: 1234567/* consolidate backward */ if (!prev_inuse(p)) { prevsize = prev_size(p); size += prevsize; p = chunk_at_offset(p, -((long) pr...
-
January 03, 2020canary崩坏技巧
题目1:bin方法介绍:leak canary利用格式化字符串漏洞,泄露出canary的值,然后填到canary相应的位置从而绕过保护实现栈溢出。 开始分析:常规操作,先checksec下,再ida静态分析 很明显有格式化字符串漏洞和栈溢出漏洞,但是开了栈溢出保护,程序有2个输入,第一次输入可以先泄露cananry,第二次直接覆盖canary就可以栈溢出了,简单明了,gdb动态调试,可以看到...
-
January 03, 2020dl_runtime_resolve总结
一、前置知识:程序:hhh 常规思路,先检查再分析逻辑: 很简单,就只有堆栈不可执行的保护,一个write函数,还有一个read函数栈溢出(0x24,0x80)。 一想到这里,思路就是栈迁移用write先泄露libc_start_main的真实地址,再onegadget即可getshell,但是今天要学习的是不用泄露就可getshell的做法:dl_runtime_resolve 做题...
-
January 03, 2020house of force初探
house of force介绍:通俗的讲就是通过修改topchunk的size字节来控制malloc的返回地址,从而达到修改任意地址内容的目的: 具体原理分析: 因为从topchunk的切割是这样的: 12345678910111213p = av->top;size = chunksize (p);/* check that one of the above allocation ...
-
January 03, 20200CTF逆向writeup
一、Elemnet这题当时在算时,解出来的精度不够,所以一直提交writeup不正确,当时觉得很可惜哎,工具没找对~后来看了大佬的writeup,果然时精度的问题,他说手动调试那个值,直到精确为止,于是开始了复现之旅….. 看看ida: 一开始,从上往下分析逻辑,。接下来看看为何是这样: 这个函数将输入的大写转成小写(上网查),继续 输入44个字节,以-为分隔符号,切割出12个...
-
January 03, 20200CTF复现zero
一、题目zerostorage前言:这道题是2016年的0CTF的一道pwn,带了点内核的考点在里面,主要是unsorted_bin的攻击。 1、分析保护机制 保护全开,ida搞一波: 初始化时有个随机数生成的函数,为后面的堆地址进行异或加密。 1234567891011121314151617181920212223242526272829303132333435363738394041...
-
October 2019
-
October 08, 2019Largebin attack从原理到做题
一、largebin的原理学习大于512(1024)字节(0x400)的chunk称之为large chunk,large bin就是用于管理这些large chunk的 Large bins 中一共包括 63 个 bin,index为64~126,每个 bin 中的 chunk 的大小不一致,而是处于一定区间范围内 largebin 的结构和其他链表都不相同,更加复杂 largebi...
-
October 01, 2019House of romain
一、原理 House of romain简称为爆破法,是一种简单粗暴的方式,结合了fastbin attack(UAF)+unsortedbin attack(获取真实地址),特征就只有一个:UAF漏洞+堆溢出(能修改size就行),没有puts函数 攻击流程: 申请fastbin大小的chunk1,先free掉fastbin中的chunk1,然后由前一个chunk0堆溢出改chunk1大...