- 博客(130)
- 收藏
- 关注
原创 pwndbg快速计算栈溢出大小
1.启动pwndbg 生成长度为300的字符串2.把生成的字符串复制粘贴到 run之后的程序下查看错误提示“Invalidaddress0x62616164”3.根据错误地址,查看溢出大小
2024-12-08 23:02:10
287
原创 从ctfwiki开始的pwn之旅 6.ret2reg
ret2reg(返回到寄存器地址攻击)是一种利用技术,它通过控制寄存器的值来间接控制程序的执行流。在溢出函数返回时,攻击者会查找哪个寄存器的值指向溢出缓冲区空间,然后利用call reg或者jmp reg指令,将EIP设置为该指令地址,并在寄存器所指向的空间上注入Shellcode。此攻击方法之所以能成功,是因为函数内部实现时,溢出的缓冲区地址通常会加载到某个寄存器上,在后面的运行过程中不会修改。尽管栈空间具有随机性,但该寄存器的值与缓冲区地址的关系是确定的,在随机地址之上,建立了必然的地址关系。
2024-12-08 21:47:44
498
转载 从ctfwiki开始的pwn之旅 5.ret2csu
在 64 位程序中,函数的前 6 个参数是通过寄存器传递的,但是大多数时候,我们很难找到每一个寄存器对应的 gadgets。此外,由于 PC 本身只是将程序的执行地址处的数据传递给 CPU,而 CPU 则只是对传递来的数据进行解码,只要解码成功,就会进行执行。我们可以看到我们的 gadgets 是分为两部分的,那么我们其实可以进行两次调用来达到的目的,以便于减少一次 gadgets 所需要的字节数。可以看到在我们之前的利用中,我们利用这两个寄存器的值的主要是为了满足 cmp 的条件,并进行跳转。
2024-12-06 23:51:18
565
原创 从ctfwiki开始的pwn之旅 4.ret2libc
当一个函数被调用过后,got表里保存了他在内存中的地址,可以通过泄漏got表内存来泄漏函数地址,然后可以根据起泄漏的函数地址获得其libc版本,从而计算其他函数在内存空间中的地址。为什么不能直接跳到got表,通过前面的前置知识我们知道plt表中的地址对应的是指令,got表中的地址对应的是指令地址,而返回地址必须保存一段有效的汇编指令,所以必须要用plt表。可执行文件里保存的是plt表的地址,对应plt地址指向的是got的地址,got表指向的是glibc中的地址。经在 ida 中查找,确实也存在。
2024-12-05 19:50:50
1350
原创 从ctfwiki开始的pwn之旅 3.ret2syscall
此次,由于我们不能直接利用程序中的某一段代码或者自己填写代码来获得 shell,所以我们利用程序中的 gadgets 来获得 shell,而对应的 shell 获取则是利用系统调用。那么ret2syscall——程序中不存在system("/bin/sh/")的代码段,不存在合适的可执行段进行恶意代码的执行,但是程序是静态链接,且程序中中存在代码片段,拼接可组成系统调用。简单地说,只要我们把对应获取 shell 的系统调用的参数放到对应的寄存器中,那么我们在执行 int 0x80 就可执行对应的系统调用。
2024-12-05 18:18:42
866
原创 从ctfwiki开始的pwn之旅 2.ret2shellcode
这里我们以 bamboofox 中的 ret2shellcode 为例,需要注意的是,你应当在内核版本较老的环境中进行实验(如 Ubuntu 18.04 或更老版本)。shellcode 指的是用于完成某个功能的汇编代码,常见的功能主要是获取目标系统的 shell。但是,这并不会影响该文件在内存中的权限位,特别是在使用如GDB这样的调试器时通过。在栈溢出的基础上,要想执行 shellcode,需要对应的 binary 在运行时,shellcode 所在的区域具有可执行权限。命令不会改变这些内存段的权限。
2024-12-04 23:18:02
875
原创 从ctfwiki开始的pwn之旅 1.ret2text
我们控制执行程序已有的代码的时候也可以控制程序执行好几段不相邻的程序已有的代码 (也就是 gadgets),这就是我们所要说的 ROP。其实,在栈溢出的基本原理中,我们已经介绍了这一简单的攻击。在这里,我们再给出另外一个例子,bamboofox 中介绍 ROP 时使用的 ret2text 的例子。下面就是我们如何构造 payload 了,首先需要确定的是我们能够控制的内存的起始地址距离 main 函数的返回地址的字节数。这时,我们需要知道对应返回的代码的位置。控制的内存的起始地址:起始地址是变量。
2024-12-04 00:58:23
425
原创 8.STM32 TIM定时器
定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能根据复杂度和应用场景分为了高级定时器、通用定时器、基本定时器三种类型STM32F103C8T6定时器资源:TIM1、TIM2、TIM3、TIM4 计数器计数频率:CK_CNT = CK_PSC / (PSC + 1) 计数器溢出频率:CK
2024-11-26 19:02:32
369
原创 7.stm32中断系统8
EXTI(Extern Interrupt)外部中断EXTI可以监测指定GPIO口的电平信号,当其指定的GPIO口产生电平变化时,EXTI将立即向NVIC发出中断申请,经过NVIC裁决后即可中断CPU主程序,使CPU执行EXTI对应的中断程序支持的触发方式:上升沿/下降沿/双边沿/软件触发支持的GPIO口:所有GPIO口,但相同的Pin不能同时触发中断(比如PA0和PB0不能同时用)通道数:16个GPIO_Pin,外加PVD输出、RTC闹钟、USB唤醒、以太网唤醒。
2024-10-27 22:51:32
331
原创 6.stm32 OLED显示屏
OLED(Organic Light Emitting Diode):有机发光二极管OLED显示屏:性能优异的新型显示屏,具有功耗低、相应速度快、宽视角、轻薄柔韧等特点0.96寸OLED模块:小巧玲珑、占用接口少、简单易用,是电子设计中非常常见的显示屏模块供电:3~5.5V,通信协议:I2C/SPI,分辨率:128*64。
2024-10-26 20:06:59
510
原创 差分线绘制要求
差分线上尽量不超过两对过孔(过孔会增加线路的寄生电感,影响信号完整性)与其它信号网络以及地的距离尽量在 20mil 以上。长度差尽量小(控制在 5mil以内)注意阻抗匹配(90欧姆差分阻抗)平行紧密走线,避免直角锐角走线。
2024-10-25 20:56:59
388
原创 4.stm32 GPIO输入
传感器模块:传感器元件(光敏电阻/热敏电阻/红外接收管等)的电阻会随外界模拟量的变化而变化,通过与定值电阻分压即可得到模拟电压输出,再通过电压比较器进行二值化即可得到数字电压输出。
2024-10-12 20:31:53
524
原创 3.stm32 LED闪烁&LED流水灯&蜂鸣器
推挽输出(GPIO_Mode_Out_PP)高低电平均有驱动能力开漏输出(GPIO_Mode_Out_OD)高电平相当于高阻态,没有驱动能力,低电平有驱动能力2.LED流水灯3.蜂鸣器介绍几种使用库函数的方法1.先打开h文件的最后,看一下都有哪些函数,然后再右键转到定义,查看一下函数和参数的用法2.打开资料文件里的这个库函数用户手册(STM32F103xx固件函数库用户手册.pdf)
2024-10-12 15:18:34
507
原创 2.stm32 GPIO输出
GPIO(General Purpose Input Output)通用输入输出口可配置为8种输入输出模式引脚电平:0V~3.3V,部分引脚可容忍5V输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等。
2024-10-11 13:11:04
373
原创 1.stm32 新建工程
建立工程文件夹,Keil中新建工程,选择型号工程文件夹里建立Start、Library、User等文件夹,复制固件库里面的文件到工程文件夹工程里对应建立Start、Library、User等同名称的分组,然后将文件夹内的文件添加到工程分组里工程选项,C/C++,Include Paths内声明所有包含头文件的文件夹路径Start、Library、User。工程选项,C/C++,Define内定义USE_STDPERIPH_DRIVER。
2024-10-10 22:24:15
1094
原创 kismet和war driving具体准备(仅供无线安全学习)
一台笔记本一个最好是双频的网卡,单频搜集信号少我自己买的是http://e.tb.cn/h.grI4EmkDLOqQXHG?如果经济条件允许可以去买大功率天线(我买的车载的 大概40db这样子 范围广)一个可以实时接收处理数据的GPS设备(市面上很多都是gps数据过后在处理的,注意甄别)我自己买的是各位看官理性下单,我是觉得有点小贵了。
2024-09-23 21:47:42
584
原创 近源渗透简介
通过乔装、社工等方式实地物理侵入企业办公区域,通过其内部各种潜在攻击面(如Wi-Fi网络、RFID门禁、暴露的有线网口、USB接口等)获得“战果”,最后以隐秘的方式将评估结果带出上报,由此证明企业安全防护存在漏洞。
2024-07-15 11:22:04
956
原创 8.做pwn题的大致流程
如果发现ida里一个函数不知道用法就到linux里 man 函数 能打印函数用法。判断是32还是64位,用对应工具分析(比如ida,可以直接把文件拖到对应图标上)ida中如果没找到main函数就找start函数从而找到main函数起始地址。快捷键r转换字符串 h转换十进制十六进制。转换为十进制数,它就是数字 200。file
2024-07-07 21:48:13
489
原创 7.pwn 工具整体安装和使用
aslr:查看:cat /proc/sys/kernel/randomize_va_space 2表示打开关闭:echo 0>/proc/sys/kernel/randomize_va_space。
2024-07-07 21:47:19
1112
原创 6.pwn Linux保护机制
CANARYNXASLRPIERELRO回顾栈的作用为存储函数调用相关信息以及函数的局部变量这些局部变量通常为数组或者输入的缓冲区(buf)。而函数调用相关的信息,主要是返回地址和栈底指针(rbp)
2024-07-07 20:09:32
497
原创 5.pwn Linux的延迟绑定机制
我们程序开发过程中都会用到系统函数,比如read,write,open等等这些系统函数不需要我们实现,因为系统已经帮你完成这些工作,只需要调用即可,存放这些函数的库文件就是动态链接库。
2024-07-07 18:39:32
840
原创 4.pwn elf文件结构
等同于Windows的dll文件glibc是linux下面c标准库的实现,即GNUCLibrary。glibc本身是GNU旗下的C标准库,后来逐渐成为了Linux的标准c库,i而Linux下原来的标准c库Linux libc逐渐不再被维护。Linux下面的标准c库不仅有这一个,如uclibc、klibc,以及上面被提到的Linux libc,但是glibc无疑是用得最多的。glibc在/ib目录下的.so文件为libc.so.6.
2024-07-07 15:45:06
467
原创 3.pwn 函数调用流程,调用约定
pop:Pop指令的作用是弹栈,将栈顶的数据弹出到寄存器,然后栈顶指针向下移动一个单位。具体来说:如pop rax,作用就是mov rax[rsp];add rsp 8;push:Push指令的作用就是压栈,将栈顶指针向上移动一个单位的距离,然后将一个寄存器的值存放在栈顶,具体来说:如pushrax,其实际效果就是:sub rsp 8;jmp:立即跳转,不涉及函数调用,用于循环、ifelse这种场合具体来说:如jmp 1234h,效果就是:mov rip 1234h;
2024-07-06 18:26:10
1024
原创 1.pwn的汇编基础(提及第一个溢出:整数溢出)
RIP指针用于存储CPU下一条将会执行的指针,不能直接修改,正常情况下会每一次运行一条指令自增一条指令的长度,当发生跳转时才会以其他形式改变其值。深入底层后,计算机其实很笨,只能完成一些很基本的操作,但是速度很快机器码就是一个个01组成的,为了方便人类阅读,一般都以16进制呈现。高级语言经过编译之后,经过编译器处理,被打包成一个可执行文件的格式,RSP为栈顶指针,RBP为栈底指针,二者用于维护程序运行时的函数,在之后的调用约定一节会对其进行讲解。在当前主流的操作系统中,都是以字节(B)为寻址单位进行寻址,
2024-07-06 10:16:19
1729
4
原创 pwn刷题
https://www.jarvisoj.com/作者筛选过的质量不错的题目。https://adworld.xctf.org.cn/攻防世界。https://pwnable.tw 质量很好,但是有一定难度。https://pwnable.kr 适合新手入门pwn。https://buuoj.cn/北京联合大学CTF。
2024-07-05 20:18:28
290
转载 HTTP_DNS_ICMP代理隧道(仅供学习用途,禁止非法用途)
特色就是服务端会有一个命令行控制台,所有的指令都可以在该控制台内完成。的升级版,主要功能是把内网服务器端口的数据通过。-l , --listen-on 默认监听地址。远端服务器转发的目的地址,流量将转发到这个地址。指定哪个域名服务器可以解析该域名的子域名。本地的地址,发到这个端口的流量将转发到服务器。服务器的地址,流量将通过隧道转发到这个服务器。-u , --url 包含隧道脚本的url。模式转发过滤的数据文件,默认读取当前目录的。相比直连,速度较慢,但是更安全。,但是当前信道不适合做远控的通信信道,
2024-07-05 18:55:57
883
原创 Windows密码凭证获取
数据库,包括有关域用户,组和组成员身份的信息。文件,会提示文件被系统占用,所以常规的复制下载方法是无法获取到文件副本的,因此需要通过特殊方法来获取。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相。,一般翻译做散列,或音译为哈希,所谓哈希,就是使用一种加密函数进行计算后的结果。数据库用户密码跟其它数据库用户密码一样,在应用系统代码中都是以明文出现的,在获取文件。哈希是由用户输入的密码本地计算得出的,所以在这个步骤中,只要能提供正确的 NTLM。
2024-07-05 16:40:24
1951
原创 应用程序提权
在MySQL5.1以后的环境下只有将udf.dll文件导出到mysql安装目录\lib\plugin\目录下才能成功,但是很多时候mysql安装目录下并不存在lib目录,mysql文件操作也并不能直接创建目录,此时需要通过NTFS ADS流来创建目录。攻击者编写调用系统cmd命令(linux下相当于调用shell命令)的udf.dll文件,并将udf.dll导出到指定目录下,攻击者创建一个指向udf.dll的自定义函数func,每次在数据库查询中执行func函数等价于在cmd命令中执行命令。
2024-07-05 15:29:58
543
原创 域环境提权
一般来说,机器账号的名字应该以$符号结尾的。例如DC$表示DC这台主机的账户名。但是微软只是进行了规定,并没有验证程序对用户创建的用户名进行验证,也就是说,创建DC用户名完全是可以的。(这里指的是机器账号的sAMAccountName属性)
2024-07-05 11:42:56
599
原创 渗透测试框架提权
getsystem是由Metasploit-Framework提供的一个模块,它可以将一个管理帐户(通常为本地Administrator账户)提升为本地SYSTEM帐户。UAC:用户帐户控制(User Account Control),是windows操作系统中采用的一种控制机制,它以预见的。1)getsystem创建一个新的Windows服务,设置为SYSTEM运行,当它启动时连接到一个命名管道。2)getsystem产生一个进程,它创建一个命名管道并等待来自该服务的连接。优点:省去手动查找的麻烦。
2024-06-02 12:13:27
864
原创 Windows操作系统提权之系统服务漏洞提权Always Install Elevated
1.形成原因1.形成原因任意用户以NT AUTHORITY\SYSTEM权限安装 i。AlwaysInstallElevated是一个策略设置,当在系统中使用Windows Installer安装任何程序时,该参数允许非特权用户以system权限运行MSI文件。如果目标系统上启用了这一设置,我们可以使用msf生成msi文件来以system权限执行任意payload。MSI:Microsoft Silent Installer,是微软的安装包格式,它在后台运行.exe安装程序。
2024-06-01 21:09:36
826
原创 操作系统提权
Linux:CVE-2017-7308、CVE-2017-6074、CVE-2017-5123、CVE-2016-9793、CVE-2016-5195等。Windows:MS06-067、MS10-084、MS11-014、MS11-05、MS12-020、MS16-032等。提取进程、服务、用户帐号、用户组、网络接口、硬盘信息、网络共享信息、安装Windows补丁、程序在启动。本地提权:在一个低权限用户下,通过一些条件(应用程序漏洞、系统漏洞等)直接提升到系统最高权限。
2024-06-01 09:24:27
649
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人