0%

思维导图

22安全开发

知识点:

  • 20、JS技术-DOM树操作及安全隐患
  • 21、JS技术-加密编码及数据安全调试

章节点

  • 1、PHP:
    功能:新闻列表,会员中心,资源下载,留言版,后台模块,模版引用,框架开发等
    技术:输入输出,超全局变量,数据库操作,逻辑架构,包含上传&下载删除;
    技术:JS&CSS混用,Cookie,Session操作,MVC架构,ThinkPHP引用等。
    安全:原生PHP开发安全,模版引用安全,第三方插件安全,TP框架安全等
  • 2、JS:
    功能:登录验证,文件操作,SQL操作,云应用接入,框架开发,打包器使用等
    技术:原生开发,DOM,常见库使用,框架开发(Vue,NodeJS),打包器(Webpack)等
    安全:原生开发安全,NodeJS安全,Vue安全,打包器Webpack安全,三方库安全问题等
  • 3、Java:
    内容筹备中……

JS原生开发-DOM树-用户交互

DOM:文档操作对象
浏览器提供的一套专门用来操作网页代码内容的功能,实现自主或用户交互动作反馈

安全问题:本身的前端代码通过DOM技术实现代码的更新修改,但是更新修改如果修改的数据可以由用户来指定,就会造成DOM-XSS攻击!

  • 1、获取对象
    标签:直接写
    Class:加上符号.
    id:加上符号#

    1
    2
    3
    4
    <h1 id="myHeader" onclick="getValue()">这是标题</h1>
    document.querySelector('h1')
    document.querySelector('.id')
    document.querySelector('#myHeader')
  • 2、获取对象属性

    1
    2
    3
    4
    <h1 id="myHeader" onclick="getValue()">这是标题</h1>
    const h1=document.querySelector('h1')
    const id=h1.id
    console.log(id)
  • 3、操作元素数据
    innerHTML 解析后续代码
    innerText 不解析后续代码

  • 4、操作元素属性

    1
    2
    3
    4
    className src id等  
    <img src="iphone.jpg" width="300" height="300"></img>
    const src=document.querySelector('img')
    src.src='huawei.png'

JS导入库开发-编码加密-逆向调试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
//Base64

//MD5
<script src="js/md5.js"></script>
<script>
var str1 = 'xiaodisec'
var str_encode = md5(str1);
console.log(str_encode)
</script>

//SHA1
<!DOCTYPE html>
<script src="js/crypto-js.js"></script>
<script>
var str1 = 'xiaodisec';
var str_encode = CryptoJS.SHA1(str1).toString(); // 注意:1是数字1
console.log(str_encode)
</script>
</html>

//HMAC
<script src="js/crypto-js.js"></script>
<script>
var key = 'key';
var str1 = 'xiaodisec';
var hash = CryptoJS.HmacSHA256(key, str1);
var str_encode = CryptoJS.enc.Hex.stringify(hash);
console.log(str_encode) // '11a7960cd583ee2c3f1ed910dbc3b6c3991207cbc527d122f69e84d13cc5ce5c'
</script>

//AES
<script src="js/crypto-js.js"></script>
<script type="text/javascript">
var aseKey = "12345678" // 定制秘钥,长度必须为:8/16/32位, 长度不一致也没问题
var message = "xiaodisec"; // 需要加密的内容
// 加密 DES/AES切换只需要修改 CryptoJS.AES <=> CryptoJS.DES
var encrypt = CryptoJS.AES.encrypt(message, CryptoJS.enc.Utf8.parse(aseKey), // 参数1=密钥, 参数2=加密内容
{
mode: CryptoJS.mode.ECB, // 为DES的工作方式
padding: CryptoJS.pad.Pkcs7 // 当加密后密文长度达不到指定整数倍(8个字节、16个字节)则填充对应字符
}
).toString(); // toString=转字符串类型

console.log(encrypt); // 在弹窗中打印字符串 2vcsEDJv9vAZZLgFLjkZ9A==

//解密
var decrypt = CryptoJS.AES.decrypt(encrypt, CryptoJS.enc.Utf8.parse(aseKey), // 参数1=密钥, 参数2=解密内容
{
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
}
).toString(CryptoJS.enc.Utf8); // toString=转字符串类型,并指定编码
console.log(decrypt); // "xiaodisec"
</script>

