Update
chore: add 计算机安全
This commit is contained in:
@@ -2,11 +2,11 @@
|
||||
|
||||
Author: `Liki4` from Vidar-Team
|
||||
|
||||
Vidar-Team 2023 招新 QQ 群: 861507440(仅向校内开放)
|
||||
Vidar-Team 2023 招新 QQ 群:861507440(仅向校内开放)
|
||||
|
||||
Vidar-Team 官网: [https://vidar.club/](https://vidar.club/)
|
||||
Vidar-Team 官网:[https://vidar.club/](https://vidar.club/)
|
||||
|
||||
Vidar-Team 招新报名表: [https://reg.vidar.club/](https://reg.vidar.club/)
|
||||
Vidar-Team 招新报名表:[https://reg.vidar.club/](https://reg.vidar.club/)
|
||||
|
||||
本文中所有涉及的代码全部都托管在 [https://github.com/Liki4/SQLi](https://github.com/Liki4/SQLi)
|
||||
|
||||
@@ -482,8 +482,6 @@ if __name__ == "__main__":
|
||||
|
||||

|
||||
|
||||
####
|
||||
|
||||
#### 时间盲注
|
||||
|
||||
时间盲注的场景和原理与布尔盲注类似,都是在没有回显查询结果的时候使用的
|
||||
@@ -782,9 +780,7 @@ INSERT 语句也被成功执行了,向数据库中插入了 Liki3 的数据
|
||||
|
||||
在 SQL 注入中,`infromation_schema` 库的作用无非就是可以获取到 `table_schema, table_name, column_name` 这些数据库内的信息。
|
||||
|
||||
####
|
||||
|
||||
##### MySQL 5.6 的新特性
|
||||
#### MySQL 5.6 的新特性
|
||||
|
||||
在 MySQL 5.5.x 之后的版本,MySQL 开始将 innoDB 引擎作为 MySQL 的默认引擎,因此从 MySQL 5.6.x 版本开始,MySQL 在数据库中添加了两张表,`innodb_index_stats` 和 `innodb_table_stats`,两张表都会存储数据库和对应的数据表。
|
||||
|
||||
@@ -797,7 +793,7 @@ select table_name from mysql.innodb_table_stats where database_name=<em>database
|
||||
|
||||

|
||||
|
||||
##### MySQL 5.7 的新特性
|
||||
#### MySQL 5.7 的新特性
|
||||
|
||||
由于 `performance_schema` 过于发杂,所以 MySQL 在 5.7 版本中新增了 `Sys schema` 视图,基础数据来自于 `performance_chema` 和 `information_schema` 两个库。
|
||||
|
||||
@@ -848,13 +844,13 @@ select table_name from sys.x$schema_table_statistics_with_buffer where table_sch
|
||||
|
||||
### Gorm SQL 注入
|
||||
|
||||
# 数据库注入工具 SQLMAP 及其高级使用指南
|
||||
## 数据库注入工具 SQLMAP 及其高级使用指南
|
||||
|
||||
> 这里不讨论诸如 -u 这种简单参数
|
||||
|
||||
## 一些特殊参数
|
||||
### 一些特殊参数
|
||||
|
||||
### -r [文件名]
|
||||
#### -r [文件名]
|
||||
|
||||
当你从 Burp 之类的工具中发现了 数据库注入的痕迹
|
||||
|
||||
@@ -866,7 +862,7 @@ select table_name from sys.x$schema_table_statistics_with_buffer where table_sch
|
||||
|
||||
对你传入的报文的目标进行自动化的 sql 注入
|
||||
|
||||
### --sql-shell
|
||||
#### --sql-shell
|
||||
|
||||
在摸索到 数据库注入的时候 生成一个交互式的数据库注入
|
||||
|
||||
@@ -878,7 +874,7 @@ Sqlmap 会自动探寻目标的注入返回结果 减少手动编写 payload 的
|
||||
|
||||
> 尤其是写了半天发现引号对不上等等
|
||||
|
||||
### --os-shell
|
||||
#### --os-shell
|
||||
|
||||
一个新手以为很牛逼但是其实很鸡肋的功能 可以获取 shell 一般是通过数据库注入获取到写文件的权限,写入 webshell 文件 的原理拿到对方机器的 shell
|
||||
|
||||
@@ -886,13 +882,13 @@ Sqlmap 会自动探寻目标的注入返回结果 减少手动编写 payload 的
|
||||
|
||||
因为 默认数据库配置不具有这种问题需要另外配置 此外环境需要支持类似动态执行的功能 例如 go 起的 web
|
||||
|
||||
### --random-agent
|
||||
#### --random-agent
|
||||
|
||||
一般不用 但是 sqlmap 在进行 web 的注入时会使用 sqlmap 的 User-Agent 痕迹非常明显
|
||||
|
||||
可以用这个消磨一下自己的痕迹
|
||||
|
||||
### --second-url
|
||||
#### --second-url
|
||||
|
||||
对于一些非常复杂的数据库二次注入 sqlmap 其实是没有办法的 例如需要鉴权(?)
|
||||
|
||||
@@ -900,7 +896,7 @@ Sqlmap 会自动探寻目标的注入返回结果 减少手动编写 payload 的
|
||||
|
||||
但是对于简单的一些二次注入,可以通过这个参数获取到存在数据库注入界面的结果界面。让 sqlmap 获取到 数据库注入的结果。
|
||||
|
||||
### --technique
|
||||
#### --technique
|
||||
|
||||
技巧 指定 sqlmap 使用的注入技术
|
||||
|
||||
@@ -925,13 +921,13 @@ Sqlmap 很可能在接下来的 数据库注入后利用中使用耗时更为巨
|
||||
|
||||
那么通过这个参数去指定对应的注入技巧 可以大大减少数据库注入获取结果的时间 优化你的进攻效率
|
||||
|
||||
### --dbms
|
||||
#### --dbms
|
||||
|
||||
指定对应的数据库类型
|
||||
|
||||
Mysql mssql 之类的 sqlmap 就不会去搜索爆破其他类型的数据库
|
||||
|
||||
### --hex
|
||||
#### --hex
|
||||
|
||||
以十六进制来进行注入的技巧
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
### Web 安全是什么
|
||||
|
||||
首先Web安全是CTF比赛一直以来都很重要的一部分,CTF比赛目前主体还是Jeopardy解题模式,主要分为Web安全,Re逆向工程,Pwn,Crypto密码学,Misc安全杂项五个方向。相比于Re和Pwn两个二进制方向,Web安全在初期入门时门槛较低,并不需要太多对底层知识的了解,对小白也较为友好,能够比较快速的上手做题。
|
||||
首先 Web 安全是 CTF 比赛一直以来都很重要的一部分,CTF 比赛目前主体还是 Jeopardy 解题模式,主要分为 Web 安全,Re 逆向工程,Pwn,Crypto 密码学,Misc 安全杂项五个方向。相比于 Re 和 Pwn 两个二进制方向,Web 安全在初期入门时门槛较低,并不需要太多对底层知识的了解,对小白也较为友好,能够比较快速的上手做题。
|
||||
|
||||
虽然 Web 安全入门门槛比较低,但是不得不承认需要学习的技术栈很多,在说起你经常听闻的 Java、Php、Go、Javascript 等种种语言之前,我们先来看看 Web 应用的发展史,理解一下 Web 应用是什么。
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
> 这段发展史可能有很多名字不太好懂,但是提到这一段发展史是希望你能够对 Web 技术的发展过程有个框架性的理解,如果有很多困惑的地方可以多多使用搜索引擎,这篇[文章](<https://onebyone.icu/archives/2788>)写的很详细也可以阅读一下~
|
||||
|
||||
最初的Web应用是静态页面,托管在ISP(Internet Service Provider)上,主要就是比较简单的文字,图片,当时能做的也就是简单浏览网页。而后有了Flash等多媒体技术,网页的功能开始逐渐丰富,音视频和网页的动态交互也让网页开始能够完成更多的事,给用户更好的体验。再随着CGI(Common Gateway Interface)的产生,CGI是Web服务器和外部应用程序的通信接口标准,Web服务器就可以通过CGI执行外部程序,再通过外部程序根据请求内容生成动态内容。再之后随着PHP/JSP等编程语言的加入,MVC思想、REST(Representation State Transformation)架构风格的产生,Web应用开发技术也逐步变化,直到如今,Web应用的开发技术主要分为前端和后端。**简单来说,前端就是用户直接可以看见的部分,比如说我们访问百度,百度页面上面的搜索框、按钮、logo,搜索后展示的网页文字和内容,这些都是属于前端的范畴;而后端主要是用户看不见的部分,比如在百度上搜索Vidar-Team,会能根据搜索内容返回相关的文章,这就是后端所做的部分**。
|
||||
最初的 Web 应用是静态页面,托管在 ISP(Internet Service Provider) 上,主要就是比较简单的文字,图片,当时能做的也就是简单浏览网页。而后有了 Flash 等多媒体技术,网页的功能开始逐渐丰富,音视频和网页的动态交互也让网页开始能够完成更多的事,给用户更好的体验。再随着 CGI(Common Gateway Interface) 的产生,CGI 是 Web 服务器和外部应用程序的通信接口标准,Web 服务器就可以通过 CGI 执行外部程序,再通过外部程序根据请求内容生成动态内容。再之后随着 PHP/JSP 等编程语言的加入,MVC 思想、REST(Representation State Transformation) 架构风格的产生,Web 应用开发技术也逐步变化,直到如今,Web 应用的开发技术主要分为前端和后端。**简单来说,前端就是用户直接可以看见的部分,比如说我们访问百度,百度页面上面的搜索框、按钮、logo,搜索后展示的网页文字和内容,这些都是属于前端的范畴;而后端主要是用户看不见的部分,比如在百度上搜索 Vidar-Team,会能根据搜索内容返回相关的文章,这就是后端所做的部分**。
|
||||
|
||||
### Web 应用的数据是如何交互的
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||

|
||||
|
||||
当我们在浏览器的地址栏中输入`https://vidar.club`后,首先会做的事情是DNS查询,浏览器会去寻找页面资源的位置,也就是寻找这个域名对应的ip地址是多少。因为ip地址的格式为xxx.xxx.xxx.xxx,这对于一个用户并不容易记住,因此我们用形象的域名来让用户记住网址,你看,`vidar.club`就比`1.117.117.147`这个ip好记太多了吧。浏览器根据域名`vidar.club`向DNS服务器查询对应ip地址,得到响应对应ip地址为`1.117.117.147`。
|
||||
当我们在浏览器的地址栏中输入`https://vidar.club`后,首先会做的事情是 DNS 查询,浏览器会去寻找页面资源的位置,也就是寻找这个域名对应的 ip 地址是多少。因为 ip 地址的格式为 xxx.xxx.xxx.xxx,这对于一个用户并不容易记住,因此我们用形象的域名来让用户记住网址,你看,`vidar.club`就比`1.117.117.147`这个 ip 好记太多了吧。浏览器根据域名`vidar.club`向 DNS 服务器查询对应 ip 地址,得到响应对应 ip 地址为`1.117.117.147`。
|
||||
|
||||
而当浏览器知道了服务器的 IP 地址后,就会与服务器进行 TCP 三次握手,三次握手机制是用来让两端尝试进行通信,之后为了让链接更加安全,就会进行 TLS 协商。你看我们输入的是`https://`,这表明我们使用了 https 协议进行访问,http 协议的数据传输是明文的,这并不安全,而 https 使用 ssl/tls 协议进行加密处理,这会让访问变得安全。顺带一提如果使用 http 访问协会官网也会强制使用 https 哦,可以试一试`http://vidar.club`。当三次握手和 TLS 协商完成后,我们就已经和服务器建立了安全连接啦。
|
||||
|
||||
@@ -51,7 +51,7 @@ HTTP请求和响应的具体内容可以使用浏览器(推荐使用Chrome、F
|
||||
|
||||
### Web 技术栈
|
||||
|
||||
首先需要明确的是,Web安全和Web开发是分不开的,并不是说对安全感兴趣就不需要懂开发,恰恰相反,开发是安全的基础,如果没有开发能力,在之后学习中面对一些代码审计也会感觉到非常茫然,所以学习Web安全之前首要的就是先学习Web开发。而Web开发的学习路线在学长们身上大多不是很固定,有的人接触到的Web开发的第一门语言是PHP,PHP虽然在现在看来已经不是一门优秀的语言了,后端开发的主流技术栈已经是Java和Go了,但是PHP仍然是一门在安全学习上非常推荐的语言,有很多历史漏洞可以让大家更好的入门。也有的学长最先开始接触的是Go/Java/Js,那如果你已经有一定Web开发基础,可以直接参考下面的学习路线与学习资料,如果你还没有Web开发基础并且认为C语言已经学的不错了,就可以尝试选择一门自己感兴趣的语言进行学习,并且尝试自己写一些感兴趣的Web应用,比如搭建一个博客,写一个Todolist用来记事等等,兴趣是最好的导师,一边写自己感兴趣的Web应用一边学习是非常不错的。
|
||||
首先需要明确的是,Web 安全和 Web 开发是分不开的,并不是说对安全感兴趣就不需要懂开发,恰恰相反,开发是安全的基础,如果没有开发能力,在之后学习中面对一些代码审计也会感觉到非常茫然,所以学习 Web 安全之前首要的就是先学习 Web 开发。而 Web 开发的学习路线在学长们身上大多不是很固定,有的人接触到的 Web 开发的第一门语言是 PHP,PHP 虽然在现在看来已经不是一门优秀的语言了,后端开发的主流技术栈已经是 Java 和 Go 了,但是 PHP 仍然是一门在安全学习上非常推荐的语言,有很多历史漏洞可以让大家更好的入门。也有的学长最先开始接触的是 Go/Java/Js,那如果你已经有一定 Web 开发基础,可以直接参考下面的学习路线与学习资料,如果你还没有 Web 开发基础并且认为 C 语言已经学的不错了,就可以尝试选择一门自己感兴趣的语言进行学习,并且尝试自己写一些感兴趣的 Web 应用,比如搭建一个博客,写一个 Todolist 用来记事等等,兴趣是最好的导师,一边写自己感兴趣的 Web 应用一边学习是非常不错的。
|
||||
|
||||
## 0x03 学习资料与学习路线推荐
|
||||
|
||||
@@ -74,6 +74,7 @@ HTTP请求和响应的具体内容可以使用浏览器(推荐使用Chrome、F
|
||||
- HTTP:《图解 HTTP》
|
||||
- 《从 0 到 1:CTFer 成长之路》
|
||||
- 《白帽子讲 Web 安全》
|
||||
|
||||
上面提到的书协会都有哦,欢迎有空的时候来协会看书自习!
|
||||
- 学习路线
|
||||
可以根据上面提到的学习资料和协会的 2022 提前批招新标准进行个人学习路线的规划,这份 Github 上很火的[Web Roadmap](https://github.com/hideraldus13/roadmap-do-desenvolvedor-web)也可以参考一下。
|
||||
|
||||
@@ -4,13 +4,13 @@ IDA pro (交互式反编译器专业版)是二进制安全研究人员必备
|
||||
|
||||
IDA pro 是收费软件,价格极其昂贵,一套完全版人民币 10W 左右,因此可以到各大网站下载破解版,注意到一些知名网站下载,比如吾爱破解等,防止下载的软件包含病毒。在编写此文时,IDA pro 更新到了 8.3,网上能找到的最新的版本为 7.7。本文由于版权原因,不提供下载链接。
|
||||
|
||||
# 简易使用方法
|
||||
## 简易使用方法
|
||||
|
||||
> 本文档仅作快速入门,更加细节的内容还请读者查阅其他资料以及多加实践。
|
||||
>
|
||||
> 另外在任何使用上操作的问题,都可以在群里提问!
|
||||
|
||||
## 0x00 IDA 简单介绍
|
||||
### 0x00 IDA 简单介绍
|
||||
|
||||

|
||||
|
||||
@@ -18,11 +18,11 @@ IDA是一款交互式反汇编和反编译工具,其支持文件类型和文
|
||||
|
||||
可静态分析也可动态调试,可以说是二进制手的吃饭工具了
|
||||
|
||||
## 0x01 启动界面
|
||||
### 0x01 启动界面
|
||||
|
||||

|
||||
|
||||
```
|
||||
```txt
|
||||
NEW:打开 IDA 同时弹出对话框选择要打开的文件
|
||||
Go:单独打开 ida,打开界面将文件拖入
|
||||
Previous,或者下面的列表项:快速打开之前的的文件
|
||||
@@ -36,20 +36,24 @@ Previous,或者下面的列表项:快速打开之前的的文件
|
||||
|
||||
这里按我们的默认选项点击 OK 即可
|
||||
|
||||
## 0x02 关闭界面
|
||||
### 0x02 关闭界面
|
||||
|
||||

|
||||
|
||||
```
|
||||
:::tip
|
||||
第一个选项:就是不打包数据包文件,那么这些数据库文件就会分开这放。
|
||||
|
||||
第二个选项及图中选项:就是把这几个数据库文件打包为 1 个 (如.i64 文件),下次打开我们分析的文件的时候,打开这个文件即可。
|
||||
|
||||
第三个选项:不会删掉数据库文件,而是打包压缩到存储的文件里面去了。
|
||||
|
||||
下面两个选项
|
||||
第一个选项:回收垃圾,如果打包文件太大了,可以选用这个选项,清理不必要的内存
|
||||
最后一个选项:当分析时候写错了,选中最后一个,最后一次打开的操作不保留了。(解决错误操作)
|
||||
```
|
||||
|
||||
## 0x03 主界面- IDA View&Pseudocode
|
||||
最后一个选项:当分析时候写错了,选中最后一个,最后一次打开的操作不保留了。(解决错误操作)
|
||||
:::
|
||||
|
||||
### 0x03 主界面 - IDA View&Pseudocode
|
||||
|
||||
反汇编代码的图表窗口
|
||||
|
||||
@@ -67,25 +71,25 @@ Previous,或者下面的列表项:快速打开之前的的文件
|
||||
|
||||
直接点击函数名可以进入到对应函数内部查看函数逻辑
|
||||
|
||||
## 0x04 主界面- Hex View
|
||||
### 0x04 主界面 - Hex View
|
||||
|
||||
十六进制窗口 (不太常用)
|
||||
|
||||

|
||||
|
||||
## 0x05 主界面-Structures
|
||||
### 0x05 主界面-Structures
|
||||
|
||||
结构体窗口
|
||||
|
||||

|
||||
|
||||
## 0x06 主界面-Enums
|
||||
### 0x06 主界面-Enums
|
||||
|
||||
枚举类型界面
|
||||
|
||||

|
||||
|
||||
## 0x07 主界面-Imports
|
||||
### 0x07 主界面-Imports
|
||||
|
||||
导入表
|
||||
|
||||
@@ -93,13 +97,13 @@ Previous,或者下面的列表项:快速打开之前的的文件
|
||||
|
||||

|
||||
|
||||
## 0x08 主界面-Exports
|
||||
### 0x08 主界面-Exports
|
||||
|
||||
导出表
|
||||
|
||||

|
||||
|
||||
## 0x09 主界面-Strings
|
||||
### 0x09 主界面-Strings
|
||||
|
||||
按`Shift+F12`转到`String`界面,该操作会搜索程序中的字符串数据并展示
|
||||
|
||||
@@ -109,7 +113,7 @@ Previous,或者下面的列表项:快速打开之前的的文件
|
||||
|
||||

|
||||
|
||||
## 0x0a 其他界面-Functions
|
||||
### 0x0a 其他界面-Functions
|
||||
|
||||
罗列了程序中用到的所有函数,包括底层调用的库的函数
|
||||
|
||||
@@ -117,7 +121,7 @@ Previous,或者下面的列表项:快速打开之前的的文件
|
||||
|
||||

|
||||
|
||||
## 0x0b 其他界面-Output
|
||||
### 0x0b 其他界面-Output
|
||||
|
||||
程序的输出信息都会展示在这里
|
||||
|
||||
@@ -127,15 +131,13 @@ Previous,或者下面的列表项:快速打开之前的的文件
|
||||
|
||||

|
||||
|
||||
## 0x0c 其他界面-导航栏
|
||||
### 0x0c 其他界面 - 导航栏
|
||||
|
||||
一个二进制文件包括不同的区块,这里显示程序的不同类型数据,不同的颜色代表二进制文件中不同的块
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
## 0x0d 常用快捷键
|
||||
### 0x0d 常用快捷键
|
||||
|
||||
> 边用边记,多打打就会记住了!
|
||||
>
|
||||
@@ -156,7 +158,7 @@ Previous,或者下面的列表项:快速打开之前的的文件
|
||||
- `Y` 修改变量/函数类型
|
||||
- `F2`快速下断点
|
||||
|
||||
## 0x0e 常用插件
|
||||
### 0x0e 常用插件
|
||||
|
||||
> 具体安装和使用不在此展开了
|
||||
|
||||
@@ -186,7 +188,7 @@ IDA 提供可与其交互的IDA Python接口,可以使用Python做很多的辅
|
||||
|
||||

|
||||
|
||||
之后就可以用F7(单步不跳过执行)/F8(单步跳过执行)/F9(继续执行,遇到断点停止)进行调试
|
||||
之后就可以用 F7(单步不跳过执行)/F8(单步跳过执行)/F9(继续执行,遇到断点停止) 进行调试
|
||||
|
||||

|
||||
|
||||
@@ -198,7 +200,7 @@ IDA 提供可与其交互的IDA Python接口,可以使用Python做很多的辅
|
||||
|
||||
由于 Linux 下文件调试比较特殊,需要远程起一个服务器运行服务端,这里可以使用**Vmware**或者**WSL2(Windows subsystem Linux)**进行调试
|
||||
|
||||
因篇幅有限,在这里直接贴篇链接供大家学习并选择调试方式
|
||||
因篇幅有限,在这里直接贴篇链接供大家学习并选择调试方式
|
||||
|
||||
- Vmware 调试 [IDA 动态调试 ELF](https://bbs.kanxue.com/thread-247830.htm)
|
||||
- WSL 调试(安装好 WSL 直接运行 ida dbgsrv 目录下 linux_server 文件即可以)
|
||||
@@ -207,7 +209,7 @@ IDA 提供可与其交互的IDA Python接口,可以使用Python做很多的辅
|
||||
|
||||
## 0x12 一个简单程序的分析
|
||||
|
||||
#### 源代码
|
||||
### 源代码
|
||||
|
||||
```c
|
||||
#include <stdio.h>
|
||||
@@ -299,4 +301,3 @@ F7进入函数进行单步不跳过调试
|
||||
##### 脚本编写
|
||||
|
||||
试试写一个脚本解出这道题吧!
|
||||
|
||||
|
||||
@@ -26,28 +26,28 @@ upx -d 文件名
|
||||
|
||||
### ESP 定律脱壳法(本节来源于 ctf-wiki:[https://ctf-wiki.org/reverse/windows/unpack/esp/](https://ctf-wiki.org/reverse/windows/unpack/esp/))
|
||||
|
||||
ESP 定律法是脱壳的利器, 是应用频率最高的脱壳方法之一.
|
||||
ESP 定律法是脱壳的利器,是应用频率最高的脱壳方法之一。
|
||||
|
||||
#### 要点
|
||||
|
||||
ESP 定律的原理在于利用程序中堆栈平衡来快速找到 OEP.
|
||||
|
||||
由于在程序自解密或者自解压过程中, 不少壳会先将当前寄存器状态压栈, 如使用 `pushad`, 在解压结束后, 会将之前的寄存器值出栈, 如使用 `popad`. 因此在寄存器出栈时, 往往程序代码被恢复, 此时硬件断点触发. 然后在程序当前位置, 只需要少许单步操作, 就很容易到达正确的 OEP 位置.
|
||||
由于在程序自解密或者自解压过程中,不少壳会先将当前寄存器状态压栈,如使用 `pushad`, 在解压结束后,会将之前的寄存器值出栈,如使用 `popad`. 因此在寄存器出栈时,往往程序代码被恢复,此时硬件断点触发。然后在程序当前位置,只需要少许单步操作,就很容易到达正确的 OEP 位置。
|
||||
|
||||
1. 程序刚载入开始 pushad/pushfd
|
||||
2. 将全部寄存器压栈后就设对 ESP 寄存器设硬件断点
|
||||
3. 运行程序, 触发断点
|
||||
3. 运行程序,触发断点
|
||||
4. 删除硬件断点开始分析
|
||||
|
||||
#### 示例
|
||||
|
||||
示例程序可以点击此处下载: [2_esp.zip](https://github.com/ctf-wiki/ctf-challenges/blob/master/reverse/unpack/2_esp.zip)
|
||||
示例程序可以点击此处下载:[2_esp.zip](https://github.com/ctf-wiki/ctf-challenges/blob/master/reverse/unpack/2_esp.zip)
|
||||
|
||||
还是上一篇的示例, 入口一句 `pushad`, 我们按下 F8 执行 `pushad` 保存寄存器状态, 我们可以在右边的寄存器窗口里发现 `ESP` 寄存器的值变为了红色, 也即值发生了改变.
|
||||
还是上一篇的示例,入口一句 `pushad`, 我们按下 F8 执行 `pushad` 保存寄存器状态,我们可以在右边的寄存器窗口里发现 `ESP` 寄存器的值变为了红色,也即值发生了改变。
|
||||
|
||||

|
||||
|
||||
我们鼠标右击 `ESP` 寄存器的值, 也就是图中的 `0019FF64`, 选择 `HW break[ESP]` 后, 按下 `F9` 运行程序, 程序会在触发断点时断下. 如图来到了 `0040D3B0` 的位置. 这里就是上一篇我们单步跟踪时到达的位置, 剩余的就不再赘述.
|
||||
我们鼠标右击 `ESP` 寄存器的值,也就是图中的 `0019FF64`, 选择 `HW break[ESP]` 后,按下 `F9` 运行程序,程序会在触发断点时断下。如图来到了 `0040D3B0` 的位置。这里就是上一篇我们单步跟踪时到达的位置,剩余的就不再赘述。
|
||||
|
||||
## 软件加密常用算法
|
||||
|
||||
|
||||
@@ -1,14 +1,21 @@
|
||||
# 漏洞挖掘、漏洞利用
|
||||
|
||||
## 常见二进制安全漏洞
|
||||
|
||||
### 栈溢出
|
||||
|
||||
#### 栈介绍
|
||||
|
||||
栈是一种典型的后进先出 (Last in First Out) 的数据结构,其操作主要有压栈 (push) 与出栈 (pop) 两种操作,如下图所示(维基百科)。两种操作都操作栈顶,当然,它也有栈底。
|
||||
|
||||

|
||||
|
||||
高级语言在运行时都会被转换为汇编程序,在汇编程序运行过程中,充分利用了栈这一数据结构。每个程序在运行时都有虚拟地址空间,其中某一部分就是该程序对应的栈,用于保存函数调用信息和局部变量。此外,常见的操作也是压栈与出栈。需要注意的是,**程序的栈是从进程地址空间的高地址向低地址增长的**。
|
||||
|
||||
#### 栈溢出基本原理
|
||||
|
||||
以最基本的 C 语言为例,C 语言的函数局部变量就保存在栈中。
|
||||
|
||||
```C
|
||||
#include<stdio.h>
|
||||
int main()
|
||||
@@ -42,7 +49,9 @@ int main()
|
||||
这就是栈溢出的基本原理。
|
||||
|
||||
#### 栈溢出的基本利用
|
||||
|
||||
##### 0x0
|
||||
|
||||
对于以上程序,“栈溢出”带来的后果仅仅是修改了局部变量的值,会造成一些程序的逻辑错误:
|
||||
|
||||
```C
|
||||
@@ -86,6 +95,7 @@ int main()
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
|
||||
```asm
|
||||
add:
|
||||
endbr64
|
||||
@@ -135,7 +145,7 @@ retn
|
||||
|
||||
> 注意该图中,使用 32 位的寄存器(EBP、ESP、EIP),实际原理一样的,并且上方为高地址,下方为低地址
|
||||
|
||||
在此给出一道题作为例子:https://github.com/ctf-wiki/ctf-challenges/raw/master/pwn/stackoverflow/ret2text/bamboofox-ret2text/ret2text
|
||||
在此给出一道题作为例子:[ret2tetx](https://github.com/ctf-wiki/ctf-challenges/raw/master/pwn/stackoverflow/ret2text/bamboofox-ret2text/ret2text)
|
||||
|
||||
32 位的程序,我们使用 IDA 来打开该题目,查看反编译代码,可以发现有非常明显的栈溢出:
|
||||
|
||||
@@ -168,11 +178,13 @@ sh.interactive() # 切换为手动交互模式
|
||||

|
||||
|
||||
##### 0x1
|
||||
|
||||
通过上面的学习,我们已经可以知道执行任意函数的办法,但很多情况下,对于攻击者来说,程序中并没有可用的后门函数来达到攻击的目的,因此我们需要一种手段,来让程序执行任意代码(任意汇编代码),这样就可以最高效地进行攻击。ROP(Return Oriented Programming)面向返回编程就是这样的一种技术,在栈溢出的基础上,通过在程序中寻找以 retn 结尾的小片段(gadgets),来改变某些寄存器、栈变量等的值,再结合 Linux 下的系统调用,我们就可以执行需要的任意代码。
|
||||
|
||||
ROP网上已有非常系统的资料,在这里不做过多的叙述,可参考ctf-wiki: https://ctf-wiki.org/pwn/linux/user-mode/stackoverflow/x86/basic-rop/#ret2shellcode
|
||||
ROP 网上已有非常系统的资料,在这里不做过多的叙述,可参考 ctf-wiki: [ret2shellcode](https://ctf-wiki.org/pwn/linux/user-mode/stackoverflow/x86/basic-rop/#ret2shellcode)
|
||||
|
||||
### 格式化字符串
|
||||
|
||||
格式化字符串的利用思路来源于`printf`函数中的`%n`format 标签,该标签的作用和`%s`、`%d`等不同,是将已打印的字符串的长度返回到该标签对应的变量中。在正常情况下的使用不会出现什么问题:
|
||||
|
||||
```C
|
||||
@@ -195,10 +207,13 @@ printf(ch);
|
||||
```
|
||||
|
||||
## 漏洞挖掘技术
|
||||
### 代码审计
|
||||
代码审计分人工代码审计和自动化代码审计,人工审计由安全研究人员查看代码来发现漏洞,需要安全研究人员很高的研究经验,投入大量的人力。自动化代码审计目前的发展进度迅速,如由 Vidar-Team 毕业学长 LoRexxar 主导的开源项目Kunlun-M:https://github.com/LoRexxar/Kunlun-M
|
||||
|
||||
以及字节跳动公司开源的appshark:https://github.com/bytedance/appshark
|
||||
### 代码审计
|
||||
|
||||
代码审计分人工代码审计和自动化代码审计,人工审计由安全研究人员查看代码来发现漏洞,需要安全研究人员很高的研究经验,投入大量的人力。自动化代码审计目前的发展进度迅速,如由 Vidar-Team 毕业学长 LoRexxar 主导的开源项目 [Kunlun-M](https://github.com/LoRexxar/Kunlun-M)
|
||||
|
||||
以及字节跳动公司开源的 [appshark](https://github.com/bytedance/appshark)
|
||||
|
||||
### fuzz
|
||||
|
||||
fuzz 是一种自动化测试手段,通过一定的算法生成一定规律的随机的数据输入到程序中,如果程序发生崩溃等异常,即可知道此处可能有漏洞。比较著名的有[AFL](https://github.com/google/AFL)、[AFLplusplus](https://github.com/AFLplusplus/AFLplusplus)、[libfuzzer](https://llvm.org/docs/LibFuzzer.html)、[honggfuzz](https://github.com/google/honggfuzz)等。
|
||||
|
||||
@@ -11,8 +11,11 @@ reverse 主要研究软件破解,软件加固,计算机病毒等。
|
||||
现实场景下,这两种方向通常界限比较模糊,统称的二进制安全主要研究漏洞挖掘,漏洞利用,软件加固,计算机病毒,游戏安全等。
|
||||
|
||||
## 入门材料
|
||||
|
||||
> HGAME Mini 2022 Reverse Pwn 入门材料
|
||||
> Reverse:https://www.notion.so/b92ca2bfaacf4e7c873882dff9dbf649
|
||||
>
|
||||
> Reverse:[逆向入门指南](https://www.notion.so/b92ca2bfaacf4e7c873882dff9dbf649)
|
||||
>
|
||||
> Pwn:[PWN 入门指北](https://ek1ng.oss-cn-hangzhou.aliyuncs.com/HGAME%20Mini%202022%20Pwn%E5%85%A5%E9%97%A8%E6%8C%87%E5%8C%97.pdf)
|
||||
|
||||
## 学习二进制安全需要具备哪些基础?
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## 什么是密码学
|
||||
# 什么是密码学
|
||||
|
||||
> 本文来自 HGAME Mini 2022 Crypto 入门材料。
|
||||
|
||||
|
||||
@@ -102,7 +102,6 @@ Misc 是 Miscellaneous 的缩写,杂项、混合体、大杂烩的意思,它
|
||||
- Vmdk
|
||||
- dsfok-tools
|
||||
|
||||
|
||||
### 取证
|
||||
|
||||
- 图片取证
|
||||
@@ -139,8 +138,4 @@ Misc 是 Miscellaneous 的缩写,杂项、混合体、大杂烩的意思,它
|
||||
- binwalk
|
||||
- sleuthkit
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
`VIDAR{Misc_1s_e4sy_t0_st4rt!!}`
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
# 学习资料推荐
|
||||
|
||||
> 计算机基础是非常重要的,协会一直推荐打好基础,勿在浮沙筑高台。
|
||||
>
|
||||
@@ -27,20 +28,20 @@
|
||||
|
||||
> 主题比较宽泛,大多是计算机技术相关
|
||||
|
||||
- https://www.leavesongs.com/
|
||||
- https://github.red/
|
||||
- https://lorexxar.cn/
|
||||
- https://su18.org/
|
||||
- <https://www.leavesongs.com/>
|
||||
- <https://github.red/>
|
||||
- <https://lorexxar.cn/>
|
||||
- <https://su18.org/>
|
||||
|
||||
安全类博客:
|
||||
|
||||
> 主要是一些安全研究成果或者 CTF 竞赛题解,主要都是安全相关内容
|
||||
|
||||
- https://4ra1n.github.io/
|
||||
- https://y4tacker.github.io/
|
||||
- https://y4er.com/
|
||||
- https://cjovi.icu/
|
||||
- https://crazymanarmy.github.io/
|
||||
- https://www.gem-love.com
|
||||
- https://blog.huli.tw/
|
||||
- https://blog.orange.tw/
|
||||
- <https://4ra1n.github.io/>
|
||||
- <https://y4tacker.github.io/>
|
||||
- <https://y4er.com/>
|
||||
- <https://cjovi.icu/>
|
||||
- <https://crazymanarmy.github.io/>
|
||||
- <https://www.gem-love.com/>
|
||||
- <https://blog.huli.tw/>
|
||||
- <https://blog.orange.tw/>
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
>
|
||||
> Vidar-Team 成立于 2008 年 9 月,其名 Vidar 来源于北欧神话"诸神黄昏"中幸存于难、带领人类重建了家园的神 Víðarr,是由杭州电子科技大学一群热爱信息安全的小伙伴自发成立的技术型团体,作为高校战队活跃于各大 ctf 赛事。
|
||||
>
|
||||
> 2023 招新 QQ 群: 861507440(仅向校内开放),欢迎对技术感兴趣的小伙伴加入我们!
|
||||
> 2023 招新 QQ 群:861507440(仅向校内开放),欢迎对技术感兴趣的小伙伴加入我们!
|
||||
|
||||
**招新方向汇总:**
|
||||
**招新方向汇总:**
|
||||
|
||||
- Web(网络安全)
|
||||
- 渗透(模拟黑客攻击,找寻漏洞,修补、加固系统)
|
||||
|
||||
Reference in New Issue
Block a user