![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
pwn
一只狗20000402
这个作者很懒,什么都没留下…
展开
-
上海大学生网络安全赛 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 · 460 阅读 · 0 评论 -
上海大学生网络安全赛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 · 311 阅读 · 0 评论 -
上海大学生网络安全赛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 · 339 阅读 · 0 评论 -
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 · 1208 阅读 · 0 评论 -
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 · 4216 阅读 · 0 评论 -
[极客大挑战 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 · 299 阅读 · 0 评论 -
栈迁移/栈劫持
例子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 · 1017 阅读 · 0 评论 -
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 · 194 阅读 · 0 评论 -
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 · 3004 阅读 · 0 评论 -
如何从libc地址得到栈地址
在libc中保存了一个函数叫_environ,存的是当前进程的环境变量得到libc地址后,libc基址+_environ的偏移量=_environ的地址在内存布局中,他们同属于一个段,开启ASLR之后相对位置不变,偏移量之和libc库有关通过_environ的地址得到_environ的值,从而得到环境变量地址,环境变量保存在栈中,所以通过栈内的偏移量,可以访问栈中任意变量...原创 2020-01-19 01:03:14 · 2316 阅读 · 0 评论