//DES
<script src="js/crypto-js.js"></script>
<script type="text/javascript">
var aseKey = "12345678" // 定制秘钥,长度必须为:8/16/32位, 长度不一致也没问题
var message = "xiaodisec"; // 需要加密的内容
// 加密 DES/AES切换只需要修改 CryptoJS.AES <=> CryptoJS.DES
var encrypt = CryptoJS.DES.encrypt(message, CryptoJS.enc.Utf8.parse(aseKey), // 参数1=密钥, 参数2=加密内容
{
mode: CryptoJS.mode.ECB, // 为DES的工作方式
padding: CryptoJS.pad.Pkcs7 // 当加密后密文长度达不到指定整数倍(8个字节、16个字节)则填充对应字符
}
).toString(); // toString=转字符串类型

console.log(encrypt); // 控制台打印 CDVNwmEwDRM

//解密
var decrypt = CryptoJS.DES.decrypt(encrypt, CryptoJS.enc.Utf8.parse(aseKey), // 参数1=密钥, 参数2=解密内容
{
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
}
).toString(CryptoJS.enc.Utf8); // toString=转字符串类型,并指定编码
console.log(decrypt); // 控制台打印 "i am xiaozhou ?"
</script>


//RSA
<script src="js/jsencrypt.js"></script>
<script type="text/javascript">
// 公钥 私匙是通过公匙计算生成的,不能盲目设置
var PUBLIC_KEY = '-----BEGIN PUBLIC KEY-----MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALyBJ6kZ/VFJYTV3vOC07jqWIqgyvHulv6us/8wzlSBqQ2+eOTX7s5zKfXY40yZWDoCaIGk+tP/sc0D6dQzjaxECAwEAAQ==-----END PUBLIC KEY-----';
//私钥
var PRIVATE_KEY = '-----BEGIN PRIVATE KEY-----MIIBVQIBADANBgkqhkiG9w0BAQEFAASCAT8wggE7AgEAAkEAvIEnqRn9UUlhNXe84LTuOpYiqDK8e6W/q6z/zDOVIGpDb545NfuznMp9djjTJlYOgJogaT60/+xzQPp1DONrEQIDAQABAkEAu7DFsqQEDDnKJpiwYfUE9ySiIWNTNLJWZDN/Bu2dYIV4DO2A5aHZfMe48rga5BkoWq2LALlY3tqsOFTe3M6yoQIhAOSfSAU3H6jIOnlEiZabUrVGqiFLCb5Ut3Jz9NN+5p59AiEA0xQDMrxWBBJ9BYq6RRY4pXwa/MthX/8Hy+3GnvNw/yUCIG/3Ee578KVYakq5pih8KSVeVjO37C2qj60d3Ok3XPqBAiEAqGPvxTsAuBDz0kcBIPqASGzArumljkrLsoHHkakOfU0CIDuhxKQwHlXFDO79ppYAPcVO3bph672qGD84YUaHF+pQ-----END PRIVATE KEY-----';
//使用公钥加密
var encrypt = new JSEncrypt();//实例化加密对象
encrypt.setPublicKey(PUBLIC_KEY);//设置公钥
var message = 'xiaodisec' // 需要加密的数据
var encrypted = encrypt.encrypt(message);//对指定数据进行加密
console.log(encrypted) // 'JQ83h8tmJpsSZcb4BJ3eQvuqIAs3ejepcUUnoFhQEvum8fA8bf1Y/fG+DO1bSIVNJF6EOZKe4wa0njv6aOar9w=='
//使用私钥解密
var decrypt = new JSEncrypt(); // 创建解密对象
decrypt.setPrivateKey(PRIVATE_KEY); //设置私钥
var uncrypted = decrypt.decrypt(encrypted); //解密 'xiaodisec'
console.log(uncrypted);
</script>

思维导图

22安全开发

知识点:

  • 18、JS应用-原生态开发&第三库开发
  • 19、JS功能-文件上传&登录验证&商品购买

章节点

  • 1、PHP:
    功能:新闻列表,会员中心,资源下载,留言版,后台模块,模版引用,框架开发等
    技术:输入输出,超全局变量,数据库操作,逻辑架构,包含上传&下载删除;
    技术:JS&CSS混用,Cookie,Session操作,MVC架构,ThinkPHP引用等。
  • 2、JS:
    功能:登录验证,文件操作,商品购买,数据库操作,云应用接入,框架开发等
    技术:原生开发,DOM树,常见库使用(JQuery),框架开发(Vue,Nodejs)等
  • 3、Java:
    内容筹备中……

参考

JS原生开发-文件上传-变量&对象&函数&事件

  • 1、布置前端页面
  • 2、JS获取提交数据
  • 3、JS对上传格式判断
  • 4、后端对上传数据处理
    前端JS进行后缀过滤,后端PHP进行上传处理
    架构:html js php - upload.php

