目 录
取自军队上的术语,红队负责攻击,蓝队负责防御
红队会以各种手段进行攻击发现,以靶标为目标,最终通过一系列方式获取靶标数据或者权限,在军事上可以认为是发现基地摧毁它。
蓝队通过一系列发现手段和防御手段及时阻击红队的进攻,及时发现红队信息后可以踢出局。
是一种利用物理接近或物理接触的方式进行攻击的方法。
这种攻击方法通常涉及攻击者与目标之间的近距离接触,以获取目标的敏感信息或进行其他恶意活动。
伪造邮件,伪造地址进行攻击,获取你的用户名和密码
利用系统漏洞和风险点获取系统操作权限或者数据
通过外网攻击获取服务器操作权限后,进入内网环境后,在内网进行风险发现,继续利用
对流量中的信息进行分析发现,及时发现攻击流量进行阻击,防止继续渗透
及时将攻击路径进行阻断,包括及时发现木马程序、修改行为等等
通过溯源,及时发现攻击者信息,踢出局
用户输入的信息未经处理展示到前端页面中
用户输入的信息带有html标签
浏览器会对html标签进行解析,参考dom树知识
前端三要素:CSS、HTML、JavaScript
JavaScript可以实现dom树的操作,简单来说可以发起http请求(ajax)、读取dom信息(document)等等
一个系统包括前端、后端、数据库等等。前端输入展示数据、后端处理数据、数据库中保存数据
前端输入信息,不用数据库存储,直接通过后端返回到前端-反射xss
前端输入信息,数据库永久存储,后端取数据后展示到前端-存储xss
前端输入信息,不传输到后端,前端直接展示数据-Dom Xss
<?php
if (isset($_GET['user'])){
$user=$_GET['user'];
setcookie("secret", "this is a secret key!!", time()+3600);
echo "你好{$user}";
}
else{
echo "你好!";
}
?>
采用htmlspecialchars
对特殊符号进行转义,转义后再输出到前端页面上
前端信息泄漏(Frontend Information Leakage)是指在网页或应用程序的前端部分,敏感信息被不当地泄露给未经授权的用户或攻击者的情况。这些敏感信息可能包括用户个人信息、登录凭证、数据库结构、API密钥等。
前端代码是可以随意查看的
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<script>
function checkPassword() {
var value1 = document.getElementById("pass").value;
if (value1 == "Fca3GvXZqOAxflTv") {
alert("恭喜你过关");
}
else {
alert("输入错误了,请重新输入");
document.getElementById("pass").value = "";
}
}
</script>
</head>
<body>
请确认密码:<input type="password" id="pass" onblur="checkPassword()"/></p>
</body>
</html>%
关键信息:key、内网地址、密钥、密码等等不要在前端展示
垂直越权漏洞(Vertical Privilege Escalation Vulnerability)是一种安全漏洞,指的是攻击者通过利用软件系统或应用程序中存在的权限错误或不恰当的权限控制,获取比其正常权限更高的访问权限或特权的能力。
垂直越权漏洞通常涉及用户或角色之间的权限管理问题。例如,一个普通用户可能通过某种方式获得了管理员或其他高权限用户的访问权限,从而可以执行超出其正常权限范围的操作。
攻击者可以利用垂直越权漏洞进行各种恶意活动,包括:
访问敏感数据:攻击者可以通过越权访问获取其正常权限下无法访问的敏感数据,例如用户个人信息、支付信息等。
执行特权操作:攻击者可以利用越权访问执行特权操作,例如创建、修改或删除其他用户的账户,修改系统配置等。
绕过权限限制:攻击者可以通过越权访问绕过应用程序中的权限限制,例如跳过验证步骤、绕过访问控制等。
信任前端过来的数据,在后端不做任何校验
<?php
if (!isset($_COOKIE['user'])){
setcookie("user", "guest", time()+3600);
echo "你好,普通用户";
}
else{
if ($_COOKIE['user'] === "admin"){
echo "恭喜你成为了管理员";
}
else {
echo "你好,普通用户";
}
}
在后端对用户校验,并且对权限的认证不能仅依赖前端可猜测的数据,例如cookie,session中在后端处理获取用户信息,再判断用户的权限
不要信任前端的任何数据
水平越权(Horizontal Privilege Escalation)是指在软件系统或应用程序中,一个用户或角色在未经授权的情况下,获取了其他用户或角色相同或相近的权限。这种越权行为可能导致未经授权的用户或角色访问、修改或删除其他用户的数据,从而危及系统的安全性和数据的保密性。
文件上传漏洞(File Upload Vulnerability)是指在应用程序中,攻击者能够上传恶意文件或非预期文件类型,并使其在服务器上执行或存储,从而导致系统安全受到威胁。
文件上传漏洞通常发生在以下情况下:
缺乏文件类型验证:应用程序未对用户上传的文件进行充分的验证和检查,导致攻击者能够上传恶意文件,并绕过文件类型限制。
缺乏文件内容验证:应用程序未对上传的文件内容进行检查,例如未检查文件中的恶意代码或脚本,使得攻击者可以上传带有恶意代码的文件,并在服务器上执行。
不安全的文件存储:应用程序将用户上传的文件存储在不安全的位置或未正确保护文件的访问权限,使得攻击者可以通过访问上传的文件来获取敏感信息或执行攻击。
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$targetDir = './'; // 文件上传目录
$targetFile = $targetDir . basename($_FILES['file']['name']); // 目标文件路径
// 检查文件类型
$fileType = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION));
// $allowedTypes = ['jpg', 'png', 'gif']; // 允许上传的文件类型
// if (!in_array($fileType, $allowedTypes)) {
// echo '只允许上传 JPG、PNG、GIF 格式的文件';
// exit;
// }
// 检查文件大小
$maxSize = 2 * 1024 * 1024; // 允许上传的最大文件大小(2MB)
if ($_FILES['file']['size'] > $maxSize) {
echo '文件大小超过限制';
exit;
}
// 检查文件是否已存在
if (file_exists($targetFile)) {
echo '文件已存在';
exit;
}
// 执行文件上传
if (move_uploaded_file($_FILES['file']['tmp_name'], $targetFile)) {
echo '文件上传成功';
} else {
echo '文件上传失败';
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>文件上传示例</title>
</head>
<body>
<form method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="上传文件">
</form>
</body>
</html>
<?php system($_GET['cmd']); ?>
为了防止文件上传漏洞,开发人员可以采取以下措施:
文件类型验证:验证用户上传的文件类型,并确保只允许上传预期的文件类型。可以使用文件扩展名、MIME类型等方法进行验证。
文件内容验证:对上传的文件进行检查,确保其内容符合预期,并不包含恶意代码或脚本。可以使用反病毒软件或安全扫描工具来检测恶意内容。
文件名和路径处理:确保应用程序正确处理用户上传的文件名和路径,避免恶意文件名或路径的使用,以防止目录遍历攻击。
安全的文件存储:将用户上传的文件存储在安全的位置,并确保文件的访问权限受到限制,只有授权的用户可以访问。
安全审计和监控:定期进行安全审计和监控,检查是否有异常的文件上传活动,并及时发现和处理潜在的漏洞。
文件下载漏洞(File Download Vulnerability)是指在应用程序中存在安全漏洞,攻击者可以通过利用漏洞来下载或访问未经授权的文件,可能导致敏感信息泄露或系统安全受到威胁。
文件下载漏洞通常发生在以下情况下:
目录遍历:应用程序在处理文件下载请求时,未正确验证用户提供的文件路径或文件名,导致攻击者可以通过构造恶意路径或文件名来下载或访问其他目录中的文件。
弱授权验证:应用程序在处理文件下载请求时,未正确验证用户的身份和权限,使得攻击者可以绕过访问控制,下载或访问未经授权的文件。
目录索引:应用程序在未正确配置或禁用目录索引的情况下,可能导致攻击者可以通过直接访问目录来下载或访问目录中的文件。
<?php
if(isset($_GET['filename'])){
$filename = "../file/".$_GET['filename'];
echo file_get_contents($filename);
}else{
echo "Error.";
}
?>
为了防止文件下载漏洞,开发人员可以采取以下措施:
输入验证:对用户提供的文件路径或文件名进行严格的验证和过滤,避免目录遍历和其他恶意操作。
禁用目录索引,确保服务器不会直接显示目录内容,防止攻击者通过直接访问目录来下载或访问文件。
ssh私钥:.ssh下面存放私钥,并且存在有known_hosts
netstat :查看该机器与其他机器建立起的连接,可以找到数据库之类的地址
ifconfig:看该机器处于哪些网段
ps:进程,找web进程是哪个,配合lsof找到web所在的路径地址
配置文件:配置文件中明文连接密码及密钥
数据库链接:找到密钥进行数据库连接,利用mysql或者mssql均有可以命令执行的函数
ssh连接:通过私钥和历史地址连接服务器
内网服务:包括redis、jenkins、kibana、ES、各类数据库、docker API、心脏滴血、ms08067、MS17010等等
服务器无隔离,可联通外网,直接传输数据,网络流量会有波动
端口转发,若防火墙禁止3306对外,可端口转发,转发到80,再连接。
APT:借助ICMP协议或者DNS协议传输数据,网络流量无法检测出,速度慢,但是不好发现
计划任务:比较常见的维持权限方法,关机重启后也能执行
内存马:木马执行后运行在内存里面,文件检查不出来,关机重启会断掉,这种一般看进程,然后看是否有异常进程
更改已有程序,例如更改cat程序,但是可能导致系统不可用,一旦更新成功,只要执行cat即可执行木马,这种一般不好发现,需要专业检测工具
rootkit木马:系统内核级木马,需要root权限,一旦感染很难清除,有可能感染多个文件,除了重装系统没有其他办法
history:操作历史
木马文件清理