- 博客(15)
- 收藏
- 关注
原创 scanf源码分析
本文分析的是glibc2.31中的scanf相关源码,目的不是研究scanf的算法,而是说明scanf在IO attack中的利用方法,属于CTF的范畴scanf.c其实就是对__vscanf_internal的封装__scanf (const char *format, ...){ va_list arg; int done; va_start (arg, format); done = __vfscanf_internal (stdin, format, arg, 0)
2020-12-02 19:51:10 1280
原创 glibc2.31下的新double free手法/字节跳动pwn题gun题解
回顾double free手法在glibc2.27之前,主要是fastbin double free: fastbin在free时只会检查现在释放的chunk,是不是开头的chunk,因此可以通过free(C1), free(C2), free(C1)的手法绕过 并在在fastbin取出时,会检查size字段是不是属于这个fastbin,因此往往需要伪造一个size glibc2.27~glibc2.28,主要是tcache double free 相较于fastbin double fr
2020-12-02 19:50:57 4414
原创 上海大学生网络安全赛 EASY_ABNORMAL
程序分析offset-by-one double free BackDoor函数prctl的作用:struct sock_fprog /* Required for SO_ATTACH_FILTER. */{ unsigned short len; /* Number of filter blocks */ struct sock_filter *filter;};struc..
2020-11-15 14:08:26 472
原创 上海大学生网络安全赛lgtwo
程序分析思路有一个offset-by-one,但是题目没libc,应该只会是2.27与2.23先尝试按照2.27的来试试#! /usr/bin/pythonfrom pwn import *context.log_level = 'debug'context(arch='amd64', os='linux')#sh = process('./pwn')elf = ELF('./pwn')libc = ELF('./libc.so.6')sh = remo...
2020-11-15 13:56:23 324
原创 上海大学生网络安全赛cpu_emulator
程序分析指令是4B一组,共32位,第一种指令格式为|6|5|5|16|,代表指令类型、Ope1、Ope2、Ope3先不关注第二种指令类型根据BrainFuck的经验,考虑这里有没有Stack/Buffer的溢出,Stack在bss上,溢出只能打到stdou指针,很少是这种。Buffer在堆上,堆溢出较为常见,并且是2.27的libc。因此本题思路位:通过指令的不合法操作数,造成堆溢出来getshell思路先考虑咋构造处一个堆溢出,考虑指令0x2B,只要让stack[Ope1]...
2020-11-15 13:42:11 350
原创 [极客大挑战 2019]Not Bad的另一种思路
保护漏洞算上rbp只有0x20的溢出空间思路1利用jmp rsp的GG执行栈上的shellcode,这个思路用的人很多,就不再说了思路2:不使用jmp rsp如果需要开启shellcode,最常用的就是ret到shellcode的地址,为了获取shellcode地址,那么就有了两个选择泄露栈地址,做不到 栈迁移到一个已知位置通过leave指令使得rbp = 已知空间buf之后,需要在0x18长度内完成两件事情向buf中写入exp leave+ret让rsp迁
2020-10-22 14:50:10 312
原创 metasequoia :Summoner
结构体struct Creature{ char* name; unsigned int level;};思路level为5时即可但是写入限制了level只能为4漏洞只释放了申请的name,然后把creature设为NULL,没有释放creature并且申请creature时没有清空level使用前没有初始化level, 可以现在name中...
2020-02-20 17:21:23 265
原创 栈迁移/栈劫持
例子https://github.com/scwuaptx/HITCON-Training/tree/master/LAB/lab6#include <stdio.h>#include <stdlib.h>#include <unistd.h>int count = 1337 ;int main(){ if(count != 13...
2020-01-30 13:49:42 1032
原创 linux系统调用
系统调用过程32位64位系统调用号表格式: #define __NR_名字 number32位cat /usr/include/asm/unistd_32.h #ifndef _ASM_X86_UNISTD_32_H#define _ASM_X86_UNISTD_32_H 1#define __NR_restart_syscall 0#define __NR_ex...
2020-01-19 07:12:31 205
原创 ctf-pwn:canary绕过
文章目录覆盖00字符读出canary原理利用条件漏洞代码编译选项EXP利用格式化字符串漏洞读出canary原理漏洞代码编译选项EXP逐字节猜解canary原理漏洞代码编译EXPSSP Leak原理覆盖00字符读出canary原理canary的值设计为以0x00结尾,防止read,printf灯函数直接读出通过栈溢出覆盖最低位的字节,从而获得canary利用条件存在read/pri...
2020-01-19 03:03:57 3093
原创 如何从libc地址得到栈地址
在libc中保存了一个函数叫_environ,存的是当前进程的环境变量得到libc地址后,libc基址+_environ的偏移量=_environ的地址在内存布局中,他们同属于一个段,开启ASLR之后相对位置不变,偏移量之和libc库有关通过_environ的地址得到_environ的值,从而得到环境变量地址,环境变量保存在栈中,所以通过栈内的偏移量,可以访问栈中任意变量...
2020-01-19 01:03:14 2377
原创 ASLR与PIE
全称ASLR:Address Space Layout Randomization PIE:Position Independent Executables作用ASLR:随机放置关键数据的地址空间,放置攻击者跳转到内存特定位置 PIE:生成相对寻址的位置无关的可执行程序谁实现?ASLR:操作系统 cat /proc/sys/kernel/randomize_va_space:...
2020-01-14 11:14:58 834
原创 C++实现LeNet-5卷积神经网络
搞了好久好久,公式推导+网络设计就推了20多页草稿纸花了近10天程序进1k行,各种debug要人命,只能不断的单元测试+梯度检验因为C++只有加减乘除,所以对这个网络模型不能有一丝丝的模糊,每一步都要理解的很透彻挺考验能力的,很庆幸我做出来了,这个是第二版,第一版也写了1k行,写完才发现,模型错了,只能全删掉重新写算是一次修行网络的设计,编代码时的各种考虑,debug记录,我不想整理了...
2019-08-11 15:33:49 2092 4
原创 C++实现手写数字识别
/* @作者:CHH @版本V1.0 @邮箱:chh_is_dog@163.com @编写时间:2019-7-29 @功能:使用反向传播神经网络识别手写字体 @使用方法: 1.生成的文件会自动到同一目录下寻找MNIST的四个手写字体库 2.字体库下载地址:http://yann.lecun.com/exdb/mnist...
2019-07-29 17:45:18 6001 6
原创 二叉树的另一种后续遍历
二叉树的另一种后续遍历二叉树的后序遍历为 左右根,困难点在于必须要左右访问完了才能访问根,所以不能像前序或者中序那样一路向左,我们可以换一个思维,即左右根的遍历正好与根右左的遍历是逆序的关系,所以我们可以模仿前中序的遍历,一路向右,然后逆序输出void postTraversal(Node* root){ stack<char> res; //保存结果 stack<No...
2019-02-09 15:43:41 127
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人