安全问题:

  • 1、过滤代码能看到分析绕过
  • 2、禁用JS或删除过滤代码绕过

JS导入库开发-登录验证-JQuery库&Ajax技术

  • 1、布置前端页面
  • 2、获取登录事件
  • 3、配置Ajax请求
  • 4、后端代码验证
  • 5、成功回调判断
    后端PHP进行帐号判断,前端JS进行登录处理
    架构:html js login.html - logincheck.php

JS导入库开发-逻辑购买-JQuery库&Ajax技术

  • 1、布置前端页面
  • 2、获取登录事件
  • 3、配置Ajax请求
  • 4、后端代码验证
  • 5、成功回调判断
    架构:html js shop.html - shopcheck.php

实例测试-某违规APP-密码找回&JS验证逻辑安全

思维导图

22安全开发

知识点:

  • 16、TP框架-开发-路由访问&数据库&文件上传&MVC模型
  • 17、TP框架-安全-不合规写法&内置过滤绕过&版本安全漏洞

章节点

PHP:
功能:新闻列表,会员中心,资源下载,留言版,后台模块,模版引用,框架开发等
技术:输入输出,超全局变量,数据库操作,逻辑架构,包含上传&下载删除;
技术:JS&CSS混用,Cookie,Session操作,MVC架构,ThinkPHP引用等。
JS:内容筹备中……
Java:内容筹备中……

TP框架-开发-配置架构&路由&MVC模型

参考:https://www.kancloud.cn/manual/thinkphp5_1

  • 1、配置架构-导入使用
  • 2、路由访问-URL访问
  • 3、数据库操作-应用对象
  • 4、文件上传操作-应用对象
  • 5、前端页面渲染-MVC模型

TP框架-安全-不安全写法&版本过滤绕过

  • 1、内置代码写法
    例子:不合规的代码写法-TP5-自写
  • 2、框架版本安全
    例子1:写法内置安全绕过-TP5-SQL注入
    例子2:内置版本安全漏洞-TP5-代码执行

思维导图

22安全开发

知识点:

  • 13、PHP新闻显示-数据库操作读取显示
  • 14、PHP模版引用-自写模版&Smarty渲染
  • 15、PHP模版安全-RCE代码执行&三方漏洞

章节点

PHP:
功能:新闻列表,会员中心,资源下载,留言版,后台模块,模版引用,框架开发等
技术:输入输出,超全局变量,数据库操作,逻辑架构,包含上传&下载删除;
技术:JS&CSS混用,Cookie,Session操作,MVC架构,ThinkPHP引用等。
JS:内容筹备中……
Java:内容筹备中……

新闻列表

  • 1、数据库创建新闻存储
  • 2、代码连接数据库读取
  • 3、页面进行自定义显示

自写模版引用

  • 1、页面显示样式编排
  • 2、显示数据插入页面
  • 3、引用模版调用触发

Smarty模版引用

下载:https://github.com/smarty-php/smarty/releases
使用:

  • 1、创建一个文件夹,命名为smarty-demo。
  • 2、下载Smarty对应版本并解压缩到该文件夹中。
  • 3、创建一个PHP文件,命名为index.php,并在文件中添加以下代码:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?php
    // 引入 Smarty 类文件
    require('smarty-demo/libs/Smarty.class.php');
    // 创建 Smarty 实例
    $smarty = new Smarty;
    // 设置 Smarty 相关属性
    $smarty->template_dir = 'smarty-demo/templates/';
    $smarty->compile_dir = 'smarty-demo/templates_c/';
    $smarty->cache_dir = 'smarty-demo/cache/';
    $smarty->config_dir = 'smarty-demo/configs/';
    // 赋值变量到模板中
    $smarty->assign('title', '欢迎使用 Smarty');
    // 显示模板
    $smarty->display('index.tpl');
    ?>
  • 4、创建一个名为index.tpl的模板文件,并将以下代码复制到上述点定义文件夹中
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <!DOCTYPE html>
    <html>
    <head>
    <title>{$title}</title>
    </head>
    <body>
    <h1>{$title}</h1>
    <p>这是一个使用 Smarty 的例子。</p>
    </body>
    </html>

代码RCE安全测试

  • 1、自写模版的安全隐患
    php文件渲染模板时使用了代码执行函数——>模板中加上可控变量造成代码执行
  • 2、第三方Smarty的安全隐患
    第三方插件 ueditor
    第三方组件 shiro
    也有安全隐患
    代码审计——>不仅仅是代码,还有引用的第三方软件
    黑盒插件识别模板、特征
    白盒文件,代码、特征

