格式化字符串
C语言变参函数1man 3 printf //查看C语言格式化字符串 格式化字符串 $第n个参数%s变量所对应地址的内容%p获取对应栈的内存%n不输出字符,但是把已经成功输出的字符个数写入对应的整型指针参数所指的变量。hn(half int) hhn(half half int) 1.找到偏移值 通过fmtarg 来判断某个参数的偏移。 2.任意地址写入 3. ->RELRO->got表项->一般改printf函数 栈 one_gadget malloc_hook:printf参数超过 %43$p —>调用 malloc iofile jarvisoj_fm1关闭PIE,我们可以直接将x的地址写入后用%n修改所指的变量。buf为栈上第11个参数 1234567891011121314#!/usr/bin/env pythonfrom pwn import...
jarvisoj_level2
# 这题其实蛮简单的但是涉及到了gdb的多线程调试,故记录一下。 尝试gdb调试,提示gdb开始调试子进程,然后子进程退出,打开ida查看一下,可以看到在vulnerable_function()中,在system("echo Input:");才进入漏洞函数,那么我们就需要又 由于system函数会打开一个shell执行命令,会folk一个子进程,因此我们需要使gdb一只调试主进程, gdb多线程调试常用操作 GDB调试多进程的命令介绍和演示 - 刘跑跑 - 博客园 (cnblogs.com) info inferiors 查看所有进程 inferiors 2 切换到编号为2的进程 detach inferiors 2 detach掉编号为2的进程 kill inferiors 2 kill掉编号为2的进程 set follow-fork-mode parent 只调试父进程(GDB默认) set follow-fork-mode child 只调试子进程 show...
get_started_3dsctf_2016
#栈溢出,查看漏洞函数。 我们可以直接将程序控制流转移到打开文件来绕过if语句 exp123456789from pwn import *#sh= remote("node5.buuoj.cn",26045)sh = process('./get_started_3dsctf_2016')addr=0x080489b8offset = 56payload =...
CrackRTF
CrackRTF 函数atoi将输入的字符串化为整型,同时限定了v7为长度为6的字符串,因此我门可以尝试爆破,sub_401230有标识符0x8004u,判断为sha1 12345678910import hashlibstring='@DBApp'for i in range(100000,999999): flag=str(i)+string x = hashlib.sha1(flag.encode("utf8")) y = x.hexdigest() if "6e32d0943418c2c33385bc35a1470250dd8923a9" == y: print(flag) break 123321@DBApp passwd(2)只限定了输入的长度,有 95^6种可能 (可见字符),显然无法直接爆破。 在sub_4014D0我们发现了 hResInfo = FindResourceA(0, (LPCSTR)0x65,...
wp2
[WUSTCTF2020]level3 base64换表,给出了加密后的字符串,那么我们只需要找到换表函数即可,通过交叉引用查看到关键函数 12345678910base='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'base=list(base)for i in range (0,10): x=base[i] base[i]=base[19-i] tmp= 19-i base[tmp]=x print("".join(base)) base64解密即可 特殊的 BASE64 猜测是base64换表
z3求解器
Z3z3有整型(Int),实型(Real)和向量(BitVec)。 先生成一个求解对象Solver solver.model()求解 BUUCTF-re-[GUET-CTF2019]re1234567891011121314151617181920212223242526272829303132333435363738394041from z3 import *s = Solver()a1 = [0]*32for i in range(32): a1[i] = Int('a1['+str(i)+']')s.add( 1629056 * a1[0] == 166163712 )s.add( 6771600 * a1[1] == 731332800 )s.add( 3682944 * a1[2] == 357245568 )s.add( 10431000 * a1[3] == 1074393000 )s.add( 3977328 * a1[4] == 489211344 )s.add( 5138336 * a1[5] ==...
第2章——物理层
感觉第一章包括了一些不太会考的知识点,物理层就简要一些吧,尽量向408考纲靠拢,主要还是依据书上的结构先复习一遍。 物理层的基本概念 物理层的协议也常称为物理层规程(procedure) 可以将物理层的主要任务描述为确定与传输媒体的接口有关的一些特性, 即:(1) 机械特性指明接口所用接线器的形状和尺寸、引脚数目和排列、固定和锁定装装置等。平时常见的各种规格的接插件都有严格的标准化的规定。(2) 电气特性指明在接口电缆的各条线上出现的电压的范围。(3) 功能特性指明某条线上出现的某一电平的电压的意义。(4) 过程特性指明对千不同功能的各种可能事件的出现顺序。 物理层要完成传输方式的转换:并行传输(计算机内部)——>串行传输(通信线路)——>并行传输 源系统包含源点(源站,信源)和发送器(调制器)。 目的系统包含接收器(解调器)和终点(目的站,信宿)。 通信的目的是传送消息(message)。 数据(data)是运送消息的实体。...
第1章——概述
start计算机网络(简称为网络)由若干结点(node)和连接这些结点的链路(link)组成。 互联网具有两个重要基本特点,即连通性和共享(资源共享) 计算机网络发展的三个阶段 年份 阶段 1969年 从单个网络ARPANET向互联网发展的过程 1985年 是建成了三级结构的互联网NSFNET 1993年 逐渐形成了多层次的ISP结构的互联网。(主干ISP,地区ISP,本地ISP) 互联网交换点IXP 主要作用就是允许两个网络直接相连并交换分组, 而不需要再通过第三个网络来转发分组。 www20世纪90年代,由欧洲原子核研究组织CERN开发的万维网WWW (World Wide Web)被广泛使用在互联网上。 互联网标准Step1:互联网草案(Internet Draft) Step2: 建议标准( Proposed Standard) Step3:互联网标准(Internet Standard) Step 互联网草案(Internet Draft) 有效期6个月 建议标准( Proposed...
基础rop
ROPROP的全称为Return-oriented programming(返回导向编程) 栈缓冲区溢出的基础上,利用程序中已有的小片段 (gadgets) 来改变某些寄存器或者变量的值,从而控制程序的执行流程。 checksec Arch程序架构信息,判断是64位还是32位,exp编写的时候是p64还是p32,是大端序还是小端序 RELRORELRO 是 “Relocation Read-Only” 的缩写,用于保护程序的全局偏移表 (GOT) 免受攻击。 StackStack-canary(金丝雀保护),用于检测栈溢出攻击。它是一个随机的值,被插入到栈帧中,并在函数返回时被检查。 NXNX enabled如果这个保护开启就是意味着栈中数据没有执行权限,如此一来,当攻击者在堆栈上部署自己的shellcode并触发时,智慧直接造成程序的崩溃,但是可以利用rop这种方法绕过 PIEPIE 是 “Position Independent Executable”...