pwn学习笔记(5)--格式化字符串漏洞(未完全完成)
pwn学习笔记(5)–格式化字符串漏洞 前言:由于条件有限,因此对于该漏洞的学习不算很多,
格式化字符串漏洞基础:格式化字符串介绍: 格式化字符串函数可以接收可变数量的参数,并将第一个参数作为格式化字符串,根据其来解析之后的参数,格式化字符串的利用一般分为三个部分:
格式化字符串函数
格式化字符串
[后续参数]
格式化字符串函数: 常见的格式化字符串有:
输入:
scanf()
输出:
函数
基本介绍
printf
输出到 stdout
fprintf
输出到指定 FILE 流
vprintf
根据参数列表格式化输出到 stdout
vfprintf
根据参数列表格式化输出到指定 FILE 流
sprintf
输出到字符串
snprintf
输出指定字节数到字符串
vsprintf
根据参数列表格式化输出到字符串
vsnprintf
根据参数列表格式化输出指定字节到字符串
setproctitle
设置 argv
syslog
输出日志
格式化字符串的格式:1%[parameter][flags][field ...
SQL无列名注入
SQL无列名注入 前段时间,队里某位大佬发了一个关于sql注入无列名的文章,感觉好像很有用,特地研究下。
关于 information_schema 数据库: 对于这一个库,我所知晓的内容并不多,并且之前总结SQL注入的时候忘记说这个数据库了,在这里补充一下,简单点儿来说,就是这个数据库中的某些表存放着数据库的一些信息,例如,我电脑中所有的数据库中存在如下的几个数据库:
12345678910111213mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || sakila || sys || test || world |+--------------------+7 rows in set (0.00 sec)
...
pwn学习笔记(4)ret2libc
pwn学习笔记(4)静态链接: 静态链接是由链接器在链接时将库的内容加入到可执行程序中的做法。链接器是一个独立程序,将一个或多个库或目标文件(先前由编译器或汇编器生成)链接到一块生成可执行程序。这里的库指的是静态链接库,Windows下以.lib为后缀,Linux下以.a为后缀。
也就是说将静态链接库中的所有的函数都写入这个ELF文件中,所以会造成该二进制文件极为庞大,因此也会存在很多的可供利用来ret2syscall的gadgets。但是,使用静态链接生成的可执行文件体积较大,包含相同的公共代码,造成浪费。
对于ret2syscall而言,我们能够在程序中找到众多的可以给我们利用的gadgets,主要是因为二进制程序是静态链接程序,正因为如此,存在众多的gadgets,给我们构造系统调用。
动态链接:1.简述: 动态链接(Dynamic Linking),把链接这个过程推迟到了运行时再进行,在可执行文件装载时或运行时,由操作系统的装载程序加载库。这里的库指的是动态链接库,Windows下以.dll为后缀,Linux下以.so为后缀。
动态链接可以大规模减小ELF文件的 ...
pwn学习笔记(3)ret2syscall
pwn学习笔记(3)ROP原理: ROP(Return Oriented Programming)返回导向编程,主要思想是通过在程序中已有的小片段(gadgets)来改变某些寄存器或者变量的值,从而控制程序的执行流程。
栈溢出–ret2syscall:1.系统调用: 对于一个已经存在于标准库中的函数,例如printf(),我们编写某个程序的时候,这个函数仅仅只用了printf(参数);这么一行,但是,其工作可是很复杂的,printf()调用了函数库当中的其他更加底层的函数,然后被调用的函数肯定会调用再底层的函数,知道调用到系统调用中的write()函数为止;由上可知,任何一个函数想要完成某样工作,都必须要经过系统调用来操作硬件才能够成功。
在Linux中,系统调用通常通过int 80h 这一汇编代码实现,int表示的是终端,interrupt,80h则是代指的系统调用的终端符号,当程序执行到int 80h这一代码的时候,就会将相应的通用寄存器eax中的参数作为系统调用的调用号,其他寄存器中的值或者地址所指向的值作为参数,例如:
1execve("/bin/sh&quo ...
Pwn学习笔记(2)--ret_2_text_or_shellcode
pwn学习笔记(2)1.三种常见的寄存器: ax寄存器:通用寄存器,可用于存放多种数据
bp寄存器:存放的是栈帧的栈底地址
sp寄存器:存放的是栈顶的地址
2.栈帧与栈工作的简介: 栈帧是存储函数的一些信息的地方,栈帧存储有函数的局部变量,传递给子函数的实际参数,父函数的地址以及上一个栈帧栈底的地址,大致情况如下:
在函数调用的过程中,首先会讲bp寄存器的值进行压栈,以方便在恢复的时候恢复栈底寄存器的值,再之后,会按顺序将局部变量压栈,最后是子函数的实际参数,会按照先入栈的后出栈,从最后一个实际参数先入栈再到第一个实际参数,比如函数a(int a , int b),压栈的方式就是先压栈b的实际参数,再压栈a的实际参数,当这些压栈完成之后,就可以压栈父函数调用子函数的那条语句的下一条语句的地址,紧接着,可以压栈当前栈帧的栈底地址了。
具体的汇编语言实现就不多做解释了,因为我这里只是简述。
3.缓冲区溢出漏洞: 缓冲区溢出楼哦对那个的本质就是向定长的缓冲区中写入了超长的数据,造成了写入的数据覆盖了其他合法的内存区域。
4.栈溢出之–ret2text:(1)原理: ...
Pwn学习笔记(1)--前置知识
pwn学习笔记(1)(1)pwn简介: 以下来自于百度百科:”Pwn”是一个黑客语法的俚语词,是指攻破设备或者系统发音类似“砰”,对黑客而言,这就是成功实施黑客攻击的声音——砰的一声,被“黑”的电脑或手机就被你操纵了 。
(2)几个简单的名词: exploit:用于攻击的脚本与方案
payload:攻击载荷,是对目标进程劫持控制流的数据
shellcode:调用攻击目标的shell代码,常见的有bash和sh
(3)C源代码到可执行文件: 如下图所示:
C源代码经过编译成为汇编代码,汇编代码再经过汇编成为机器码,即生成一个elf(二进制)目标文件,进行链接后成为elf可执行文件:
(4)可执行文件:1.Windows:PE
可执行程序 .exe
动态链接库 .dll
静态链接库 .lib
2.Linux:ELF
可执行程序 .out
动态链接库 .so
静态链接库 .a
(5)ELF文件信息:(1)段视图:在内存中程序加载到内存成为一个进程后,进行读写、执行权限划分的视图;节视图:是一个elf文件,存放在 ...
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
Quick StartCreate a new post1$ hexo new "My New Post"
More info: Writing
Run server1$ hexo server
More info: Server
Generate static files1$ hexo generate
More info: Generating
Deploy to remote sites1$ hexo deploy
More info: Deployment