思维导图

22安全开发

知识点:

  • 11、PHP文件管理-下载&删除功能实现
  • 12、PHP文件管理-编辑&包含功能实现

章节点

PHP:
功能:新闻列表,会员中心,资源下载,留言版,后台模块,模版引用,框架开发等
技术:输入输出,超全局变量,数据库操作,逻辑架构,包含上传&下载删除;
技术:JS&CSS混用,Cookie,Session操作,MVC架构,ThinkPHP引用等。
JS:内容筹备中……
Java:内容筹备中……

PHP文件操作安全

-文件包含,文件上传,文件下载,文件删除,文件写入,文件遍历

文件包含:

1
2
3
4
include() 在错误发生后脚本继续执行  
require() 在错误发生后脚本停止执行
include_once() 如果已经包含,则不再执行
require_once() 如果已经包含,则不再执行

文件上传:

1、无过滤机制
2、黑名单过滤机制
3、白名单过滤机制
4、文件类型过滤机制

架构:
1、上传至服务器本身的存储磁盘(源码在一起)
2、云产品OSS存储对象去存储文件(泄漏安全)
3、把文件上传到其他域名,如:www.xiaodi8.com->upload.xiaodi8.com

1
2
3
4
5
6
7
$_FILES:PHP中一个预定义的超全局变量,用于在上传文件时从客户端接收文件,并将其保存到服务器上。它是一个包含上传文件信息的数组,包括文件名、类型、大小、临时文件名等信息。  
$_FILES["表单值"]["name"] 获取上传文件原始名称
$_FILES["表单值"]["type"] 获取上传文件MIME类型
$_FILES["表单值"]["size"] 获取上传文件字节单位大小
$_FILES["表单值"]["tmp_name"] 获取上传的临时副本文件名
$_FILES["表单值"]["error"] 获取上传时发生的错误代码
move_uploaded_file() 将上传的文件移动到指定位置的函数

文件显示:

1.打开目录读取文件列表
2.递归循环读取文件列表
3.判断是文件还是文件夹
4.PHP.INI目录访问控制

1
2
3
4
5
is_dir() 函数用于检查指定的路径是否是一个目录  
opendir() 函数用于打开指定的目录,返回句柄,用来读取目录中的文件和子目录
readdir() 函数用于从打开的目录句柄中读取目录中的文件和子目录
open_basedir:PHP.INI中的设置用来控制脚本程序访问目录
ini_set('open_basedir',__DIR__); 设置配置文件中,只能访问本目录

文件删除:

1
2
unlink() 文件删除函数  
调用命令删除:system shell_exec exec等

文件下载:

修改HTTP头实现文件读取解析下载:

