网络安全入门过程教程:宽字节注入漏洞

94 阅读3分钟

image.png

1 什么是宽字节注入漏洞

所谓宽字节漏洞,简单的说就是对用户输入的内容不谨慎,导致有漏洞代码注入。比如,章三创建一个用户名为:admin。 李四创建用户名:Admin。 区别在于A的字母大小写。如没有做大小写处理,就会导致有2个相同的账号在我们系统中。

2 漏洞的危害

  1. 可以通过这种漏洞绕过应用程序的安全检查,执行恶意代码或更改应用程序的数据库。
  2. 攻击者可以利用这种漏洞来获取敏感信息,如用户名和密码等。

3 实战过程

实验靶场是hack the box - LoveTok 来演示宽字节注入漏洞过程。

3.1 信息收集

image.png

1.从网站中只可以看出只能点击最下方的按钮,点击后会有一个get参数format=r, 且页面上会根据这个参数输出不同的时间。

2.观看没有session记录

3.网络上无其他接口请求

4.查看js代码并无与数据库有交互

5.后端使用的是php语言

3.2 漏洞分析

根据以上信息可以得知是一个静态页面,且根据参数format改变,中间的时间也会跟着变化。因为是静态无第三方交互。因此可以排除sql注入、xss、ssrt 这些手段。剩下的便可考虑ssti、宽字节漏洞。在操作中可以发现,format主要是控制时间的格式,因此应该在后端做了处理,因此可以排除ssti,尝试宽子节漏洞。

3.3 漏洞利用

得到以上信息后,尝试输入发现 '、"、\ 这些特殊符号做了过滤处理,使用的是addslashes函数,只要绕过这个过滤函数即可为所欲为。

0x01 PHP绕过addslashes,

博主也是百度的,谁知道那么多语言写法呢?是吧。根据以上过滤,发现可以使用${函数} 这个方法进行绕过addslashes函数,可以尝试输入:format=${phpinfo()} 发现可以看到php版本信息。因此这个方法是可行的。

image.png

0x02 宽子节漏洞利用

那么就可以尝试使用以下命令来为所欲为了:

format=${${eval($_GET[cmd])}}&cmd=echo(system('ls /'));

参数 cmd 是需要执行的命令,想怎么玩就怎么玩, 命令输入在system('这里是命令'),以上语句将会执行查看服务器的根目录。

image.png

在此我们能看到flag文件,下一步使用命令:

format=${${eval($_GET[cmd])}}&cmd=echo(system('cat /flagkloyN'));

flag到手。

image.png

任务结束,这就是一个简单的宽子节漏洞演示。

4 漏洞的防范措施

针对这种漏洞的措施包括但不限于:

  1. 使用安全的编码方式来避免宽字节注入漏洞,如UTF-8编码。
  2. 对所有输入数据进行验证和过滤,确保不接受危险的字符或命令。
  3. 使用参数化查询,避免将输入数据直接插入到SQL查询中。
  4. 定期更新应用程序和数据库系统的安全补丁,以修复已知的漏洞。
  5. 实施严格的安全策略和访问控制,确保只有授权用户才能访问敏感信息或执行危险操作。
  6. 监控应用程序和数据库系统的日志,及时发现并应对攻击行为。