Academic
Academic
Home
Posts
Projects
Publications
Light
Dark
Automatic
Posts
VPS 配置 v2ray + WebSocket + TLS 梯子教程
个人VPN搭建
QianLong Sang
Last updated on Jul 29, 2022
4 min read
VPN
,
Network
First Post, Hello Hugo
第一篇博客,测试字体
QianLong Sang
Last updated on Apr 19, 2022
1 min read
Demo
[CTF] 环境配置 为了保证利用脚本能够正常打通,我们通常需要在本地准备相同的运行环境,并在进行远程利用之前先在本地进行测试。 传统 CTF Pwn 题目通常仅需要以下工具便能完成解题: IDA:用于对题目进行逆向分析。 Python + pwntools:用于编写漏洞利用脚本。 gdb + pwndbg/peda:用于调试题目二进制文件。 此外,部分题目可能需要一些额外的环境(例如 kernel pwn 需要 qemu),我们将在后续介绍到对应题目时单独进行介绍。
Jan 1, 0001
1 min read
Sonic 安装Mysql-Server sudo apt install mysql-server 确保 MySQL 配置文件中的 bind-address 设置正确。打开配置文件: bash 复制 sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf 确保 bind-address 为: bind-address = 0.0.0.0 如果之前是 127.0.0.1,则需要将其更改为 0.0.0.0,然后重启 MySQL 服务: sudo systemctl restart mysql 安装Docker 教程:https://docs.
Last updated on Apr 22, 2026
1 min read
搭建一个jupyter服务器 环境 一台服务器:本人使用的是Vultr的一台服务器,操作系统为CentOS 安装Conda和Python 安装Conda Conda不是必须安装的,但我在CentOS中直接安装Python并编译,卡了两个小时,使用Conda配置Python只花了两分钟就配好了,所以强烈推荐使用Conda。 CentOS yum -y install conda Ubuntu 下载Anaconda 官方的shell脚本 wget https://repo.anaconda.com/archive/Anaconda3-2022.05-Linux-x86_64.sh 执行脚本,一路enter或者yes bash Anaconda3-2022.05-Linux-x86_64.sh 修改bashrc文件 sudo vim ~/.bashrc 增加下面两句 export PATH="~/anaconda3/bin":$PATH source ~/anaconda3/bin/activate #修改终端的默认 python 为 anaconda 保存文件后关闭,然后在终端执行,用于保存环境配置
Jan 1, 0001
1 min read
栈溢出 技术清单: shellcode:修改返回地址,指向溢出数据中的一段指令 return2libc:修改返回地址,指向内存中已有的某个函数 ROP:修改返回地址,指向内存中已有的一段指令 hijack GOT:修改某个被调用函数的地址,指向另一个函数 Shellcode shellcode的存放位置可以是caller的栈帧(严格意义上不全是caller的栈帧,可以覆盖或超出),也可以是callee的栈帧,一般我们选择caller的栈帧,因为有时callee的栈帧太小了。 Payload构造 padding1 address of shellcode padding2 shellcode Q&A padding1里面数据是什么? padding1的数据可以任意填充,但最好不要包含’\x00’,可能会被检测为字符串末尾的’\0’最后造成截断。 padding1多长? 可以使用反汇编工具查看汇编代码来确定距离(静态) 可以使用调试工具(例如gdb)运行程序时不断增加输入长度的方法来试探(如果返回地址被无效地址例如“AAAA”覆盖,程序会终止并报错) shellcode的起始地址应该是多少? 我们可以在调试工具里查看返回地址的位置(可以查看 ebp 的内容然后再加4(32位机),参见前面关于函数状态的解释),**可是在调试工具里的这个地址和正常运行时并不一致,这是运行时环境变量等因素有所不同造成的。**https://www.mathyvanhoef.com/2012/11/common-pitfalls-when-writing-exploits.html所以这种情况下我们只能得到大致但不确切的 shellcode 起始地址,解决办法是在 padding2 里填充若干长度的 “\x90”。这个机器码对应的指令是 NOP (No Operation),也就是告诉 CPU 什么也不做,然后跳到下一条指令。有了这一段 NOP 的填充,只要返回地址能够命中这一段中的任意位置,都可以无副作用地跳转到 shellcode 的起始处,所以这种方法被称为 NOP Sled(中文含义是“滑雪橇”)。这样我们就可以通过增加 NOP 填充来配合试验 shellcode 起始地址。
Jan 1, 0001
3 min read
栈溢出学习(一) 此次实验参考https://sploitfun.wordpress.com/2015/05/08/classic-stack-based-buffer-overflow/ 经典栈溢出 这次实验是最简单的栈溢出实验,没有任何防护机制。 实验环境 Docker中的Ubuntu22.04,Dockerfile来自于CTF-WIKI中的环境配置。[1] 漏洞代码: //vuln.c #include <stdio.h> #include <string.h> int main(int argc, char* argv[]) { /* [1] */ char buf[256]; /* [2] */ strcpy(buf,argv[1]); /* [3] */ printf("Input:%s\n",buf); return 0; } 分析:当我们输出的字符串大于256字节,覆盖到main函数的返回地址,使其指向我们的shellcode,就可以完成攻击。
Jan 1, 0001
3 min read
栈溢出学习(三) 实验环境 Ubuntu12.04 ASLR Address space layout random(地址空间布局随机化),该技术随机了: 栈地址 堆地址 共享库地址 内存地址随机化机制有以下三种情况: 0 - 表示关闭进程地址空间随机化。 1 - 表示将mmap的基址,stack和vdso页面随机化。 2 - 表示在1的基础上增加栈(heap)的随机化。 一旦这些地址被随机化了,我们的return2libc和shellcode便不好使了,因为shellcode需要栈上的地址,return2libc需要知道libc的起始地址。需要注意的是,ASLR随机了libc库的起始地址,但是函数的偏移地址仍然是一个常数。我们将采用三种方法来绕过ALSR: Return-to-plt Brute force GOT overwrite and GOT dereference Return-to-plt 这个技术中我们不返回到libc函数,而是返回到一个函数的PLT中(该地址不会被随机化,因为这个地址在文件运行之前就已经知道),既然"function@PLT"不被随机化,供给制不用再预测libc基础地质,而是简单的返回到"function@PLT"就可以调用函数了。
Jan 1, 0001
1 min read
栈溢出学习(三)Chained Return2Libc 跟随教程https://sploitfun.wordpress.com/2015/ 此次实验参考https://sploitfun.wordpress.com/2015/05/08/bypassing-nx-bit-using-chained-return-to-libc/ “esp lifting"和frame faking参考:http://phrack.org/issues/58/4.html 实验环境 Ubuntu12.04
Jan 1, 0001
1 min read
栈溢出学习(二)Return2Libc 跟随教程https://sploitfun.wordpress.com/2015/ 此次实验参考https://sploitfun.wordpress.com/2015/05/08/bypassing-nx-bit-using-return-to-libc/ 又看到一个好的博客,也是栈溢出系列:https://www.ret2rop.com/2018/08/return-to-libc.html NX保护机制 NX保护机制原则为可写与可执行互斥,这就导致我们之前在栈上的shellcode不可以被执行,因此我们采用return2libc进行攻击 实验环境 Ubuntu12.04 漏洞代码: //vuln.c #include <stdio.h> #include <string.h> int main(int argc, char* argv[]) { char buf[256]; /* [1] */ strcpy(buf,argv[1]); /* [2] */ printf("%s\n",buf); /* [3] */ fflush(stdout); /* [4] */ return 0; } 较于之前的漏洞代码,增加了fflush函数的调用,主要是为了向我们提供sh字符串。
Jan 1, 0001
6 min read
«
»
Cite
×