1
2
3
4
header("Content-Type: application/octet-stream");  
header("Content-Disposition: attachment; filename="");
header("Content-Length: " . filesize($file));
readfile($file);

文件编辑:

1
2
1、file_get_contents() 读取文件内容  
2、fopen() fread() 文件打开读入

思维导图

22安全开发

知识点:

  • 8、PHP文件管理-显示&上传功能实现
  • 9、文件上传-$_FILES&过滤机制实现
  • 10、文件显示-目录遍历&过滤机制实现

章节点

PHP:
功能:新闻列表,会员中心,资源下载,留言版,后台模块,模版引用,框架开发等
技术:输入输出,超全局变量,数据库操作,逻辑架构,包含上传&下载删除;
技术:JS&CSS混用,Cookie,Session操作,MVC架构,ThinkPHP引用等。
JS:内容筹备中……
Java:内容筹备中……

文件管理模块-上传-过滤机制

  • 1、无过滤机制
  • 2、黑名单过滤机制
  • 3、白名单过滤机制
  • 4、文件类型过滤机制
    1
    2
    3
    4
    5
    6
    7
    $_FILES:PHP中一个预定义的超全局变量,用于在上传文件时从客户端接收文件,并将其保存到服务器上。它是一个包含上传文件信息的数组,包括文件名、类型、大小、临时文件名等信息。  
    $_FILES["表单值"]["name"] 获取上传文件原始名称
    $_FILES["表单值"]["type"] 获取上传文件MIME类型
    $_FILES["表单值"]["size"] 获取上传文件字节单位大小
    $_FILES["表单值"]["tmp_name"] 获取上传的临时副本文件名
    $_FILES["表单值"]["error"] 获取上传时发生的错误代码
    move_uploaded_file() 将上传的文件移动到指定位置的函数

文件管理模块-显示-过滤机制

功能:显示 上传 下载 删除 编辑 包含等
1.打开目录读取文件列表
2.递归循环读取文件列表
3.判断是文件还是文件夹
4.PHP.INI目录访问控制

1
2
3
4
is_dir() 函数用于检查指定的路径是否是一个目录  
opendir() 函数用于打开指定的目录,返回句柄,用来读取目录中的文件和子目录
readdir() 函数用于从打开的目录句柄中读取目录中的文件和子目录
open_basedir:PHP.INI中的设置用来控制脚本程序访问目录

思维导图

22安全开发

知识点:

  • 5、PHP后台身份验证模块实现
  • 6、Cookie&Session技术&差异
  • 7、Token数据包唯一性应用场景
  • 项目1:用cookie做后台身份验证
  • 项目2:用session做后台身份验证
  • 项目3:用token做用户登录判断

章节点

PHP:
功能:新闻列表,会员中心,资源下载,留言版,后台模块,模版引用,框架开发等
技术:输入输出,超全局变量,数据库操作,逻辑架构,包含上传&下载删除;
技术:JS&CSS混用,Cookie,Session操作,MVC架构,ThinkPHP引用等。
JS:内容筹备中……
Java:内容筹备中……

身份验证-Cookie使用

生成cookie的原理图过程:见图

  • 1、客户端向服务器发送HTTP请求。
  • 2、服务器检查请求头中是否包含cookie信息。
  • 3、如果请求头中包含cookie信息,则服务器使用该cookie来识别客户端,否则服务器将生成一个新的cookie。
  • 4、服务器在响应头中设置cookie信息并将其发送回客户端。
  • 5、客户端接收响应并将cookie保存在本地。
  • 6、当客户端发送下一次HTTP请求时,它会将cookie信息附加到请求头中。
  • 7、服务器收到请求并检查cookie的有效性。
  • 8、如果cookie有效,则服务器响应请求。否则,服务器可能会要求客户端重新登录。

setcookie(): 设置一个cookie并发送到客户端浏览器。
unset(): 用于删除指定的cookie。

身份验证-Session使用

  • 1、客户端向服务器发送HTTP请求。
  • 2、服务器为客户端生成一个唯一的session ID,并将其存储在服务器端的存储器中(如文件、数据库等)。
  • 3、服务器将生成的session ID作为一个cookie发送给客户端。
  • 4、客户端将session ID保存为一个cookie,通常是在本地浏览器中存储。
  • 5、当客户端在发送下一次HTTP请求时,它会将该cookie信息附加到请求头中,以便服务器可以通过该session ID来识别客户端。
  • 6、服务器使用session ID来检索存储在服务器端存储器中的与该客户端相关的session数据,从而在客户端和服务器之间共享数据。

session_start(): 启动会话,用于开始或恢复一个已经存在的会话。
$_SESSION: 用于存储和访问当前会话中的所有变量。
session_destroy(): 销毁当前会话中的所有数据。
session_unset(): 释放当前会话中的所有变量。
Session存储路径:PHP.INI中session.save_path设置路径

唯一性判断-Token使用

  • 1、生成Token并将其存储在Session
  • 2、生成Token并将其绑定在Cookie触发
  • 3、尝试登录表单中带入Token验证逻辑
  • 4、思考Token安全特性

具体安全知识点:

Cookie和Session都是用来在Web应用程序中跟踪用户状态的机制

  • 1、存储位置不同:
            Cookie是存储在客户端(浏览器)上的,而Session是存储在服务器端的。
  • 2、安全性不同:
            Cookie存储在客户端上,可能会被黑客利用窃取信息,而Session存储在服务器上,更加安全。
  • 3、存储容量不同:
            Cookie的存储容量有限,一般为4KB,而Session的存储容量理论上没有限制,取决于服务器的硬件和配置。
  • 4、生命周期不同:
            Cookie可以设置过期时间,即便关闭浏览器或者重新打开电脑,Cookie仍然存在,直到过期或者被删除。而Session一般默认在浏览器关闭后就会过期。
  • 5、访问方式不同:
            Cookie可以通过JavaScript访问,而Session只能在服务器端进行访问。
  • 6、使用场景不同:
            Cookie一般用于存储小型的数据,如用户的用户名和密码等信息。而Session一般用于存储大型的数据,如购物车、登录状态等信息。

        总之,Cookie和Session都有各自的优缺点,选择使用哪一种方式,取决于具体的应用场景和需求。一般来说,如果需要存储敏感信息或者数据较大,建议使用Session;如果只需要存储少量的数据,并且需要在客户端进行访问,可以选择使用Cookie。

在Web应用程序中,使用token和不使用token的主要差异在于身份验证和安全性。

  • 1.身份验证:
            采用token机制的Web应用程序,用户在登录成功后会收到一个token,这个token可以在每次请求时发送给服务器进行身份验证。而不采用token机制的Web应用程序,一般会使用session机制来保存用户登录状态,服务器会在用户登录成功后创建一个session,之后的每个请求都需要在HTTP头中附带这个session ID,以便服务器能够验证用户身份。
  • 2、安全性:
            采用token机制的Web应用程序,在服务器上不会存储用户的登录状态,只需要存储token即可。因此,即使token被盗取,黑客也无法获得用户的密码或者其他敏感信息。而不采用token机制的Web应用程序,一般会在服务器上存储用户的登录状态,因此如果服务器被黑客攻击,黑客可能会获得用户的敏感信息。
  • 3、跨域访问:
            采用token机制的Web应用程序,在跨域访问时,可以使用HTTP头中的Authorization字段来传递token信息,方便实现跨域访问。而不采用token机制的Web应用程序,在跨域访问时,需使用cookie或session来传递用户身份信息,比较麻烦。

        总之,采用token机制可以提高Web应用程序的安全性,并且方便实现跨域访问。不过,使用token机制也需要开发者自己来实现身份验证和token的生成和验证,相对来说比较复杂。而不采用token机制,使用session机制则相对简单,但是安全性相对较低。因此,具体采用哪种机制,需要根据实际情况进行权衡和选择。

思维导图

知识点:

1、PHP留言板前后端功能实现
2、数据库创建&架构&增删改查
3、内置超全局变量&HTML&JS混编
4、第三方应用插件&传参&对象调用

章节点

PHP:
功能:新闻列表,会员中心,资源下载,留言版,后台模块,模版引用,框架开发等
技术:输入输出,超全局变量,数据库操作,逻辑架构,包含上传&下载删除;
技术:JS&CSS混用,Cookie,Session操作,MVC架构,ThinkPHP引用等。
JS:内容筹备中……
Java:内容筹备中……

开发环境:

DW + PHPStorm + PhpStudy + Navicat Premium
DW : HTML&JS&CSS开发
PHPStorm : 专业PHP开发IDE
PhpStudy :Apache MYSQL环境
Navicat Premium: 全能数据库管理工具

数据导入-mysql架构&库表列

1、数据库名,数据库表名,数据库列名
2、数据库数据,格式类型,长度,键等

数据库操作-mysqli函数&增删改查

PHP函数:连接,选择,执行,结果,关闭等
参考:https://www.runoob.com/php/php-ref-mysqli.html
常用:

1
2
3
4
5
mysqli_connect()	打开一个到MySQL的新的连接。  
mysqli_select_db() 更改连接的默认数据库。
mysqli_query() 执行某个针对数据库的查询。
mysqli_fetch_row() 从结果集中取得一行,并作为枚举数组返回。
mysqli_close() 关闭先前打开的数据库连接。

MYSQL增删改查:

1
2
3
4
查:select * from 表名 where 列名='条件';  
增:insert into 表名(`列名1`, `列名2`) value('列1值1', '列2值2');
删:delete from 表名 where 列名 = '条件';
改:update 表名 set 列名 = 数据 where 列名 = '条件';

数据接收输出-html混编&超全局变量

1、html混编:使HTML(JS)在PHP语言中运行

1
2
3
<?php  
echo '<script>alert('x');</script>'
?>

2、超全局变量:
参考:
https://www.w3school.com.cn/php/php_superglobals.asp
https://www.php.net/manual/zh/language.variables.superglobals.php

1
2
3
4
5
6
7
8
9
$GLOBALS:这种全局变量用于在 PHP 脚本中的任意位置访问全局变量  
$_SERVER:这种超全局变量保存关于报头、路径和脚本位置的信息。
$_REQUEST:$_REQUEST 用于收集 HTML 表单提交的数据。
$_POST:广泛用于收集提交method="post" 的HTML表单后的表单数据。
$_GET:收集URL中的发送的数据。也可用于收集提交HTML表单数据(method="get")
$_FILES:文件上传且处理包含通过HTTP POST方法上传给当前脚本的文件内容。
$_ENV:是一个包含服务器端环境变量的数组。
$_COOKIE:是一个关联数组,包含通过cookie传递给当前脚本的内容。
$_SESSION:是一个关联数组,包含当前脚本中的所有session内容。

第三方插件引用-js传参&函数对象调用

引用:
函数对象调用:

1
2
3
4
5
6
7
8
9
10
11
var obj = {
value : 0,
increment : function (inc) {
this.value += typeof inc === 'number' ? inc :1;
//设置inc且为数字时 value=inc 反之 value=1
}
}
obj.increment();
console.log(obj.value); //1
obj.increment(2);
console.log(obj.value); //2

思维导图

12信息打点

知识点:

  • 29、开发泄漏-Github监控
  • 30、文件泄漏-网盘全局搜索
  • 31、架构泄漏-目录扫码&爬虫
  • 32、其他泄漏-公众号服务资产
  • 33、收集进阶-证书&图标&邮箱

章节点

  • Web:语言/CMS/中间件/数据库/系统/WAF等
  • 系统:操作系统/端口服务/网络环境/防火墙等
  • 应用:APP对象/API接口/微信小程序/PC应用等
  • 架构:CDN/前后端/云应用/站库分离/OSS资源等
  • 技术:JS爬虫/敏感扫描/目录爬虫/源码获取/接口泄漏等
  • 技术:指纹识别/端口扫描/CDN绕过/WAF识别/Github监控等
  • 技术:APK反编译/小程序解包反编译/动态调试APP&小程序等

微信公众号-获取&三方服务

1、获取微信公众号途径
https://weixin.sogou.com/
2、微信公众号有无第三方服务(非调用api,用自己的资产)

Github监控-开发&配置&源码

        目标中开发人员或者托管公司上传的项目存在源码泄漏或配置信息(密码密匙等),人员数据库等敏感信息,找到多个脆弱点。

  • 1、人员&域名&邮箱等筛选
    eg:xxx.cn password in:file
    https://gitee.com/
    https://github.com/
    https://www.huzhan.com/
    GITHUB资源搜索:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    in:name test               #仓库标题搜索含有关键字 
    in:descripton test #仓库描述搜索含有关键字
    in:readme test #Readme文件搜素含有关键字
    stars:>3000 test #stars数量大于3000的搜索关键字
    stars:1000..3000 test #stars数量大于1000小于3000的搜索关键字
    forks:>1000 test #forks数量大于1000的搜索关键字
    forks:1000..3000 test #forks数量大于1000小于3000的搜索关键字
    size:>=5000 test #指定仓库大于5000k(5M)的搜索关键字
    pushed:>2019-02-12 test #发布时间大于2019-02-12的搜索关键字
    created:>2019-02-12 test #创建时间大于2019-02-12的搜索关键字
    user:test #用户名搜素
    license:apache-2.0 test #明确仓库的 LICENSE 搜索关键字
    language:java test #在java语言的代码中搜索关键字
    user:test in:name test #组合搜索,用户名test的标题含有test的关键字配合谷歌搜索:
    site:Github.com smtp
    site:Github.com smtp @qq.com
    site:Github.com smtp @126.com
    site:Github.com smtp @163.com
    site:Github.com smtp @sina.com.cn
    site:Github.com smtp password
    site:Github.com String password smtp
  • 2、语法固定长期后续监控新泄露
    -基于关键字监控
    -基于项目规则监控
    https://github.com/madneal/gshark
    https://github.com/NHPT/FireEyeGoldCrystal
    https://github.com/Explorer1092/Github-Monitor

网盘资源搜索-全局文件机密

主要就是查看网盘中是否存有目标的敏感文件
如:企业招标,人员信息,业务产品,应用源码等

敏感目录文件-目录扫描&爬虫

-后续会详细讲到各类工具项目

网络空间进阶-证书&图标&邮箱

#实战案例四则-技术分享打击方位
案例1–招标平台二级跳
案例2–爱企查隐藏的惊喜
案例3–邮箱爆破到内网
案例4–不靠系统漏洞,从外网获取域控

思维导图

12信息打点

知识点:

  • 26、工具项目-红蓝队&自动化部署
  • 27、工具项目-自动化侦查收集提取
  • 28、工具项目-综合&网络空间&信息

章节点

  • Web:语言/CMS/中间件/数据库/系统/WAF等
  • 系统:操作系统/端口服务/网络环境/防火墙等
  • 应用:APP对象/API接口/微信小程序/PC应用等
  • 架构:CDN/前后端/云应用/站库分离/OSS资源等
  • 技术:JS爬虫/敏感扫描/目录爬虫/源码获取/接口泄漏等
  • 技术:指纹识别/端口扫描/CDN绕过/WAF识别/Github监控等
  • 技术:APK反编译/小程序解包反编译/动态调试APP&小程序等

各类红蓝队优秀工具项目集合:

https://github.com/guchangan1/All-Defense-Tool
        本项目集成了全网优秀的开源攻防武器项目,包含信息收集工具(自动化利用工具、资产发现工具、目录扫描工具、子域名收集工具、指纹识别工具、端口扫描工具、各种插件…),漏洞利用工具(各大CMS利用工具、中间件利用工具等项目…),内网渗透工具(隧道代理、密码提取…)、应急响应工具、甲方运维工具、等其他安全攻防资料整理,供攻防双方使用。如果你有更好的建议,欢迎提出请求。

##新服务器设置

  • Ubuntu
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    apt-get update
    apt-get install docker
    apt-get install docker-compose
    git clone https://github.com/TophantTechnology/ARL
    cd ARL/docker/
    docker volume create arl_db
    docker-compose pull
    docker-compose up -d
    mkdir nemo;tar xvf nemo_linux_amd64.tar -C nemo;cd nemo
    docker-compose up -d
    vim docker-compose.yum
    version:'3.7'(i)---->3.3(:wq)
    docker-compose up -d
    cd ..
    wget : wget -O f8x https://f8x.io/
    bash f8x -h
    ...

自动化-武器库部署-F8x

项目地址:https://github.com/ffffffff0x/f8x

  • 1、介绍:
    一款红/蓝队环境自动化部署工具,支持多种场景,渗透,开发,代理环境,服务可选项等.
  • 2、配置:
    通过 CF Workers 下载 [推荐]
    1
    2
    wget : wget -O f8x https://f8x.io/  
    curl : curl -o f8x https://f8x.io/
  • 3、使用:见项目文档
    1
    2
    bash f8x -h 
    例:bash f8x -mobsf
    云服务器Ubuntu系统已搭建好,访问地址:https://[IP]:8000

自动化-网络空间-AsamF

项目地址:https://github.com/Kento-Sec/AsamF

  • 1、介绍:
    AsamF集成了Fofa、Hunter、Quake、Zoomeye、Shodan、爱企查、Chinaz、0.zone、subfinder。AsamF支持Fofa、Hunter、Quake、Zoomeye、Shodan、Chinaz、0.zone配置多个Key。
  • 2、配置:
    AsamF会在/.config/asamf/目录下生成config.json文件。
    如果你有多个key,按照json的格式录入即可,建议键值按照阿拉伯数字依次录入,方便以阿拉伯数字来切换key。自动结果保存在
    /asamf/目录下。
  • 3、使用:见项目文档

自动化-企查信息-ENScan

项目地址:https://github.com/wgpsec/ENScan_GO

  • 1、介绍:
    剑指HW/SRC,解决在HW/SRC场景下遇到的各种针对国内企业信息收集难题
  • 2、配置:
    ENScanGo在第一次使用时需要使用-v命令生成配置文件信息后进行配置
  • 3、使用:见项目文档

自动化-综合架构-ARL&Nemo

ARL灯塔

项目地址:https://github.com/TophantTechnology/ARL

  • 1、介绍:
        旨在快速侦察与目标关联的互联网资产,构建基础资产信息库。 协助甲方安全团队或者渗透测试人员有效侦察和检索资产,发现存在的薄弱点和攻击面。
  • 2、配置:(docker搭建)
    1
    2
    3
    4
    5
    git clone https://github.com/TophantTechnology/ARL  
    cd ARL/docker/
    docker volume create arl_db
    docker-compose pull
    docker-compose up -d
  • 3、使用:见直播操作
    云服务器Ubuntu系统已搭建好,访问地址:https://[IP]:5003
    默认用户名/密码admin/arlpass

Nemo_Go

项目地址:https://github.com/hanc00l/nemo_go

  • 1、介绍:
            Nemo是用来进行自动化信息收集的一个简单平台,通过集成常用的信息收集工具和技术,实现对内网及互联网资产信息的自动收集,提高隐患排查和渗透测试的工作效率,用Golang完全重构了原Python版本。
  • 2、配置:(docker搭建)
    https://github.com/hanc00l/nemo_go/blob/main/docs/docker.md
    下载release的nemo_linux_amd64.tar后执行:
    1
    2
    mkdir nemo;tar xvf nemo_linux_amd64.tar -C nemo;cd nemo  
    docker-compose up -d
    1
    2
    重启开机后执行:cd nemo  
    docker-compose up -d
  • 3、使用:见直播操作
    云服务器Ubuntu系统已搭建好,访问地址:http://[IP]:5000
    默认用户名/密码nemo/nemo
  • 4、Bug:网络空间(配置后要重启)
    https://github.com/hanc00l/nemo_go/issues/72

MobSF

1
docker run -it --rm -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest

云服务器Ubuntu系统已搭建好,访问地址:http://[IP]:8000