SQL注入——SQL注入方法

Sql注入读写文件

  • 权限影响
  •  secure_file_priv
  • 1. secure_file_priv=
  • 代表对文件读写没有限制
  • 2. secure_file_priv=NULL
  • 代表不能进行文件读写
  • 3. secure_file_priv=d:/phpstudy/mysql/data
  • 代表只能对该路径下文件进行读写
  • my.ini文件修改
  • 读文件 
  • load_file()
  • 作用
  • 1. 读取敏感配置   (需要你知道路径)
  • 2. 读取网络文件   (间接回显盲注数据   带外攻击    dns   http)
  • 写文件
  • Into Outfile
  • into Dumpfile   
  • 写二进制文件使用
  • 路径
  • Phpstudy
  • phpstudy/www  phpstudy/phptu…/www
  • Wamp
  • wamp/www
  • Xampp        xampp/htdocs                   
  • Appser        appser/www
  • 写入一句话木马条件
  • 写权限
  • 需要知道网站绝对路径

1、手工注入

1、常用函数

  • user()
  • 返回当前使用数据库的用户
  • version()
  • 返回当前数据库的版本
  • database()
  • 返回当前使用的数据库
  • concat()
  • 用于将多个字符串连接成一个字符串,SELECT CONCAT('My','S','QL')
  • group_concat()
  • 使用方法:group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])
  • concat_ws()
  • 使用方法:concat_ws(separator, str1, str2, ...),第一个参数为分隔符,把从第二个参数开始的字符拼接起来,并用第一个参数的分隔符隔开。

2、字符串处理常用函数:

  • left()函数和right()函数:
  • 用于截取字符串
  • left(arg1,arg2) :从左边头部开始截取字符串,arg1代表被截取的字符串,arg2截取的位数
  • 语句:select left(database(),3);
  • 返回结果:dva
  • right(arg1,arg2) :
  • 从左边头部开始截取字符串,arg1代表背截取的字符串,arg2截取的位数
  • 语句:select right(database(),3);
  • 返回结果:vwa
  •  substr(),substring(),mid():
  • 用法基本相同,截取字符串的一部分
  • 语句:select substr(database(),1,3);
  • 返回结果:dva

3、判断条件常用函数:

  • if(arg1,arg2,arg3):
  • arg1为判断的条件,arg2是条件为真的返回结果,arg3是条件为假的返回结果
  • 语句:select if(1=1, 'true', 'false')
  • 返回结果:true
  • case when arg1 then arg2 else arg3 end:
  • arg1为判断的条件,arg2是条件为真的返回结果,arg3是条件为假的返回结果
  • 语句:SELECT 1,CASE WHEN 1=1 THEN 'hello' ELSE 'goodbye' END,3 --+

4、常用函数

  • length(arg1) arg1字符串。
  • 语句:select length(database());
  • 返回结果:4

5、常用函数

  • ascii(arg1) arg1为字符。
  • 语句:select ascii(' a ')
  • 返回结果:97

2、二次解码注入

  • 二次注入的原理是我们提交参数到WebServer时,WebServer会自动解码生成单引号而引发注入。
  •  
  • urldecode()
  •  
  • rawurldecode()
  •  
  • 漏洞产生  
  • Admin’--> (转义函数) --> url解码  -->admin\’
  • 转义函数只对  ‘ “ \   这三个有效
  • %61%64%6d%69%6e%27 --》(转义函数)--》 %61%64%6d%69%6e%27 --》url解码 --》admin’

3、宽字节注入

  • 常见函数
  • addslashes()
  • 对单引号(')、双引号(")、反斜线(\)与NULL(NULL字符)进行处理
  • mysql_real_escape_string()
  • mysql_escape_string()
  • Magic_quotes_gpc
  • 自动转义     
  • ‘   “    \ 

  • 避免宽字节注入的产生
  • 应当限定使用mysql_set_charset(GBK)来指定字符集,并且使用mysql_real_escape_string进行转义。
  • Select * from users where id = ‘$id’;
    $id = 1’ --  自动转义   1\’ -- Select * from users where id = ‘1\’ -- ’;
  • 绕过以上函数两种情况
  • 数值型
  • Select * from users where id = $id;    
  • $id = 1 and 1=1 –
  •         使用了gbk编码可以通过宽字节绕过
  • 编码表
发布了36 篇原创文章 · 获赞 130 · 访问量 2061

猜你喜欢

转载自blog.csdn.net/cldimd/article/details/104971199