宽字节注入
字节概念
单字节(Single-byte):单字节是指每个字符使用一个字节(8位)进行表示的字符编码方式。在单字节编码中,每个字符都占用相同的存储空间,这种编码方式适用于字符集较小的情况。常见的单字节编码包括 ASCII 编码和 ISO-8859 编码系列。
多字节(Multi-byte):多字节是指每个字符使用多个字节进行表示的字符编码方式。在多字节编码中,不同的字符可以占用不同长度的字节,可以表示更多的字符。常见的多字节编码包括UTF-8和GB2312编码。
宽字节(Wide character):宽字节是指每个字符使用固定长度的两个字节进行表示的字符编码方式。宽字节编码通常用于Unicode字符集的表示。在宽字节编码中,每个字符都占用相同的存储空间,通常使用16位表示一个字符,可以表示更多的字符。常见的宽字节编码包括UTF-16和UCS-2编码。
在中国,常用的宽字节有:GB2312、GBK、GB18030。
注:严格来说,GB18030 不算宽字节,但是兼容 GBK、GB18030。
MySQL 宽字节
在开发网站过程中,一些程序员为了防止 SQL 注入,会使用反斜杠 \ ...
二次注入
二次注入原理
二次注入的原理:在第一次进行数据库插入数据的时候,仅仅只是使用了 addslashes 或者是借助 mysqli_real_escape_string 对其中的特殊字符进行了转义,但是 addslashes 有一个特点就是虽然参数在过滤后会添加 \ 进行转义,但是 \ 并不会插入到数据库中,在写入数据库的时候还是保留了原来的数据。
如下代码所示:
12345678910<?phperror_reporting(0);$con = new mysqli();$con->connect('localhost', 'root', 'root', 'security', '3306');$username = mysqli_real_escape_string($con, $_GET[1]);$pass = mysqli_real_escape_string($con, $_GET[2]);$sql = "insert into users (usernam ...
MySQL 文件读写
如果数据库的配置权限不当,攻击者可以通过 SQL 语句读写文件来进行进一步攻击以获取更多的权限,如读取网站配置文件、修改注册表文件、写入木马等。
读写权限判断/设置
MySQL 读写关键字段:secure_file_priv
secure_file_priv 关键值:
取值
含义
null
表示不允许读取/写入
dir
表示读取/写入限制在特定目录下
空值
表示读取/写入可以在任意目录下
权限查看:
123456789101112131415mysql> select @@secure_file_priv;+--------------------+| @@secure_file_priv |+--------------------+| NULL |+--------------------+1 row in set (0.00 sec)mysql> show variables like "secure_file_priv";+--------- ...
XSS-Game
本篇文章参考:https://www.sqlsec.com/2020/01/xss.html
在很久很久以前,就接触到了 XSS 部分的内容,当时用的 Github 上下载的源码进行的,最近打算翻新一下这部分知识。
但是 Github 上的源码好像下架了,这里使用国光大佬的整理过的。
项目地址:https://github.com/sqlsec/xssgame
直接解压源码到 HTTP 服务的目录下,浏览器直接访问即可,无需配置数据库等信息:
Level-1
漏洞源码如下:
1234<?php ini_set("display_errors", 0);$str = $_GET["name"];echo "<h2 align=center>欢迎用户:".$str."</h2>";
源码分析:
ini_set("display_errors", 0);:用于设置 PHP 的错误显示级别为 0,这意味着将不会在页面上显示任何 PHP 错误信息 ...