VRL(Vulnerability Research Lab)的研究目的在于,在 Linux 平台下测试并验证已有漏洞,分析开启不同防御机制的情况下对攻击过程的影响,学习和熟悉漏洞利用原理与技巧,尝试研究出新的攻击或防御方法。
Ubuntu 16.04 LTS (64 bits)
漏洞程序主要使用 C 或 C++ 编写,对应脚本主要使用 Python 2.7 编写。
可能会用到的 Python 第三方库有:
环境配置参见环境配置向导
VRL平台大致分为五个部分。
- UI:用户交互,整合所有其他模块。所有的漏洞程序,攻击程序和设置、加工由VRL.py调用。
 - Vulnerabilities:漏洞程序库,包括漏洞程序,漏洞程序调用脚本,程序源码,说明文档等。
 - Exploits: Exploits库,包括利用程序,说明文档等。
 - Payloads: 供Exploits选用(如果支持)的Payload库。
 - Misc: 其他工具,加工paylaods等。
 
VRL平台可以分别载入Exploit,Vulnerability和Payload,并修改其设置。
命令行支持多种自动补全,在输入较长的命令/参数/脚本名称时可以尝试自动补全。
###主要功能
- 
状态显示:
 - 
列出可用Exploits,Vulnerability,Payload和Tools:
show exploits|vulnerabilities|payloads|tools- 所有参数你可以简写至前几个字母
 - 当VRL载入时,会自动扫描目录下符合格式的Exploit等脚本,如果你不希望重启VRL并加入新的模块,使用reload指令。
 
 - 
选择Exploit或Vulnerability:
useexp expname或use e expnameuse exp expnameusevul vulname或use v vulnameuse vul vulnameuse name将使用同一name尝试载入Exploit和Vulnerability。- Tip:当更换Exploit或Vulnerability时,VRL会将Exploit的默认设置同步到Vulnerability中。
 
 - 
设置Exploit和Vulnerability的选项:
show options显示所有选项(包括Exploit和Vulnerability)。set key value将改变key为value。这里value将作为字符串赋值,在脚本中注意这一属性。这里设计上认为Exploit和Vulnerability中相同名称的key应该保持相同值。在脚本中注意这一设计。- 不希望同时被更改option可以使用
setexp key value和setvul key value,(更建议在设计时使用不同的属性名称)。 
 - 
选择payload:
usepay payname或use p paynameuse pay payname选择payload,在这之前要确定你使用的Exploit支持更换Payload。- 这一命令将列出Exploit对于Payload的要求和当前Payload的信息供对比,询问是否使用。所以你并不需要单独的命令查看payload信息,如果不符合,就输入
n放弃。- 目前仅支持一个Exploit中只包含一个Payload块,多个Payload连用请使用工具连接,但分离的多个Payload并不支持。因为暂时没有遇到需要的情况。
 
 
 - 
运行Exploit或Vulnerability:
runexp或run erun exprunvul或run vrun vulrun将尝试先运行Vulnerability,再运行Exploit。
 
- 
调试程序
attach将自动查找正在运行的Vulnerability进程并用GDB调试。attach默认调试Vulnerability,你可以使用attach e|v|exp|vul来选择调试哪一个程序。- 查找到多个可能进程时,默认调试PID最大的,并输出警告。
 
 - 
调用工具
tool toolname将调用工具,例如连接payload等。
 - 
查询和改变ASLR状态
aslr frame_check或aslr status:查询当前ASLR状态aslr on,aslr off,aslr conservative:改变ASLR状态
 - 
停止Exploit或Vulnerability:
- 这一功能需要脚本中有stop()函数,用于在终止在后台运行的脚本。如果不需要,可以没有这一函数。
 stopexp或stop estop expstopvul或stop vstop vulstop将终止Exploit和Vulnerability。
 - 
显示Exploit和Vulnerability信息:
info系列指令与stop结构完全相同,显示脚本内info属性中记录的文字。- 显示payload信息参见选择payload。
 
 - 
重新编译Exploit和Vulnerability:
make系列指令与stop结构完全相同,将调用脚本内的make方法。如果不需要,可以没有这一函数。
 - 
其他
help将列出所用命令,help command或?command将给出帮助。q退出VRLgdb将调出GDB,这将不会像使用!gdb这样让当前终端陷入GDB。coloroncoloroff用于开关命令行颜色- 命令不区分大小写,但脚本名区分。
 - 强烈建议安装cmd2,如果你安装了cmd2包,将优先使用cmd2,这将带来如下便利:
- 可以方便地使用脚本,bash命令和python命令。
 - 异常将不会导致退出VRL。
 - 一些默认的函数,例如
exit,!command执行bash指令等。 
 
 
- 漏洞和攻击:(默认为64bit)
- 栈溢出
- 代码注入
 - Ret2lib
 - ROP
 - JOP
 - ROP开启执行后注入
 
 - 堆溢出
- 堆溢出导致的任意代码执行
 
 - 堆:Double free
- Double free导致的任意代码执行(64bit和32bit)
 
 - 堆:Use after free
- use after free导致的任意代码执行
 
 - 格式化字符串
- 格式化字符串漏洞导致的任意代码执行
 
 
 - 栈溢出
 - Payload
- 打开shell
 - 执行任意shell指令
 - 执行任意系统调用
 - Hello World
 - 输出
passwd文件 
 - 工具
- 连接/保存生成payload
 
 
添加新的Exploit,Vulnerability,Payload和工具,请参考扩展向导
已知bug请参考bugs
FAQ:FAQ
