上一篇文章是通过数组越界覆盖结构体中其他成员内存,达到修改该成员的值的目的,接下来将使用第二种方法获取 flag,就是使用数组越界覆盖函数的返回地址,达到控制函数执行流程的目的。 函数栈的变化 这一次...
二进制安全之栈溢出(三)
上一篇文章中控制了函数的返回地址,将地址修改为已有的指令地址,但是为了实现任意代码执行,是需要将返回地址修改为我们可以控制的 shellcode 的地址的。 shellcode 在 http://do...
二进制安全之栈溢出(四)
这一篇会总结一下前面一笔带过的几个问题,否则那仅仅是一个理想环境下的漏洞利用,在真实环境下很难遇到这么好用的。 canary canary 就是在栈溢出发生的高危区域的尾部插入一个值,当函数返回之时检...
二进制安全之栈溢出(五)
NX 不可执行是一项重要的漏洞利用缓解措施,为了绕过 NX 我们需要利用已有的可执行区域的代码片段来辅助完整漏洞利用。 这次还是需要禁用 ASLR,编译参数为 gcc -g -O0 -fno-stac...
二进制安全之栈溢出(六)
上一篇文章在执行 system 函数的时候是使用的 libc 中的 /bin/sh 字符串,如果我们想运行一个自定义的命令那就不一定能在内存中找到了,万幸的是 student 结构体的内存也是可以控制...
二进制安全之栈溢出(七)
本篇文章会使用一个稍复杂的 gadget,同时解决 gadget 含有换行符带来的问题。 mprotect 之前使用 vmmap 命令的时候会注意到有一列是内存地址的权限,rwx 和文件系统的一致,N...
二进制安全之栈溢出(八)
阅读本文前需要阅读 https://www.zhihu.com/question/21249496 和回答后面的四个链接。 plt && got 表 之前提到有些函数实现的代码是在 l...
二进制安全之栈溢出(九)
本篇的代码和之前的略有修改,diff 是这样的。 26c26 < write(1, "You Are Naive.\n", 15); --- > printf("You Are Naive...
</2017><2018>
2017 年恍恍惚惚的就过去了,回想了一下,这一年就做了几件微小的事情 尝试跑步 在林大操场和奥森,集中在五月到十月,一共 63 次,其他的时间中午有时候会和同事打球,虽然时间和距离都还很少,但是至少...
subprocess 参数绑定与命令注入
使用了 subprocess 传递数组形式的 args 过去就一定没有命令注入的问题么? 一般认为说这样的代码是存在命令注入问题的,比如 import os import subprocess hos...
二进制安全之栈溢出(十)
本篇没有新内容,只有一个新名词 off-by-one,利用方法还是之前的。 off-by-one漏洞 off-by-one漏洞是计数时由于边界条件判断失误导致结果多了一或少了一的错误,比如 在循环中进...
将数据从 MySQL 迁移到 MongoDB
什么是 MongoDBMongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库...
1097