- 博客(88)
- 收藏
- 关注
原创 ch2 系统调用实验
call sys_call_table(,%eax,4) 之前是一些压栈保护,修改段选择子为内核段,call sys_call_table(,%eax,4) 之后是看看是否需要重新调度。根据汇编寻址方法它实际上是:call sys_call_table + 4 * %eax,其中 eax 中放的是系统调用号,即 __NR_xxxxxx。他俩以及所有 put_fs_xxx() 和 get_fs_xxx() 都是用户空间和内核空间之间的桥梁,在后面的实验中还要经常用到。系统调用与调用自定义函数不一样的是。
2023-02-05 23:26:19
535
原创 IP协议及IP分片
步骤执行前几篇文章的脚本3.1,3.2,3.3,创建拓扑,创建虚拟路由,关闭网卡offload在路由器RA上修改tapRA_RB的MTU为1000byte(Maximum Transmission Unit网络上传送的最大数据包)ip netns exec RA ifconfig tapRA_RB mtu 1000在路由器RB上修改tapRB_RA的MTU为1000byteip netns exec RB ifconfig tapRB_RA mtu 1000打开两个终端,分别模拟ns56A和
2022-03-30 22:59:33
788
原创 TCP流量控制协议
步骤sysctl -w net.ipv4.tcp_rmem='4096 8192 8192'TCP连接接受缓存参数,限制linux分配的接受缓存为9032字节执行脚本3.1,3.2,3.3,模拟网络ip netns exec ns56A bash模拟ns56A终端ip netns exec ns57C bash模拟ns57C终端在ns56A上创建文件大小10K字节的文件truncate -s 10K 10K.0在ns57c上ε=ε=ε=┏(゜ロ゜;)┛7c抓包ip netns
2022-03-30 21:47:53
1405
原创 TCP可靠传输与重传分析
实验步骤sysctl -w net.ipv4.tcp_rmem='4096 65536 65536' 降低缓存数,减少窗口值sysctl -w net.ipv4.tcp_sack=0避免使用sack重传算法然后执行之前的脚本,模拟我上述几篇文章的网络拓扑执行之后,用iptable设置规则,以10%的丢包率模拟丢包ip netns exec RA iptables -I FORWARD -d 192.168.57.254 -m statistic --mode random --proba
2022-03-29 21:12:21
1440
原创 TCP协议和连接管理
连接管理先利用truncate命令创建一个大小3500字节文件,命名为3500.0truncate -s 3500 3500.0本地目录也多了一个文件用nc在57c的4499端口打开TCP协议nc -e /bin/sh -lv 4499TCP连接的字符会被发送到57C中执行在56A中nc 192.168.57.254 4499然后在ns56A中可以读取文件,因为是/bin/sh权限了!(pwn题很像)cat 3500.0分析可以看出,套接字对中的端口号是192.168.5
2022-03-28 22:43:06
1920
原创 ARP流量包分析
ARP结构根据抓的包,可以填下表ARP缓存策略首先有这样一个结构ns56A往192.168.57.126 也就是ns57Aping了一下,依次在tap56A、tap56B、tapRB_RA、tapRA_RC和tapRC_57A抓包,分别是ns56A,ns56B,RB,RA,RC首先reply告诉了56A,56.1的MAC是哪,这就是56A的下一跳其中在ns56A也会留有缓存而在56B中,没有这条缓存,因为不是它自己的mac,没有和A通信所以只是收到一个广播消息而路由器RB的5
2022-03-23 22:02:31
390
原创 UDP协议分析
步骤建立网络拓扑#!/bin/shset -xsysctl -w net.ipv4.ip_forward=1#ip分组转发systemctl stop firewalld.service#关闭linux防火墙sysctl -w net.ipv4.conf.all.rp_filter=0#关闭linux反向校验sysctl -w net.ipv4.conf.default.rp_filter=0systemctl start iptables.service#开启iptable服务sysc
2022-03-23 20:52:36
3320
1
原创 http抓包
步骤输入http.host == 域名得到ip用过滤器输入ip.addr == 得到和目的地址有关的PDU可以点击协议等来选择信息Analyze菜单→ Follow TCP Stream子菜单,跟踪TCP流,选择其中任意一对HTTP请求和响应,分析HTTP请求和响应的格式输入"http.set_cookie or http.cookie使Wireshark显示包含set-cookie的HTTP响应和包含cookie的HTTP请求分析根据网际层的PDU结构可知,其包含source address
2022-03-22 16:58:41
5204
原创 虚拟网络环境抓包
概述相当于建立了两个用户为ns1和ns2,再创建一对tap类型的以太网接口,迁移到ns1和ns2后分配ip地址,并将接口设置为up,然后用这两个用户来ping,并在tap1接口抓包。过滤器用过滤器抓包,比如ip.addr == 192.168.50.1可以抓出特定ip地址的包...
2022-03-21 20:58:20
836
原创 csapp attack lab
准备工作(根据cmu上的write up翻译)文件有:readme.txt:描述了目录下的文件ctarget:代码注入的可执行文件rtarget:返回导向编程的可执行文件cookie.txt:一个8个十六进制数组成的farm.c:一些可以用来打rop的gadget的源码实验都用的ret指令,会返回三个地方:(1)touchx函数 (2)自己写的代码 (3)从farm中得到的gadget所有的输入都是这样一个getbuf()函数:1 unsigned getbuf()2 {3 char
2022-02-28 20:49:33
233
原创 csapp bomblab
实验概述实验模拟了一个二进制炸弹,有六个“雷管”,输入正确的字符串就可以拆卸。要进行反汇编和gdb调试 /* Hmm... Six phases must be more secure than one phase! */ input = read_line(); /* Get input */ phase_1(input); /* Run the phase
2022-02-05 04:20:19
347
原创 csapp datalab
异或运算int bitXor(int x, int y) { return (~(~x&~y)&~(x&y));}32位最小值int tmin(void) { return 1<<31;}32位最大值int isTmax(int x) { return !(~(x+1)^x)&!!(x+1);}奇数偶数位int allOddBits(int x) { return !((x&0xAAAAAAAA)^0xAAAAAA
2022-01-22 23:20:52
445
原创 C++逆向总结
C在定义一个结构体的时候,就是定义一个新的数据类型而C++在定义一个结构体,会有一个this指针,指向本结构体的地址,传的this指针的值一般给到了ecx。主要应用如下typedef struct{ int x = 1; int y = 2; void function(int x, int y) { this->x = x; this->y = y; }}str;int main(){ str p;
2021-12-03 21:23:36
2799
原创 20190ctf ageis
Analysischecksecfranex@franex-virtual-machine:~/桌面/babyaegis$ checksec aegis[*] '/home/franex/\xe6\xa1\x8c\xe9\x9d\xa2/babyaegis/aegis' Arch: amd64-64-little RELRO: Full RELRO Stack: Canary found NX: NX enabled PIE:
2021-11-24 00:05:18
997
原创 killer queen ctf
SEARCHING先看一下ida的main函数int __cdecl __noreturn main(int argc, const char **argv, const char **envp){ int v3; // [rsp+Ch] [rbp-4h] setbuf(stdin, 0LL); setbuf(stdout, 0LL); setbuf(stderr, 0LL); puts("All my homies hate fufu's."); puts("You can
2021-11-13 01:27:32
548
原创 kernel bypass smep
和之前的babydriver一样,用这个来解semp开启以后,ret2usr就不能用了,因为semp让在ring0权的时候执行用户空间的代码直接crash掉而系统开启semp的方法是设置cr4寄存器的第20位为1,第20位为0时关闭gdb 如果不能看 cr4 寄存器的值,可以通过 报错查看。为了关闭 smep 保护,常用一个固定值 0x6f0,即 mov cr4, 0x6f0#include <stdio.h>#include <stdlib.h>#include &l
2021-11-09 17:45:28
507
原创 kernel pwn ret2usr
思路通过读取 /tmp/kallsyms 获取 commit_creds 和 prepare_kernel_cred 的方法相同,同时根据这些偏移能确定 gadget 的地址。leak canary 的方法也相同,通过控制全局变量 off 读出 canary。但是之后就不同了rop的构造是执行函数commit_cred(prepare_kernel_cred(0))进行提升权限,通过swapgs; iretq返回用户态执行system_calll而ret2usr是执行用户态中的commit_cre
2021-11-08 00:30:03
215
原创 kernel ROP
之前有一个点,root权限时的gid和uid为0内核态提权到root,一般就是执行commit_creds(prepare_kernel_cred(0));这两个函数原理就是分配一个新的cred结构,uid = 0,gid = 0。此时就是root权限输入cat /proc/kallsyms可以查看他们的地址commit_creds和prepare_kernel_cred(0)都是内核函数现在看一下2018年qwb的core,回顾一下之前的start.sh:启动脚本,标明了启动的方法,保护措施
2021-11-07 01:57:41
915
原创 KILL QUEEN CTF
目录zoom2winzoom2win检查保护机制[*] '/home/ubuntu16/Desktop/zoom2win' Arch: amd64-64-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x400000)在ida里面看函数int __cdecl main(int argc, const c
2021-11-03 00:02:31
249
原创 2021强网拟态复现
sonicchecksec一下发现开了PIE和NX还有relro,这里比赛的时候本来想打ret2csu的。。好像是这个名字。。忘了程序打印出了main的地址,开PIE后三位不变,所以打印出main地址后直接取除了后三位的其他位,在ida找后三位地址加上就行,然后就可以栈溢出getshellfrom pwn import *#r=remote('123.60.63.90',6890)r = process('./sonic')context(arch='amd64', os='linux')
2021-10-30 18:37:49
721
原创 kernel pwn-kernel UAF
不同于用户态pwn,内核pwn就不是用python远程拿shell,而是给一个环境包,下载qemu本地起系统。给定以下文件boot.sh: 一个用于启动 kernel 的 shell 的脚本,多用 qemu,保护措施与 qemu 不同的启动参数有关bzImage: kernel binary rootfs.cpio: 文件系统映像...
2021-10-24 17:02:09
2284
原创 house of grey
linux采用的文件系统是/proc文件系统,在运行时可以更改内核的数据结构和设置参数等/proc/self/maps可以得到当前进程的内存映射关系,通过读该文件的内容可以得到内存代码段基址。/proc/self/mem是进程的内存内容,通过修改该文件相当于直接修改当前进程的内存。但是不可读所以可以结合map的信息确定读的偏移值,只有读取的偏移值是被映射的区域才能正确读取内存内容。写入mem文件来直接写入内存,可以直接修改代码段,放入我们的shellcode,从而在程序流程执行到这一步时执行shel
2021-10-18 00:41:54
160
原创 house of orange
house of orange是一道同名题的技术先看一下保护机制,是保护全开的一般做堆题先泄露libc的地址,但是这里没有free这里有个思路修改top chunk的size值,然后malloc一个比这个大的chunk,然后系统调用sysmalloc分配堆,最后top chunk就会被释放,放入unsorted bin,相当于可以达到free一个堆块的效果了可以看到我们已经成功泄露出main arena然后再edit0x10个字节,就可以打印出堆地址然后利用unsorted bin修改_
2021-10-16 16:10:57
189
原创 how2heap glibc 2.27
fastbin dup展示了glibc2.27里利用double free进行的fastbin attack#include <stdio.h>#include <stdlib.h>#include <assert.h>int main(){ setbuf(stdout, NULL); printf("This file demonstrates a simple double-free attack with fastbins.\n"); pri
2021-10-10 02:08:22
833
原创 lab2 物理内存管理
物理内存分布和大小是用bios进行中断调用进行的,而中断调用需要用到bios,bios怎么运用呢?需要在实模式下,也就是bootloader还未加载前使用,BIOS中断获取内存可调用参数为e820h的INT 15h BIOS中断。返回值用di来增长,找到一个个内存的entry,然后用下面结构的缓冲区来保存struct e820map { int nr_map; struct { .
2021-10-02 02:11:42
416
原创 绿城杯 null
题目特征增删改查思路j8题不给libc恶心人,平时也没有用libcsearcher的习惯,这道题给了堆存储的数组,read_input这里有个洞off by null,多申请0x8然后可以覆盖pre_inuse位,那就用unlink来打,修改free_hook。# -*- coding: utf-8 -*-from pwn import *elf=ELF('./1')p=remote('82.157.5.28',51004)libc=ELF('libc6_2.23-0ubu
2021-10-01 16:32:56
254
原创 Noleak
这道题很有意思,是比较常见的堆题,记录一下思路就是通过unlink改写chunk数组地址为bss段上地址,然后编辑堆就可以在bss上写入shellcode然后去通过unsorted bin构造exp链接:链接#coding:utf8 from pwn import * context(os='linux',arch='amd64') elf = ELF('./timu') libc = ELF('/lib/x86_64-linux-gnu/libc-2.23.so')
2021-09-28 16:54:55
145
原创 lab1 系统启动 bios加载 bootloader加载
启动地址:CS和EIP结合决定启动地址(一开点,cs和eip就设置的值,值决定在哪个地址取指令地址)cs隐含一个base的内容,base为基址,base+eip就是地址,而加电后访问地址的内存是bios,会看到从一开始的地址跳一个很大的地址然后到一个可以访问1M的内存空间去执行(实模式寻址空间为1M)bios做硬件初始化工作,固件加载存储设备的第一个扇区,的512字节到内存的0x7c00.。。。。,同时也跳到这个地址,然后就从0x7c00……开始执行这个bootloader。bios的工作问题,只能加载
2021-09-25 01:40:23
478
原创 rsa题目
easyrsa还记得veryeasy RSA吗?是不是不难?那继续来看看这题吧,这题也不难。已知一段RSA加密的信息为:0xdc2eeeb2782c且已知加密所用的公钥:(N=322831561921859 e = 23)请解密出明文,提交时请将数字转化为ascii码提交比如你解出的明文是0x6162,那么请提交字符串ab提交格式:PCTF{明文字符串}factorord分解nhttp://factordb.com/分解链接#!/usr/bin/python #coding:ut
2021-09-18 00:06:49
685
原创 RSA算法深入剖析
数论基础欧拉函数小于n的正整数中与n互质的数的数目若 n = pq ,p和q是质数,则φ(n)=φ(q)∗φ(p)=(q−1)∗(p−1)\varphi(n) = \varphi(q)*\varphi(p) = (q-1)*(p-1)φ(n)=φ(q)∗φ(p)=(q−1)∗(p−1)同余同余:如果两个整数除以同一个整数m的余数相同,则二者关于m同余即a÷m……na\div m……na÷m……n且 b÷m……nb\div m……nb÷m……n同理,若整数a和b满足a-b能被整数m整除,则两
2021-09-17 21:50:00
170
原创 rsa加密算法简单介绍
RSA加密算法简单介绍密码学基础一、pandas是什么?二、使用步骤1.引入库2.读入数据总结密码学基础一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码如下(示例):import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsimport warningswarnings.
2021-09-15 22:58:12
945
原创 ucore实验
实验目的了解操作系统开发实验环境熟悉命令行方式的编译、调试工程掌握基于硬件模拟器的调试技术熟悉C语言编程和指针的概念了解X86汇编语言实验概述lab1:硬件层实现,中断等lab2:物理内存管理lab3:虚拟内存管理lab4:内核线程管理,CPU进程、线程管理lab5:用户态进程管理lab6:进程调度,进程运行选择lab7:同步互斥lab8:文件系统...
2021-09-07 23:50:46
220
原创 2018年强网杯pwn题复现
silent漏洞位置: free后没有给指针置空,edit也没有检查chunk是否free利用思路: 利用uaf把chunk进入fastbin中,构造三个单链表来写free_hook然后getshell
2021-08-31 14:13:31
261
原创 Tcache attack
文章目录前言一、Tcache相应结构体tcache_entry和tcache_perthread_structtcache_perthread_struct源码分析libc_malloc__tcache_init()申请内存tcache_get()__libc_free()_int_free()tcache_put()二、Tcache attckoverview总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就
2021-08-23 01:38:49
331
原创 IO_FILE hack FSOP
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录概述hack例题:House of orange 2016-pwn450思路exp:概述来自CTFwikiFSOP是File Stream Oriented Programming 的缩写,根据前面对 FILE 的介绍得知进程内所有的_IO_FILE 结构会使用_chain 域相互连接形成一个链表,这个链表的头部由_IO_list_all 维护。FSOP 的核心思想就是劫持_IO_list_all 的值来伪造链表和其中
2021-08-21 02:27:11
569
原创 IO_FILE hack 修改vtable
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档IO_file hackIO调用的vtable函数freadfwritefclose思路例题2018 HCTF the end分析思路:利用IO调用的vtable函数fread_IO_sgetn函数调用了vtable的_IO_file_xsgetn。_IO_doallocbuf函数调用了vtable的_IO_file_doallocate以初始化输入缓冲区。vtable中的_IO_file_doallocate调用了vtable中
2021-08-19 14:01:59
506
原创 IO_file fopen
@TOC前言跟着raycp师傅学习IO_FILE。原文链接提示:以下是本篇文章正文内容,下面案例可供参考概述缓冲区建立函数_IO_doallocbuf(上一篇详细描述过)会在里面建立输入输出缓冲区,并把基地址保存在_IO_buf_base中,结束地址保存在_IO_buf_end中。如果缓冲区作为输出缓冲区使用,会将基址址给_IO_write_base,结束地址给_IO_write_end,同时_IO_write_ptr表示为已经使用的地址。即_IO_write_base到_IO_writ
2021-08-18 23:03:34
407
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人