avatar
文章
51
标签
18
分类
26

首页
归档
标签
分类
友链
关于
S1nec-1o's B1og
首页
归档
标签
分类
友链
关于

S1nec-1o's B1og

IO函数源码阅读
发表于2024-03-03|更新于2024-04-28|Pwn知识|traditional pwn
IO函数详解该版本为libc-2.31 fopen_IO_new_fopen12345FILE *_IO_new_fopen (const char *filename, const char *mode){ return __fopen_internal (filename, mode, 1);} 调用__fopen_internal函数 __fopen_internal123456789101112131415161718192021222324252627FILE *__fopen_internal (const char *filename, const char *mode, int is32){ struct locked_FILE { struct _IO_FILE_plus fp;#ifdef _IO_MTSAFE_IO //没执行 _IO_lock_t lock;#endif struct _IO_wide_data wd; } *new_f = (struct locked_FILE ...
heap note
发表于2024-02-29|更新于2024-04-28|Pwn知识|traditional pwn
堆本篇文章摘自华庭大佬的Glibc 内存管理一书,只是插入了一些记录 什么是堆在程序运行过程中,堆可以提供动态分配的内存,允许程序申请大小未知的内存。堆其实就是程序虚拟地址空间的一块连续的线性区域,它由低地址向高地址方向增长。我们一般称管理堆的那部分程序为堆管理器。 堆管理器处于用户程序与内核中间,主要做以下工作 响应用户的申请内存请求,向操作系统申请内存,然后将其返回给用户程序。同时,为了保持内存管理的高效性,内核一般都会预先分配很大的一块连续的内存,然后让堆管理器通过某种算法管理这块内存。只有当出现了堆空间不足的情况,堆管理器才会再次与操作系统进行交互。 管理用户所释放的内存。一般来说,用户释放的内存并不是直接返还给操作系统的,而是由堆管理器进行管理。这些释放的内存可以来响应用户新申请的内存的请求。 Linux 中早期的堆分配与回收由 Doug Lea 实现,但它在并行处理多个线程时,会共享进程的堆内存空间。因此,为了安全性,一个线程使用堆时,会进行加锁。然而,与此同时,加锁会导致其它线程无法使用堆,降低了内存分配和回收的高效性。同时,如果在多线程使用时,没能正确控制,也可能影 ...
堆bug利用总结
发表于2024-02-29|更新于2024-04-28|总结|traditional pwn
All bug的利用条件,相关检查,相关例子和小手法配合heap bug note食用 off-by-oneoff-by-one 利用思路 溢出字节为可控制任意字节:通过修改大小造成块结构之间出现重叠,从而泄露其他块数据,或是覆盖其他块数据。也可使用 NULL 字节溢出的方法 溢出字节为 NULL 字节:在 size 为 0x100 的时候,溢出 NULL 字节可以使得 prev_in_use 位被清,这样前块会被认为是 free 块。(1) 这时可以选择使用 unlink 方法(见 unlink 部分)进行处理。(2) 另外,这时 prev_size 域就会启用,就可以伪造 prev_size ,从而造成块之间发生重叠。此方法的关键在于 unlink 的时候没有检查按照 prev_size 找到的块的大小与prev_size 是否一致。 check高版本的unlink: 12345678910/* consolidate backward */ if (!prev_inuse(p)) { prevsize = prev_size (p); siz ...
malloc/free源码实现
发表于2024-02-29|更新于2024-04-28|Pwn知识|traditional pwn
细读源码“Public wrappers”(公共包装器)通常指的是在软件开发中用于封装和提供对外部(公共)接口的函数或类。这些包装器函数或类可以隐藏底层实现的细节,提供更简单、更易用的接口,以方便其他开发人员使用。 glibc-2.23首先在读源码前要先了解一些核心结构 mchunkptr是chunk的指针 malloc_state12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455struct malloc_state{ /* Serialize access. */ /* 序列化访问 */ __libc_lock_define (, mutex); /* Flags (formerly in max_fast). */ /* 标志位(以前在 max_fast 中) */ int flags; /* Set if the fastbin chunks contain recently inserted fre ...
pwn小知识2
发表于2024-02-16|更新于2024-04-28|Pwn知识|traditional pwn
在我们调试的时候总会遇到一些突然出现的heap,但是我们并不知道为什么出现,此时很大可能是因为一些函数调用的时候创建的堆块 我会记录下我遇到的所有函数虽然可能没什么用 printf()[0x1041] fget()[0x1041] 接下来就是一些记录,没有什么规律 12fd = open("/dev/urandom", 0);read(fd, &buf, 8uLL); // 获得随机字节 123456789101112131415#include <stdio.h>#include <stdlib.h>#include <time.h>int main() { // 使用当前时间作为种子 srand(time(NULL)); // 生成随机数 int random_number = rand(); printf("Random number: %d\n", random_number); return 0 ...
2024-1-31 pwnable_bookwriter
发表于2024-02-01|更新于2024-04-28|2024ROIS冬令营|traditional pwn
pwnable_bookwriter执行fsop的条件: fp->_mode<=0 fp->_IO_write_ptr>fp->_IO_write_base ​ 或者(主要是前者) fp->_mode > 0 _IO_vtable_offset (fp) == 0 fp->_wide_data->_IO_write_ptr>fp->_wide_data->_IO_write_bas 主要漏洞:​ 第一个是因为通过程序可以看出内存里只够存取8个chunk,但是在add函数中确实一个i>8的判断,而存储chunk地址的相邻位置就是存取size的地址,那么就会有一个大字节溢出覆盖 ​ 第二个是在edit函数中有一个溢出就是可以通过strlen来将size扩大,慢慢的可以有一个无穷堆溢出 ​ 第三个就是在Author更改的时候即infor函数中是通过%s来读取的这样就可以泄露一个堆的地址 静态分析12345678910111213141516171819202122232425 ...
2024-1-26沙盒的学习
发表于2024-01-27|更新于2025-11-03|2024ROIS冬令营|traditional pwn
沙盒什么是orw?所谓orw就是open read write 打开flag 写入flag 输出flag 什么是seccomp?seccomp: seccomp是一种内核中的安全机制,正常情况下,程序可以使用所有的syscall,这是不安全的,比如程序劫持程序流后通过execve的syscall来getshell。所以可以通过seccomp_init、seccomp_rule_add、seccomp_load配合 或者prctl来ban掉一些系统调用. 在实战中我们可以通过 seccomp-tools来查看程序是否启用了沙箱, seccomp-tools工具安装方法如下: 12$ sudo apt install gcc ruby-dev$ gem install seccomp-tools 安装完成后通过 seccomp-tools dump ./pwn即可查看程序沙箱 1234567891011121314q@ubuntu:~$ seccomp-tools dump ./not line CODE JT JF K========================= ...
2024rois-wp
发表于2024-01-17|更新于2024-04-28|2024ROIS冬令营|traditional pwn
pwntryc很简单的 运行getshell easy_backdoor很简单的栈溢出 程序中明显栈溢出漏洞 直接溢出到ret 然后程序中有个后门 就直接getshell 有个踩雷点就是要得返回这个地址 不然堆栈会出错就嘎嘎报错,别问我怎么知道的/(ㄒoㄒ)/~~ 12345from pwn import*sh=remote('114.116.233.171',10002)payload=0x20 * b'A'+p64(0) + p64(0x0004011F8) ##没开保护直接绝对地址sh.send(payload)sh.interactive() backdoor2这道题也是栈溢出,但是很难看出来 调试就很好看出来 脑洞很大 依靠的是 溢出这个.com 然后有溢出思路,因为溢出空间是足够的,所以可以算出刚刚好溢出到ret上是win地址(也可以试出来) 12345from pwn import *sh=remote('114.116.233.171',10003)payload=0x38 ...
2024mapna
发表于2024-01-17|更新于2024-08-07|赛后复盘|traditional pwn
这算是赛后总结吧,学长说对新手很友好,我看不出来,只能说真的很”友好”。 这次虽然只做出一道题,但是总的来说收获还是非常多的 ninipwn这道题思路还是比较清晰的,主要还是脚本十分难写 首先check一下 发现是64位的然后保护全开,主要是注意PIE和Canary保护 IDA静态分析1234567int __cdecl main(int argc, const char **argv, const char **envp){ disable_io_buffering(); //初始化 puts("XOR encryption service"); encryption_service(); //加密 return 0;} 没什么东西,就一个初始化和加密函数 显然加密函数才是我们要注意的位置 12345678910111213141516171819202122232425262728unsigned __int64 encryption_service(){ char buf[264]; // [rsp+0h ...
Pwn基础入门小知识
发表于2024-01-17|更新于2024-04-28|Pwn知识|traditional pwn
PWN小知识由于pwn相关的一些专业术语新手入门时不易了解(我也是),因此在此写下零零碎碎(有错误请在评论区指出或补充),并且还有一些相关容易忘记的命令(多看多用) NX即No-eXecute(不可执行)的意思,NX(DEP)的基本原理是将数据所在内存页标识为不可执行,当程序溢出成功转入shellcode时,程序会尝试在数据页面上执行指令,此时CPU就会抛出异常,而不是去执行恶意指令。 NX位(No-eXecute),也称为XD位(eXecute Disable),是现代CPU提供的一个硬件安全特性,用于标记内存页是否可以执行代码。启用NX位可以提高操作系统的安全性,因为它可以防止攻击者将数据区域(如栈或堆)中的代码作为执行指令。 当NX位启用时: 数据执行保护(DEP):操作系统可以利用NX位来实现数据执行保护(DEP),防止在非执行内存区域(如默认的栈和堆)执行代码。 防止缓冲区溢出攻击:这使得缓冲区溢出和某些类型的内存损坏攻击更加困难,因为即使攻击者能够将恶意代码注入到一个程序的内存空间,也不能执行注入的代码,因为内存页不允许执行。 与ASLR协同工作:NX位通常与地址空间布局 ...
1…456
avatar
s1nec-1o
万事胜意
文章
51
标签
18
分类
26
Follow Me
公告
正在学习iot pwn 欢迎广大师傅与我交流
最新文章
Android设备指纹采集实践2025-11-18
Android逆向从入门到入土之AntiFakerAndroidChecker(3)2025-11-03
Android逆向从入门到入土之初识风控(2)2025-10-21
Android逆向从入门到入土(1)2025-10-11
CVE-2024-35250复现2025-09-05
分类
  • IOT安全11
    • 漏洞复现7
  • 安卓逆向5
  • Pwn知识5
  • 做题记录5
  • 2024ROIS冬令营3
  • 总结3
    • C++1
标签
杂谈 IOT安全 traditional pwn kernel windows pwn Windows kernel hexagon go protobuf 开发 Web Fuzz android Qiling Risk Control 年终总结 qemu逃逸 openwrt
归档
  • 十一月 20252
  • 十月 20252
  • 九月 20251
  • 八月 20252
  • 七月 20251
  • 五月 20254
  • 四月 20252
  • 三月 20252
网站资讯
文章数目 :
51
本站访客数 :
本站总访问量 :
最后更新时间 :
©2024 - 2025 By s1nec-1o
介是s1nec-1o的博客