1.SQL注入

漏洞成因:

  1. 可控变量
  2. 变量会带入数据库查询
  3. 变量不存在过滤或者变量过滤不严格

注入流程

  1. 判断是否有注入点
  2. order by 判断字段数量
  3. union select 报错查看注入点
  4. 使用函数查看数据库相关信息

注入分类:

  • 注入类型:报错、联合、盲注(布尔,时间)、堆叠
  • 注入提交方式:get,post,cookie,文件头

堆叠注入判断

"id=1"正常

试试"id=1a",假设报错,说明数据没有被强转

在试试"id=1;"假设没有报错,说明";"没有被代入查询,而是当做了sql语句的结束符

那可能存在堆叠

sql注入写shell条件

知道web服务器的绝对路径

数据库具有root权限

secure_file_priv函数没有具体值

为null时,表示不允许导出导入,无法提权

为/tmp/时,限制导入导出只能在/tmp目录下,无法提权

没有具体值,不限制导入导出

提高盲注速率

  1. 提高sqlmap线程数:--threads
  2. 使用python盲注脚本
  3. 若盲注主机为window,且dns服务器配置有问题,可以使用dnslog注入

如何突破注入时字符被转义

  1. 宽字节注入
  2. hex编码绕过

盲注:

判断是否存在盲注

  1. 查看返回数据包字节长度大小判断
  2. 借助sleep函数判断

布尔盲注--逻辑判断

常用函数:regexp,like,ascii,left,ord,mid,substr

substr()函数是截取字符串的函数

regexp从左至右进行匹配,如果匹配成功则返回1,匹配失败则返回0

like函数:匹配字符串,与regexp相似

时间盲注--延时判断

常用函数:if,sleep

if(expr1,expr2,expr3);表达式

如果expr1判断为真,则返回expr2值,否则expr3的值

sleep被禁用可以使用benchmark()函数

宽字节注入

产生原因:

