CTF之web学习记录 – SQL注入进阶
CTF之web学习记录 – SQL注入检测绕过
概述
SQL注入就是指web应用程序对用户输入数据的合法性没有判断,没有进行有效的字符过滤,前端传入后端的参数是攻击者可控的,并且参数被带入数据库查询,攻击者可以通过构造不同的SQL语句来实现对数据库的任意操作。
基本原理
所谓sql注入的基本原理,也就是说sql注入是怎么发生的,我们以下面php代码中构造sql查询语句的方式为例。
<?php
$id = $_GET['id'];
$query = "select * from users where user_id = $id;";
......
......
?>
如上面代码所示,其实就产生了整型sql注入,当我们输入1 or 1 = 1
就会暴露出所有用户的信息,从而偏离了原来程序员所想要实现的效果或者说他并不希望用户可以这样做。简而言之,sql注入的存在原因,其一是没有对用户的输入进行任何检查和过滤,其二是在后端直接拼接了sql语句,没有使用更安全的函数。因此使得用户可以控制sql语句的构造,通过一定的拼接技巧使得暴露出数据库中的信息。
MySql注入基本知识
information_schema
information_schema
是MySql5.0版本后默认在数据库中存在的一个重要数据库,后续我们泄露数据名、表名等一系列操作都需要借助该数据库。记住该数据库下的三个表名及其重要字段,如下代码所示。
# table 1
schemata --> 存储该用户创建的所有数据库的库名
schema_name --> 记录数据库库名的字段
# table 2
tables --> 存储该用户创建的所有数据库的库名和表名
table_schema --> 记录数据库库名的字段
table_name --> 记录数据库表名的字段
# table 3
columns --> 存储该用户创建所有数据库的库名、表名和字段名
table_schema --> 记录数据库库名的字段
table_name --> 记录数据库表名的字段
column_name --> 记录表中的字段名的字段
如下截图所示,是以dvwa中数据库作为对象进行的展示。