0x01 前言
个性化常见的SQL注入态度,记录自己的学习。
0x02 联合
联合注入的关键字是union
SQL中联合注入的原理是通过连接两个表进行注入攻击,并使用union select关键字进行连接查询。
那么为什么我们通常只在标题中写一件事呢?
因为
$sql=\’select * from ctfshow_user where pass=\'{$password}\’ and username=\'{$username}\’;\’;
然后,当您关闭上一条语句并运行查询时,它已经是一个表,因此您可以直接连接到它。
用户名=-1\’ 组合选择1,2,3–+pass=1
成为
$sql=\’select * from ctfshow_user where pass=\’1\’ and username=\’-1\’ Union select 1,2,3–+\’;\’;
如果成功,连接两个句子
这个结果也表明,如果列相同,就可以进行进样,并且不需要检查每列的顺序。
像这样编写完整的注入语句很困难,因此我们将使用子查询来连接SQL 语句。
?id=-1\’ Union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=\’ctfshow\’),3–+
我在这里说一点。
0x03 group_concat和concat
最常用的就是group_concat和concat。以下是两者的区别:
组连接
简单来说,这个功能就是用来垂直连接事物的。
+————+————+————+
| 学生证|
+————+————+————+
| 70.5 | 1
| 98.5 |
| 33.0 |
| 98.0 |
| 60.0 |
| 59.5 |
| 33.0 |
| 68.0 | 3
| 99.0 |
| 67.0 |
| 23.0 |
| 56.0 |
| 72.0 |
| 81.0 |
| 37.0 |
| 56.0 |
| 43.0 |
| 79.0 |
| 80.0 |
| 92.0 |
+————+————+————+
20 行组(0.04 秒)
如果您使用group_concat() 函数查询列名称,您将看到Score、student_id 和course_id。
何时使用它?当出现回声时。
子查询返回多行
Concat 进行水平连接,即连接您查询的内容和您连接的符号。
?id=-1\’ Union select 1,concat(0x3d,(select group_concat(column_name) from information_schema.columns where table_name=\’flag\’),0x3d),3–+
0x3d 是“=”,主要用于错误注入。
0x04 宽字节
如何检查我是否有宽字节注入?
这是传输符号\\,它影响\’的终止并影响注入。
此时,php会根据数据库中的编码自动确定要使用的编码。
您可以使用?php $m=\”word\”; 来确定这一点
输出值3表示UTF-8编码,输出值2表示GBK编码。
当MySQL数据库使用宽字节(GBK)编码时,两个字符被视为一个汉字(前面的ASCII码必须大于128才能达到汉字范围)(如%df))。
然后就可以正常解析转义字符并正常关闭SQL语句进行SQL注入了。
如果有转义字符,请考虑宽字节注入。
成功
以上#CTF中常用的SQL注入(一)和宽字节相关内容源网络的信息仅供参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92918.html