PWN 学习—某平台ROP2 writeup
64位栈帧学习
writeup本能反应
RELRO:RELRO会有Partial RELRO和FULL RELRO,如果开启FULL RELRO,意味着我们无法修改got表Stack:如果栈中开启Canary found,那么就不能用直接用溢出的方法覆盖栈中返回地址,而且要通过改写指针与局部变量、leak canary、overwrite canary的方法来绕过NX:NX enabled如果这个保护开启就是意味着栈中数据没有执行权限,以前的经常用的call esp或者jmp esp的方法就不能使用,但是可以利用rop这种方法绕过PIE:PIE enabled如果程序开启这个地址随机化选项就意味着程序每次运行的时候地址都会变化,而如果没有开PIE的话那么No PIE (0x400000),括号内的数据就是程序的基地址
执行程序
发现输入一定的长度,程序就崩溃了
ida打开程序
查看要程序逻辑发现存在栈溢出漏洞输入长度大于 0xC (0x4 + 0x8) 面就是我们的天下了
查看函数表
发现函数joke
似乎用不到的函数
接下来查看字符串
我无敌的/bin/sh字符串
git学习小记
一、设置账户名和账户邮箱git config --global user.name "name"
git config --global user.email "[email protected]
git config --global http.proxy http://example.com:port
二、验证账户名和账户邮箱git config --global user.name
git config --global user.email
三、初始化仓库git init 会生成 .git 文件夹,关于这个仓库的配置
四、添加文件及文件夹git add name
添加所有文件
git add .
五、添加描述(必须添加)git commit -m "hello world"
六、查看状态git status
七、查看修改的文件git diff -- filename
八、撤销修改git checkout filename
九、撤销修改(针对git add提交之后的)git reset HEAD filename
gi
attackworld-web2
源码<?php
$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";
function encode($str){
$_o=strrev($str);
// echo $_o;
for($_0=0;$_0<strlen($_o);$_0++){
$_c=substr($_o,$_0,1);
$__=ord($_c)+1;
$_c=chr($__);
$_=$_.$_c;
}
return str_rot13(strrev(base64_encode($_)));
}
highlight_file(__FILE__);
/*
逆向加密算法,解密$miwen就是flag
*/
?>
分析
源码:反转字符-每位字符加一-base64-字符反转-rot13解码:rot13-字符反转-base64-每位字符减一
WDF-helloworld
Windows WDF驱动开发简单helloworld入门
helloworld.h/*
预处理:用来避免头文件被重复包含
还可以用#pragma once 防止头文件被重复包含,保证头文件只被编译一次,可移植性差
第一种:
#ifndef __SOMEFILE_H__
#define __SOMEFILE_H__
... ... // 声明、定义语句
#endif
第二种:
#pragma once
... ... // 声明、定义语句
*/
#ifndef __HELLOWORLD__ //预处理
#define __HELLOWORLD__ //预处理
// 包含驱动所需的头文件
#include <ntddk.h>
#include <wdf.h>
// 这是一个结构体的定义,用以描述驱动程序的设备拓展。它保存了我们自定义所需的一些信息,有助于更加方便的编程。
typedef struct _DEVICE_EXTENSION {
PDEVICE_OBJECT DeviceObject;
KLEE-符号执行框架
符号执行
通俗的解释就是,给定程序的输出,分析程序可以通过哪些路径达到给定的输出
KLEE安装(推荐使用Docker安装):docker pull klee/klee:2.0
持久性容器:当退出容器时,容器里面的内容不会初始化
docker run -ti --name=namestring --ulimit='stack=-1:-1' klee/klee
启动容器
docker start -ai namestring
简单使用
给出的是官方实例的代码
#include <klee/klee.h>
int get_sign(int x) {
if (x == 0)
return 0;
if (x < 0)
return -1;
else
return 1;
}
int main() {
int a;
klee_make_symbolic(&a, sizeof(a), "a");
return get_sign(a);
}
可以看到程序有三条路径
Windows驱动开发(1)
学习的内容是基于WDF框架的Windows驱动开发
基础知识
NT -> WDM -> WDF
每个框架都是由其上一个框架发展而来的,主要原因是因为其上一个框架不易理解难于开发
WDF简介
WDF全称Windows驱动框架(Windows Driver Frameworks)WDF两种级别的驱动程序
用户级(UMDF–(User-Mode Driver Framework))
是以 .dll 结尾的文件
内核级(KMDF–(Kernel-Mode Driver Framework))
是以 .sys 结尾的文件可与其硬件直接会话,通常会通过HAL(硬件抽象层)访问硬件所有的事物由对象表示,如Driver、Device等
每个对象都有属性、方法、事件(有面向对象编程基础的都应该知道)各种事件处理由事件回调函数处理必须包含 DriverEntry 函数,像C语言中的 main 函数
附上基本的DriverEntry例子`c
#include <ntddk.h>
#include <wdf.h>
NTSTATUS DriverE
qira安装与简单使用
简介
一个超时空调试器,记录了一个程序从开始到结束时候的过程,调试者可以反复查看每个寄存器或者内存里内容的变化,而不用因为不小心调试过头了而忧伤
Install
需要使用Linux,官方推荐Ubuntu,一开始装在kali上,各种报错,迫不得已,装了一个Ubuntu 16.04,直接成功,这里记录一下自己安装成功的过程
sudo apt-get update
sudo apt-get install python2.7 python-pip python-dev git libssl-dev libffi-dev build-essential
sudo pip install --upgrade pip
sudo pip install --upgrade pwntools
pip install --upgrade setuptools
sudo apt-get install gcc gdb
git clone https://github.com/longld/peda.git
mv peda ~/.peda
echo "source ~/.peda/peda.p
我和unicorn-engine的神奇之旅
神奇之处:
模拟CPU去执行程序或程序中的某个片段,某个函数,并且支持多个架构(Arm, Arm64 (Armv8), M68K, Mips, Sparc, & X86 (include X86_64)),也就是说,只需要用代码声明一下程序运行所需要的架构,所需要的栈空间,运行基址等,程序就可以模拟执行了
unicorn-engine 是不能调用syscall的,指令模拟的时候跳转的位置及相应的指令块没有被加载到模拟器中,那模拟时肯定是会有异常的
假设unicorn-engine是一个牢房,关押了来自不同地方的人(具有不同CPU架构的程序),牢房对他们的信息了如指掌,提审哪一个犯人都可以,并且可以对他们执行任何酷刑(对程序执行内存读写和栈读写等操作),但是对他们的同伴的信息却知之甚少(没加载到模拟器的指令块)。貌似这个比喻并不恰当,但是有助于我的个人理解。
安装方法:Linux上的安装方法:
pip install unicorn
其余平台可进入官网下载源文件编译安装
使用方法:可以参考看雪翻译的Unicorn引擎教程
相关资料
整理了几个比较好的资料,因为我学习的
Fuzz Test
基本知识:
Fuzz Testing(模糊测试)是一种很有效的测试方法,主要原理为构造一系列“坏”数据传入应用程序,通过判断程序是否发生异常发现和检测潜在的bug.而在安全领域引入fuzz技术,无疑可以使安全研究员效率倍增,更有效的挖掘和防护漏洞
工具:AFL-FUZZ简介:
是目前最高级的Fuzzing测试工具之一,由lcamtu开发
当需要测试的程序有源码时,AFL通过对源码重新编译时插桩(插入分析代码)的方法来探测程序内部的执行路径.相对于其他fuzzer,AFL-Fuzz具有更低的性能消耗,更有效的fuzzing策略和tricks最小化技巧,只需简单的配置即可处理复杂的程序
对于没有源码的可执行程序,AFL也可进行处理,但需要QEUM模拟器的支持,处理的速度也相对慢很多
安装:推荐环境:ubuntu16.04(省的折腾)
wget http://lcamtuf.coredump.cx/afl/releases/afl-latest.tgz
tar -xzvf afl-latest.tgz && cd afl-2.52b && mak