数据库使用了宽字符集(如GBK)但web没有考虑,例如在web层0x3f27是两个字符(?')当php中开启addslash时,会对0x27转义,因此变成0x3f5c27,数据进入数据库,由于0x3f5c是其他字符,所以转义字符就会被带走,从而单引号实现逃逸

根本原因:

客户端和连接层使用字符集不同,转换函数使用不当(iconv等)

解决方案:

统一使用字符集,对数据进行正确转义,如 mysql_real_escape_string+mysql_set_charset 的使用

报错注入:

定义:

报错注入就是利用了数据库的某些机制,人为地制造错误条件,使得查询结果能够出现在错误信息中。

常用函数:

  1. updatexml:利用插入不符合函数格式的语句并拼接查询语句从而通过函数报错达到我们查询内容的目的;
  2. extractvalue:利用插入不符合函数格式的语句并拼接查询语句从而通过函数报错达到我们查询内容的目的;

以~,#开头的内容不是xml格式的语法,就会报错,但是会显示无法识别的内容是什么

  1. floor:是一个取整函数,原理:group by在向统计表插入数据时,由于rand()多次计算导致插入统计表时主键重复,从而报错

mysql的网站注入5.0以上和5.0以下有什么区别?

  1. mysql5.0以下没有information_schema库,不能列表名,只能暴力跑表名
  2. mysql5.0以下是多用户单操作
  3. mysql5.0以上是多用户多操作

udf提权

原理:

获取webshell是一个低权限用户,然后UDF提权就是利用MySql允许扩展自定义函数的特性,将webshell的权限变成和mysql运行权限一致

利用

利用root高权限,创建一个可以调用cmd的udf.dll动态链接库,导出文件后可以直接命令框使用cmd

sqlmap udf 提权:--udf-inject

MOF提权

原理:

mof的作用是每隔五秒监控一次进程的创建和死亡,因此可以在mof中写入恶意代码,进行提权

利用条件:

  1. 操作系统版本低于 win2008
  2. 可以通过mysql导出文件%SystemRoot%\System32\Wbem\MOF 文件夹下的MOF文件中,即需要mysql root权限以及secure_file_priv的值为空或者是%SystemRoot%\System32\Wbem\MOF路径

过程

将mof上传至任意可读可写目录下

然后使用sql语句将系统当中默认的nullevt.mof给替换掉。进而让系统执行我们这个恶意的mof文件。

mof编译方法:

  1. 将MOF文件执行为命令行参数及Mofcomp.exe文件
  2. 使用IMofCompiler接口和$CompileFile方法
  3. 拖放到 %SystemRoot%\System32\Wbem\MOF 文件夹下的MOF文件中

MSsql提权

利用xp_cmdshell提权

原理:

xp_cmdshell允许在数据库服务器上执行操作系统级别的命令。当具有足够权限的用户在 SQL Server 中执行 xp_cmdshell 时,它会调用操作系统的命令解释器(例如,Windows 上的 cmd.exe)并执行指定的命令。通常用于执行一些与操作系统相关的任务,例如运行外部程序、执行文件操作、管理文件系统等。

提权过程

xp_cmdshell 默认在 mssql2000 中是开启的,在 mssql2005 之后的版本中则默认禁止。如果用户拥有管理员 sa 权限则可以用 sp_configure 重新开启它。

EXEC sp_configure 'show advanced options', 1

RECONFIGURE;

EXEC sp_configure 'xp_cmdshell', 1;//若为零则为关闭

RECONFIGURE;

调用xp_cmdshell执行系统权限

EXEC master.dbo.xp_cmdshell '命令'

利用sp_oacreate提权

原理

当xp_cmdshell被删除时,可以利用sp_oacreate(奥普瑞特)提权,他是用于在sql中创建和实例化com对象的存储过程中,利用创建的com对象中存在的漏洞或特权操作,就能获取更高权限

默认也是关闭状态

EXEC sp_configure 'show advanced options', 1;

RECONFIGURE WITH OVERRIDE;

EXEC sp_configure 'Ole Automation Procedures', 1;//若为零则为关闭

RECONFIGURE WITH OVERRIDE;

sp_oacreate执行命令是无回显的,使用dnslog平台进行判断

sql注入绕waf

  1. 注入空白字符:攻击者可以在注入语句中使用空格、Tab键、换行符等空白字符,从而绕过WAF的检测。
  2. URL编码:攻击者可以使用URL编码技术,将语句中的特殊字符进行编码,从而绕过WAF的检测。例如,将单引号编码为%27,将双引号编码为%22等。
  3. Unicode编码:攻击者可以使用Unicode编码技术,将注入语句中的特殊字符进行编码,从而绕过WAF的检测。例如,将单引号编码为%u0027,将双引号编码为%u0022等。
  4. 拆分注入:攻击者可以将注入语句拆分为多个短语或子句,从而绕过WAF的检测。例如,将SELECT关键字分成两个部分,使用空白字符分隔,如SEL ECT等。
  5. 盲注:攻击者可以使用盲注技术,通过检查应用程序的响应来获取有关注入结果的信息,从而绕过WAF的检测。盲注技术可以分为布尔盲注和时间盲注两种。

sql预编译

原理:将sql语句中的值用占位符替代,可以视为将sql语句模板化或者说参数化。一次编译、多次运行,省去了解析优化等过程。

sql注入防范:

  1. 参数化查询:使用参数化的SQL查询,而不是动态拼接SQL查询字符串。这可以防止攻击者注入恶意代码,因为参数值会被视为数据而不是代码。
  2. 数据校验:对于输入数据,应该对其进行校验和过滤。例如,对于数字字段,应该只接受数字输入;对于字符串字段,应该过滤掉特殊字符和SQL关键字。
  3. 最小权限原则:应该使用最小权限原则来限制应用程序的访问权限。这样,即使攻击者成功地注入恶意代码,他们也只能访问应用程序有权访问的数据。
  4. 数据加密:对于敏感数据,应该使用数据加密来保护其安全性。这可以防止攻击者通过窃取数据库中的数据来获取敏感信息。
  5. 定期更新:应该定期更新数据库软件和应用程序代码,以修复已知的安全漏洞并增强系统的安全性。

2.文件包含

造成原理

文件包含的代码文件被写成了一个变量,且这个变量可以由前端用户传进来,这种情况下,如果没有做足够的安全考虑,则可能会引发文件包含漏洞。 攻击者会指定一个“意想不到”的文件让包含函数去执行,从而造成恶意操作。

php相应函数

  1. include():找不到包含文件就产生告警,继续运行
  2. require():找不到包含文件就停止运行
  3. include_once():与include类似,但只会包含一次
  4. require_once():与require类似,但只会包含一次

php伪协议

  1. file:// 用于访问本地文件系统
  2. php://filter 读取文件源码

    常用于读取文件源码,使用文件包含函数包含文件时,文件中的代码会被执行,如果想要读取文件源码,可以使用base64对文件内容进行编码,编码后的文件内容不会被执行,而是展示在页面中,我们将页面中的内容使用base64解码,就可以获取文件的源码了
  3. php://input 任意代码执行

    php://input 可以访问请求的原始数据,配合文件包含漏洞可以将post请求体中的内容当做文件内容执行,从而实现任意代码执行
  4. data://text/plain 任意代码执行

    协议格式: data:资源类型;编码,内容

    data://协议通过执行资源类型,使后面的内容当做文件内容来执行,从而造成任意代码执行
  5. zip:// 配合文件上传开启后门

    zip://协议用来读取压缩包中的文件,可以配合文件上传开启后门,获取webshell将shell.txt压缩成zip,再将后缀名改为jpg上传至服务器,再通过zip伪协议访问压缩包里的文件,从而链接木马

文件包含分类

  1. 本地包含:仅能够对服务器本地的文件进行包含,主要可以用与读取本地敏感信息
  2. 远程包含:能够通过url地址对远程的文件进行包含

系统的敏感信息

Linux

/etc/passwd:包含本地用户的账户信息。

/etc/group:包含用户组的信息。

/etc/shadow:保存本地用户密码哈希值的文件。

/etc/sudoers:保存 sudo 命令权限的文件。

/proc/net/tcp:包含当前正在运行的 TCP 连接信息。

/var/log/auth.log:包含系统中用户认证和授权的日志信息。

应用程序配置文件:攻击者可能会尝试读取应用程序的配置文件,以获取数据库连接字符串等信息。

Windows

C:\Windows\system32\config\SAM:包含本地账户的哈希密码值。

C:\Windows\system32\config\SYSTEM:包含系统的配置信息。

C:\inetpub\wwwroot\web.config:包含 IIS 网站的配置信息。

C:\Program Files (x86)\MySQL\MySQL Server 5.7\my.ini:包含 MySQL 数据库的配置信息。

3.文件上传

漏洞成因

  1. 没有对上传的文件进行足够的验证和过滤。没有对上传的文件类型、大小、名称和内容进行严格的验证和过滤,从而允许攻击者上传任意类型、任意大小和任意内容的文件
  2. 没有对上传文件的保存路径和文件名进行控制。将上传的文件保存在与Web根目录相同的目录下,或者将上传的文件名保存为原始的文件名,从而允许攻击者通过上传包含恶意代码的脚本文件或具有危险文件名的文件来执行攻击。
  3. 没有对上传文件的访问权限进行限制。允许上传的文件在上传后具有完全的访问权限,从而允许攻击者通过访问上传的文件来获取或修改敏感数据。

绕过方法:

  1. 禁用js绕过
  2. 修改文件类型绕过
  3. 大小写,双写绕过
  4. 文件头绕过
  5. 二次渲染绕过
  6. 条件竞争绕过
  7. 00截断绕过:条件:php版本要小于5.3,魔术引号关闭(白)
  8. 配合解析漏洞绕过(白)
  9. 配合文件包含漏洞(白)

文件上传相关日志

  1. 文件上传日志:Web 服务器或应用服务器上的访问日志中可能包含上传文件的信息,例如上传时间、上传文件名称、上传文件大小等。
  2. 访问控制日志:如果应用程序实现了文件上传的访问控制机制,记录访问控制的日志可能包含了上传文件的信息,例如上传人员、上传时间、上传 IP 地址等。
  3. 安全审计日志:如果使用了安全审计工具,可以记录文件上传操作的详细信息,例如上传文件的路径、上传文件的内容等。

防护方法

  1. 文件类型和大小限制:在服务器端对上传的文件进行检查,确保上传的文件类型、大小和数量符合预期。可以使用白名单方式进行限制,只允许上传特定类型的文件。
  2. 检查文件内容:在服务器端对上传的文件进行检查,确保它们不包含恶意代码或病毒等危险内容。可以使用杀毒软件或安全扫描工具来帮助检查上传的文件。
  3. 重命名文件:将上传的文件保存在一个新的随机生成的文件名下,而不是使用用户提供的文件名。这样可以避免攻击者通过伪造文件名来欺骗用户。
  4. 存储位置:将上传的文件保存在与网站主目录分离的位置上,以避免攻击者上传Webshell等恶意脚本,并能够防止攻击者直接访问上传的文件。
  5. WAF防护产品

4.XSS

原理:

攻击者通过注入恶意脚本代码,将攻击者的代码注入到网站的页面中,当用户访问被攻击的页面时,就会执行这些恶意代码,从而导致攻击者获取用户的敏感信息

分类

  1. 反射型XSS:恶意脚本被注入到URL参数中,经后端程序处理后直接输出(使用短网址)
  2. 存储型XSS:恶意脚本被注入到数据库中,经后端程序处理后保存
  3. dom型XSS:攻击者通过修改页面的DOM节点,从而实现攻击的目的(不经过服务器,前端代码的利用)

xss利用

  1. 窃取用户cookie,从而获取用户信息
  2. 网页挂马:通过xss插入恶意js脚本(例如键盘记录功能)用户访问页面就同时执行恶意js
  3. 强制弹出广告页面

    dom树标签

绕过方法

  1. 大小写绕过
  2. 双写绕过
  3. 关键字绕过
  4. 转换编码

xss常出现的地方

  1. 富文本编辑器
  2. 站点内用户之间私信
  3. 个人资料编辑
  4. 客服对话窗口
  5. 订单流程

防御:

  1. 输入过滤

    a. 输入是否仅仅包含合法的字符

    b. 输入字符串是否超过最大长度限制

    c. 输入如果为数字,数字是否在指定的范围

    d. 输入是否符合特殊的格式要求,如E-mail地址、IP地址等
  2. 输出转码:将HTML实体化编码
  3. 黑白名单
  4. 设置http-only(限制cookie劫持)php版本大于5.2

5.csrf

跨站请求伪造:利用用户在已登录的情况下访问恶意网站时,绕过同源策略,以用户身份执行未经授权的操作

同源:协议,ip,端口一致

同源策略浏览器在执行脚本前,会判断脚本是否与打开的网页是同源的,判断协议、域名、端口是否都相同,相同则表示同源。其中一项不相同就表示跨域访问

原理:

攻击者通过跨站请求(利用url短网站诱导点击),利用尚未失效的身份认证信息,以合法的用户身份进非法操作,简单来说盗用你的身份信息,向第三方网站发送恶意请求,包括利用你的身份发邮件,发短信,交易转账等。

类型

  1. GET类型的CSRF:通过构造一个包含受害网站的请求参数的URL,然后将这个URL发送给用户进行访问,当用户在浏览器中点击该链接时,浏览器会自动发出带有参数的GET请求
  2. POST类型的CSRF:构造一个包含受害网站的请求参数的表单,然后将这个表单发送给用户进行填写,当用户在浏览器中提交表单时,浏览器会自动发出带有参数的POST请求

挖掘

  1. 抓取正常请求数据包,查看是否存在referer字段或者token
  2. 如果有referer字段,删除再提交,若提交有效,则存在referer字段
  3. 使用相对应的检测工具,例如:CSRFTester

防御

  1. 验证HTTP Referer字段
  2. 在请求地址中添加token并验证
  3. 在HTTP头中加入自定义属性并验证
  4. 增加二次验证机制

与xss的区别

  1. CSRF需要用户先登录网站A,获取cookie; XSS不需要登录
  2. CSRF是利用网站A本身的漏洞,去请求网站A的api; XSS是向网站A注入JS代码,然后执行JS里的代码,篡改网站A的内容。
  3. XSS是利用合法用户获取其信息,而CSRF是伪造成合法用户发起请求

hvv蓝初面试常见漏洞问题(上)的更多相关文章

  1. Web中间件 - 常见漏洞总结

    *文章来源:https://blog.egsec.cn/archives/472 *本文将主要说明:Web中间件常见漏洞的产生原因以及修复方案 什么是Web中间件? 百度百科是这样解释的:中间件是介于 ...

  2. Windows XP与Windows 7系统常见漏洞

    1.Windows XP系统常见漏洞 Windows XP系统常见的漏洞有UPNP服务漏洞.升级程序漏洞.帮助和支持中心漏洞.压缩文件夹漏洞.服务拒绝漏洞.Windows Media Player漏洞 ...

  3. Android常见漏洞

    Android常见漏洞 漏洞名称: Log敏感信息泄露 漏洞描述: 程序运行期间打印了用户的敏感信息,造成泄露 修改建议: 建议禁止隐私信息的log 漏洞名称: web https校验错误忽略漏洞 漏 ...

  4. android WebView详解,常见漏洞详解和安全源码

    这篇博客主要来介绍 WebView 的相关使用方法,常见的几个漏洞,开发中可能遇到的坑和最后解决相应漏洞的源码,以及针对该源码的解析.  转载请注明出处:http://blog.csdn.net/se ...

  5. 详解Javaweb中常见漏洞的防御

    上一篇给大家介绍了SpringMVC中常见的客户端数据输入点,这一篇给大家讲解下java中常见漏洞的防御方法. 0x01.sql注入 下面我们就用利用SpringMVC自带的数据库操作类jdbcTem ...

  6. LeetCode面试常见100题( TOP 100 Liked Questions)

    LeetCode面试常见100题( TOP 100 Liked Questions) 置顶 2018年07月16日 11:25:22 lanyu_01 阅读数 9704更多 分类专栏: 面试编程题真题 ...

  7. Web中间件常见漏洞总结

    一.IIS中间组件: 1.PUT漏洞 2.短文件名猜解 3.远程代码执行 4.解析漏洞 二.Apache中间组件: 1.解析漏洞 2.目录遍历 三.Nginx中间组件: 1.文件解析 2.目录遍历 3 ...

  8. Linux环境下常见漏洞利用技术(培训ppt+实例+exp)

    记得以前在drops写过一篇文章叫 linux常见漏洞利用技术实践 ,现在还可以找得到(https://woo.49.gs/static/drops/binary-6521.html), 不过当时开始 ...

  9. PHP安全之道3:常见漏洞和攻防

    第一篇 SQL注入 安全配置和编程安全并不是万全之法,攻击者往往可以通过对漏洞的试探找到新的突破口,甚至0days. 下面总结以下常见漏洞,在日常开发维护工作中可以留意. *聊聊老朋友:SQL注入漏洞 ...

  10. java代码审计中的一些常见漏洞及其特征函数

    文章来源:https://xz.aliyun.com/t/1633 最近在先知上看到之前有篇关于java代码审计的文章总结的蛮好,记录以下特征函数,方便查阅,同时自己也会将在平时代码审计过程中积累的函 ...

随机推荐

  1. ovs-dpdk:revalidator源码解析

    revalidator是做什么的?需要知道哪些东西? 有关于revalidator需要弄明白的是以下三个问题: 通过ovs-vsctl list open_vs可以看到other_config里面有两 ...

  2. 用声网 Android UIKit 为实时视频通话应用添加自定义背景丨声网 SDK 教程

    使用声网 SDK 和 UIKit 创建视频推流应用非常简单,而且声网还有许多功能,可以提高视频通话的质量和便利性.例如,我们可以在视频通话过程中使用虚拟背景,为视频通话增添趣味性. 我们可以通过以下三 ...

  3. 声网推出首个完整实时合唱解决方案 即将上线“咪哒”全国线下K歌房

    4月20日,声网Agora宣布对实时合唱技术方案全面升级,帮助国内知名迷你KTV品牌"咪哒"实现国内首个支持多终端.多人合唱.高音质的完整实时合唱解决方案的落地,结束了国内K歌行业 ...

  4. openfoam并行通信探索(一)

    前言 最近在忙,快一两周没更新了,今天说下如何实现openfoam内的并行通信 为什么要并行通信 说到并行通信大家不要害怕啊,只是不同核之间数据传递,比如说咱们仿真开16个核,3号计算单元对4号计算单 ...

  5. Unity Joint用法及案例

    目录 什么是Joint 有哪些Joint Joint计算原理 自由度配置 Axis与Anchor Limit与Spring Drive与Target Joint应用案例 车轮 旋转 悬挂系统 吊臂 旋 ...

  6. 手把手带你从0完成医疗行业影像图像检测三大经典模型InceptionV3-RestNet50-VGG16(附python源代码及数据库)——改变世界经典人工智能项目实战(一)手把手教学迁移学习

    目录 1.迁移学习简介 2.项目简介 3.糖尿病视网膜病变数据集 4.考虑类别不平衡问题 5.定义模型质量 6.定义损失函数 7.预处理图像 8.搭建迁移学习网络 VGG16 迁移学习网络 Incep ...

  7. window.onload / onscroll/onresize 事件

    onload当文档加载完成后执行一些操作 window.onload = function(){ console.log("页面加载完成") } onscroll当页面发生滚动时执 ...

  8. 在 Linux 内公网、云服务器搭建一套 K8s 集群

    前言 本文讲述如果在 Linux 搭建内/公网 Kubernetes 集群的详细步骤,解决搭建过程中的问题. 准备工作 Linux CentOS 7.x 两台及以上,本文用的 7.6 本文配置默认是在 ...

  9. go微服务框架kratos学习笔记三(构建单独的http或者grpc demo项目)

    go微服务框架kratos学习笔记三(构建单独的http或者grpc demo项目) 前面两篇跑通了demo项目,和大概了解了kratos demo整体结构,本篇分别构建一个http和一个grpc微服 ...

  10. 如何在Solidity中建立DAO(去中心化自治组织)?

    本文将帮助您理解 DAO 的概念,并帮助您构建一个基本的 DAO. 什么是 DAO? 您可以将 DAO 视为基于互联网的实体(比如企业),由其股东(拥有代币和比例投票权的成员)共同拥有和管理.在 DA ...