手机端设计,专业搜索引擎seo技术公司,如何用ftp做网站,素材天下免费素材网0x01 前言
给自己总结一下sql注入的常用姿势吧#xff0c;记录一下学习
0x02 联合
联合注入的关键词是union SQL的union联合注入原理是联合两个表进行注入攻击#xff0c;使用union select关键词来进行联合查询。 那么为什么我们在题目中一般是只写一个呢 因为 $sql 记录一下学习
0x02 联合
联合注入的关键词是union SQL的union联合注入原理是联合两个表进行注入攻击使用union select关键词来进行联合查询。 那么为什么我们在题目中一般是只写一个呢 因为 $sql select * from ctfshow_user where pass {$password} and username {$username};;那么我们在进行闭合之后前面的语句进行查询之后已经算是一个表了所以我们直接衔接就可以了
username-1 union select 1,2,3--pass1变成了 $sql select * from ctfshow_user where pass 1 and username -1 union select 1,2,3--;;成功就把两句连接起来 结果也表明了只要列一样就可以实现注入这也省去了order by的查列 而仅仅这样子是很难写出一个完整的注入语句的所以我们这里使用到了子查询就是在其中在衔接一个sql语句
?id-1 union select 1,(select group_concat(table_name) from information_schema.tables where table_schemactfshow),3--在此也顺便讲讲一个小东西
0x03 group_concat和concat
那就是我们最常用的group_concat和concat这两者的区别在下
group_concat
这个函数是用来连接竖着的东西简单点来说就是我有一个表
------------------------------
| score | student_id | course_id |
------------------------------
| 70.5 | 1 | 1 |
| 98.5 | 1 | 3 |
| 33.0 | 1 | 5 |
| 98.0 | 1 | 6 |
| 60.0 | 2 | 1 |
| 59.5 | 2 | 5 |
| 33.0 | 3 | 1 |
| 68.0 | 3 | 3 |
| 99.0 | 3 | 5 |
| 67.0 | 4 | 1 |
| 23.0 | 4 | 3 |
| 56.0 | 4 | 5 |
| 72.0 | 4 | 6 |
| 81.0 | 5 | 1 |
| 37.0 | 5 | 5 |
| 56.0 | 6 | 2 |
| 43.0 | 6 | 4 |
| 79.0 | 6 | 6 |
| 80.0 | 7 | 2 |
| 92.0 | 7 | 6 |
------------------------------
20 rows in set (0.04 sec)
你运用group_concat()这个函数来查询列名的话就会回显 score,student_id,course_id什么时候使用呢就是当回显为 Subquery returns more than 1 row concat的话就是横着连接,就是把你查询的东西和你拼接的符号连接了
?id-1 union select 1,concat(0x3d,(select group_concat(column_name) from information_schema.columns where table_nameflag),0x3d),3--0x3d是 ,嗯差不多这个意思吧主要就是在报错注入中使用0x04 宽字节
我们怎么看是否存在宽字节注入呢 就是转移符号\他会影响我们对的闭合从而影响注入
此时 php 会根据数据库中的编码自动来确定使用那种编码
可以使用 ?php $m”字”; echo strlen($m); 来进行判断
如果输出的值是3说明是utf-8编码如果输出的值是 2 说明是 gbk 编码。mysql 数据库在使用宽字节GBK编码时会认为两个字符是一个汉字前一个ascii码要大于128比如%df才到汉字的范围
那么我们就可以把转义字符正常解析从而正常闭合sql语句进行SQL注入有转义字符考虑宽字节注入 成功