stat函数详解
stat函数详解stat函数
作用:获取文件信息
头文件:include <sys/types.h> #include <sys/stat.h> #include <unistd.h>
函数原型:int stat(const char *path, struct stat *buf)
返回值:成功返回0,失败返回-1;
参数:文件路径(名),struct stat 类型的结构体
struct stat 结构体详解:12345678910111213141516struct stat{ dev_t st_dev; /* ID of device containing file */文件使用的设备号 ino_t st_ino; /* inode number */ 索引节点号 mode_t st_mode; /* protection */ 文件对应的模式,文件,目录等 nlink_t st_nlink; /* numbe ...
starCTF2023-pwn复现
starCTF2023-pwn复现starvmdrop
spaCy基础学习
spaCy基础学习
Solidity内置函数
Solidity内置函数1. 块函数: 可以获取块信息block.timestamp (uint)当前块的实际戳,单位秒。
block.number (uint)当前块高度。
block.difficulty (uint)矿工会用到的出块难度。
block.gaslimit (uint)计算块需要消耗的gas限制,是转账gas和智能合约的执行gas之和
block.coinbase (address payable)矿工地址:块产生的gas费 转账地址。 也是写入块数据的地址
gasleft() returns (uint256)每个块都有执行成本,但是不一定能够完全消耗完。 矿工一般会按照最接近的gas费用来打包出块。gaslefe就是剩下的部分。
2. Message 函数 在合约内获取用户签名后的信息。msg.data (bytes calldata)用户发生的转账之外的内容,可以是文字备注之类的,但是如果接受信息的是智能合约那合约会对data进行解析,并执行date中指定的函数。
msg.sender (address payable)发送信息的发送者
msg.sig (byt ...
Solidity内置函数 - online
Solidity内置函数1. 块函数: 可以获取块信息block.timestamp (uint)当前块的实际戳,单位秒。
block.number (uint)当前块高度。
block.difficulty (uint)矿工会用到的出块难度。
block.gaslimit (uint)计算块需要消耗的gas限制,是转账gas和智能合约的执行gas之和
block.coinbase (address payable)矿工地址:块产生的gas费 转账地址。 也是写入块数据的地址
gasleft() returns (uint256)每个块都有执行成本,但是不一定能够完全消耗完。 矿工一般会按照最接近的gas费用来打包出块。gaslefe就是剩下的部分。
2. Message 函数 在合约内获取用户签名后的信息。msg.data (bytes calldata)用户发生的转账之外的内容,可以是文字备注之类的,但是如果接受信息的是智能合约那合约会对data进行解析,并执行date中指定的函数。
msg.sender (address payable)发送信息的发送者
msg.sig (byt ...
slub allocator之kernel UAF
slub allocator之kernel UAFUAF 即 Use After Free,通常指的是对于释放后未重置的垂悬指针的利用,此前在用户态下的 heap 阶段对于 ptmalloc 的利用很多都是基于 UAF 漏洞进行进一步的利用。
在 CTF 当中,内核的 “堆内存” 主要指的是直接映射区(direct mapping area),常用的分配函数 kmalloc 从此处分配内存,常用的分配器为 slub,若是在 kernel 中存在着垂悬指针,我们同样可以以此完成对 slab/slub 内存分配器的利用,通过 Kernel UAF 完成提权。
内核堆利用与绑核slub allocator 会优先从当前核心的 kmem_cache_cpu 中进行内存分配,在多核架构下存在多个 kmem_cache_cpu ,由于进程调度算法会保持核心间的负载均衡,因此我们的 exp 进程可能会被在不同的核心上运行,这也就导致了利用过程中 kernel object 的分配有可能会来自不同的 kmem_cache_cpu ,这使得利用模型变得复杂,也降低了漏洞利用的成功率。
比如说 ...
shadow文件分析
shadow文件分析前言在分析路由器的时候需要用到默认的密码是什么,但是我无法从网上知道,于是我想办法通过shadow去分析密码出来
shadow文件当前的Linux系统出于安全性考虑,etc/passwd 文件中并没有存储Linux用户的密码信息,而是转移到了/etc/shadow文件下,又称为“影子文件”。该文件只有root用户才能read权限,其他用户无权查看,使密码泄露风险降低。同时shadow文件中存储的密码采用SHA512散列加密,相比较原始的MD5,加密等级更高。
shadow文件密码存储格式:
id
Method
1
MD5
2a
Blowfish(not in mainline glibc;added in some Linux distribution)
5
SHA-256(since glibc 2.7)
6
SHA-512(since glibc 2.7)
salt是长度1-16字符的随机数,随机数的引入增大了破解难度
encrypted是最终的密文,即通过加密算法和salt(盐参)计算的最终结果
示例:
1$6 ...
Sapido RB-1732 远程命令执行漏洞
Sapido RB-1732 远程命令执行漏洞漏洞介绍sapido 是SAPIDO公司开发的一款家用路由器,其RB-1732系列v2.0.43之前的固件版本存在一处命令执行漏洞。该漏洞的产生原因是。服务器的syscmd.asp 页面没有对传递过来的参数进行过滤,这使得用户以参数的形式将系统命令发送给服务器,并在服务器上执行
漏洞影响1234BR270n-v2.1.03BRC76n-v2.1.03GR297-v2.1.3RB1732-v2.0.43
网络测绘1app="Sapido-路由器"
环境搭建首先下载固件然后binwalk解包

发现是Squashfs文件系统的,然后使用FirmAE搭建环境,或者使用Firmware Analysis Toolkit,但是我的这个环境老是搭建不起,于是使用的是FirmAE
123sudo ./run.s ...
RSA各种算法
RSA基础RSA原理1.n = p * q n是模数 p和q都是素数,通过欧拉函数得到与n互素的个数φ(n)
2.欧拉数φ(n)=(p-1)*(q-1)
3.选择一个e,e的取值在(1,φ(n)),且e与φ(n)需要互素,不然无逆元得不到d,通常e取65537
4.求出e与φ(n)的模逆数d, e * d ≡ 1 mod φ(n)
加密解密对明文进行加密,c = m^e mod n, 即 c= pow(m,e,n)
对密文进行解密,m = c^d mod n,即m = pow(c,d,n)
其中公钥为(e,n),私钥为(d,n)
解密脚本12345678910111213import gmpy2import randomp=getPrime(1024) #题目上所给的p和qq=getPrime(1024)c=''e=65537n=p*qphi=(p-1)*(q-1)d=int(gmpy2.invert(e,phi))m=pow(c,d,n)from Crypto.Util.number import *print(long_to_bytes(m))
...
ROPgadget 安装 错误处理 与使用
ROPgadget 安装 错误处理 与使用0x0 开始做题需要用到ROPgadget,去安装下载,然后麻烦越来越多,将成功过程记录下来。它就是用来查找你的二进制文件中你想要的一些指令,方便你加以利用。有了ROPgadget 你会发现one_gadget也是必须的。
one_gadget的安装与使用
0x0.1介 绍使用此工具,您可以在二进制文件中搜索Gadgets,以方便您对ROP的利用。
随着 NX 保护的开启,以往直接向栈或者堆上直接注入代码的方式难以继续发挥效果。攻击者们也提出来相应的方法来绕过保护,目前主要的是 ROP(Return Oriented Programming),其主要思想是在栈缓冲区溢出的基础上,利用程序中已有的小片段 (gadgets) 来改变某些寄存器或者变量的值,从而控制程序的执行流程。所谓 gadgets 就是以 ret 结尾的指令序列,通过这些指令序列,我们可以修改某些地址的内容,方便控制程序的执行流程。
我们知道x86都是靠栈来传递参数的而x64换了它顺序是rdi, rsi, rdx, rcx, r8, r9,(这里6个寄存器可以被理解为Gadget ...



