代码审计01
- 基本的web代码审计
- 对防火墙的认识
- WAF 绕过
- 反病毒anti-virus的绕过
- 学习如何写渗透报告
基本的定义:
CNVD - 国家安全的漏洞数据库(通用性的中危以上的漏洞 或者使敏感机关的中高危以上的事件)
黑盒 - 看不到源代码 (后端语言 php javascript)
白盒 - 可以看到相应的代码
1.信息安全法律法规
信息社区 : tools, 先知社区, 零组(资料文库)
- 明确违法的边界,明确绝对不能做的事情
- 明确在挖洞时候需要明确的敏感边界
绝对不要
1. 侵入计算机系统
2. 破坏计算机信息系统罪
- 出售信息 3年
- 非法侵入国家事务,及技术领域 3年
- 非法侵入计算机系统 (情节严重
1 :10组信息以上 3- 7 年
2: 造成经济损失) - 提供专门用于计算机信息的程序,工具, 依照前款的规定处罚
- 具有避开或者突破计算机的信息安全保护措施(绕过waf),免杀,注入
- 对企业实际的控制人,能不抓就不抓
2.统一资源定位符 URL
URL链接里,每一个格式正确且符合规范的URL都对应着互联网中唯一的资源
2.1. URL格式
scheme - 用于传输的协议,最常见的是http(80)协议
常用的协议 :ftp(20,21) file, http(80), https(443), mailto(SMTP)…
login:password - 登录名密码
address:port - 服务器地址 端口
/path/to/resource - 层级文件路径
?query_string - 查询字符串
#fragment - 片段ID,在客户端,不会回传至服务端,通常应用于锚点
2.2 PHP 开发环境搭建工具
-
phpStudy
Apache/Nginx+PHP+MySQL+phpMyAdmin+ZendOptimizer+OpenSSL
-
WampServer
WampServer 就是 Windows、Apache、Mysql、PhpMyadmin、SqlBuddy、XDebug PHP 集成安装环境,即在 window 下的 apache、php 和 mysql 的服务器软件。
-
XAMPP
XAMPP(Apache+MySQL+PHP+PERL)是一个功能强大的建站集成软件包
-
MAMP
macOS、Apache、MySQL 或 MariaDB 和 PHP,Perl 或 Python。
-
IIS
微软公司提供的基于运行 Microsoft Windows 的互联网基本服务
-
宝塔面板
LAMP/LNMP/Tomcat/Node.js),一键部署 SSL
-
UPUPW
Windows 平台下最具特色的 Web 服务器 PHP 套件,包括 Apache 版、Ngix 版和 Kangle 版:Apache/Nginx+PHP+MySQL+phpMyAdmin+Xdebug+Memcached+eAccelerator+ZendGuardLoader/Optimizer
2.3. PHP报错类型及区别 (实验1)
- NOTICE(注意) :比较小的错误,比如访问违背定义的变量,且不会影响运行结果
<?php
$input = $_GET['input'];
echo $input."<br>";
?>
并且访问
// hh.php
www.localhost.com/文件夹名/文档名.php
- Warnings(警告)
稍微严重一点的错误,比如包含了一个本身不存在的文件,但不会终止文件运行
- Fatal errors (致命错误)
初始化一个根本不存在的类的对象,或调用一个不存在的函数,程序停止运行。
2.4. PHP系统函数
<?php
var_dump($_SERVER); //打印服务器信息,是个数组
?>
2.5. 获取完整URL信息的函数:
并且查看页面信息在Chrome里 F12 —> Network
2.6. URL 编码
此处 %20 是空格的编码
URL只能使用英文字母、阿拉伯数字和某些标点符号,不能使用其他文字和符号。
! 中文使用的编码是 Unicode,UTF-8
3. HTTP协议
HTTP 超文本传输协议 是基于TCP/IP(传输层协议) 的应用层协议。定义了浏览器和万维网之间的通信规则。
HTTP 由请求和响应构成,且是一个标准的的 CS模型(client–server), 是一个无状态协议(每个请求都是完全独立的,每个请求包含了处理这个请求所需的完整的数据,发送请求不涉及到状态变更).
3.1 HTTP特点
- 简单快速(服务器的程序规模小,通信速度快)
- 灵活(允许传输任意类型的数据对象,且由content_Type加以标记)
- HTTP1.1使用持续连接(一个连接可以传输多个连接对象,节省了传输时间),而0.9和1.0使用非持续性连接,服务器处理完了请求之后,收到客户的应答之后再断开连接。
- 无状态,对事务没有记忆能力
- 支持BS和CS模式
3.2. 实现过程
一次事务分为4步
- 客户与服务器建立连接(单击某个超链接)
- 客户机发送一个请求(包括 URL 协议版本号 MIME信息 修饰符 客户信息 可能的内容)
MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的因特网标准。 MIME 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据
- 服务器接到请求后,给予相应的响应信息( 协议版本号 状态代码 MIME信息 实体信息)
- 客户端接受信息,并解析显示页面,客户机与服务器断开连接
3.3. HTTP状态码
分类 | 分类描述 |
---|---|
1** | 信息,服务器收到请求,需要请求者继续执行操作 |
2** | 成功,操作被成功接收并处理 |
3** | 重定向 |
4** | 客户端错误 |
5** | 服务器错误 |
3.4. HTTP请求
请求行 ----- 请求头 ------ 请求主体
Header : =客户机请求的服务器主机名,客户机的环境信息等
Host : 主机名称
User-Agent : 浏览器或生成请求的其他客户端软件有关的信息
Accept : 客户端愿意接受哪些内容,如图像类型
Accept-Language : 服务器浏览器支持的语言
Accept-Encoding : 客户端愿意接受的内容编码
Origin : 这个消息头用在跨域Ajax请求中,只存在于POST请求
Referer :指示提出当前请求的原始URL。
Cookie :服务器向客户端发送的其他参数
Connection :通知通信的另一方,是否在完成HTTP传输后关闭TCP连接。
If-Modified-Since :浏览器最后一次收到所请求的资源的时间。
Date :告诉服务器,当前请求的时间
3.5. HTTP响应
- 使用http版本
- 请求结果的数字状态码
- 请求结果
Date : 响应返回的时间,GMT(格林威治时间)
Server : 提供所使用的Web服务器软件的相关信息
Set-Cookie : 用于向浏览器发布cookie,浏览器会在随后的请求中将其返回给服务器
Vary: Accept-Encoding : 告诉代理服务器缓存两种版本的资源:压缩和非压缩
Expires : 向浏览器说明消息主体内容的有效时间。
Connection : 告诉通信的另一端,在完成HTTP传输后是关闭TCP连接,还是保持连接开放以接收其他消息。
Content-Type : 规定消息主体的内容类型
Cache-Control : 向浏览器传送缓存指令。
Content-Length : 规定消息主体的字节长度。
3.5. HTTP方法
HTTP1.0 : GET, POST 和 HEAD方法。
HTTP1.1 新增:OPTIONS, PUT, DELETE, TRACE 和 CONNECT
- GET, 获取资源。
- POST,执行操作。
- HEAD,与GET方法相似,不同之处在于服务器不会在其响应中返回消息主体。
- TRACE,用于诊断。服务器应在响应主体中返回其收到的请求消息的具体内容
- OPTIONS, 要求服务器报告对某一特殊资源有效的HTTP方法
- PUT, 向服务器上传指定的资源 !不安全
- DELETE, 请求服务器删除指定的页面 !不安全
3.6. 三次握手
客户端主动向服务器发送SYN
服务器接受客户端包,返回一个SYN+ACK
客户端在返回一个ACK
4.BurpSuite的使用
4.1.Proxy模块
Proxy配置【option】
- 修改Proxy的监听端口,此处我们使用8181
- 配置浏览器的代理
- 配置Intercept Server Responses【截断服务器响应】
对于监听截断进行过滤,根据不同的条件进行筛选
4.2.Target
显示出访问过的、以及页面中有的链接URL。黑色是发生过通信的,灰色是爬虫过的,但没有访问过的。根据Filter配置过滤规则
add to scorp 添加对象到目标范围
4.3.Intruder【用于跑字典和暴力破解】
- 小型模拟登陆验证
<?php
$username =$_GET['username'];
$password=$_GET['password'];
if($username== 'admin'&& $password==123456){
echo 'success';
}
?>
访问
/ss?username=admin&password=123456
Target - 攻击目标细节
Postion - 修改payload fuzz (尝试)测试- Payload (添加载荷) 开始攻击
4种攻击类型
- clunster bomp
- sniper
Sniper 狙击手
( 只有一个有效载荷集, 轮流的把载荷插入相应位置)
Battering ram 攻城模式
将一个可能性插入所有位置
Pitchfork 草叉
- 对每个载荷设置独一无二的集合并且一一对应,请求数取集条目数最小。 实际应用较小,我们并不知道哪个用户对应哪个密码
Cluster 排列组合
有几个有效载荷,就需要几个集合,排列组合实现所有可能性
1. 普通的用户名密码破解
2. MD5加密密码的破解
! 一般前端MD5加密 (不可逆)
加密学复习
对称加密
非对称加密
MD5加密算法:http://blog.csdn.net/huangxiaoguo1/article/details/78042596
Base64加密解密:http://blog.csdn.net/huangxiaoguo1/article/details/78042715
异或加密解密:http://blog.csdn.net/huangxiaoguo1/article/details/78042802
DES加密解密:http://blog.csdn.net/huangxiaoguo1/article/details/78042908
AES自动生成base64密钥加密解密:http://blog.csdn.net/huangxiaoguo1/article/details/78043000
AES加密解密(ECB模式):http://blog.csdn.net/huangxiaoguo1/article/details/78043098
AES加密解密(CBC模式):http://blog.csdn.net/huangxiaoguo1/article/details/78043169
非对称RSA加密解密:http://blog.csdn.net/huangxiaoguo1/article/details/78043354
#hash碰撞
不同字符串hash加密后hash值一样
哈希碰撞解释
当前端页面对密码进行加密时,由于数学算法不可逆,我们一般使用碰撞,或者提前处理(使用相应的加密方式)字符串,再进行爆破
用自带的方法进行字符串处理
3. 带特殊前缀的用户名破解
4. 数字的遍历破解
<?php
$get_code =$_GET['get_code'];
if($get_code== '1155'){
echo 'success';
}else{
echo 'false';
}
?>
(Throttle -摆动时间, 模拟正常人点击与延时)
4.4.Repeater【重复模块】
实现同一个包的修改,可以修改各种参数从而得到不一样的响应
4.5.Decoder 解码
4.6.Compaper
截取每个响应包
----复现1 结果-----
Extender 插件商店
Bapp store —插件商店以及评分等级和下载次数
配置jython
CO2 的作用 集成的sqlmap
Burp APIS ----自己开发插件
------------intruder----用于遍历和暴力破解-------