[CTF技术]SQL注入攻击

SQL 注入原理,两个人在通讯的时候,对方把一段信息当作了可执行代码并且执行
SQL 基础语法
MySQL Crash Course
关系型数据库的 DBMS 系统
准备:下载
sql
1 | USE myDB; |
操作
插入
sql
1 | INSERT INTO myDB.myRecord (Idx, Name, Arrive) |
INSERT INTO
插入 数据库名.表格名
(列名1, 列名2, 列名3)
VALUE(数值)
更改/删除
添加一列
sql
1 | ALTER TABLE myDB.myRecord |
更新一个
sql
1 | UPDATE myDB.myRecord |
删除一个
sql
1 | DELETE FROM myDB.myRecord |
删除表格/数据库
sql
1 | DROP TABLE myDB.myRecord; |
查看
sql
1 | USE myBD; |
合并
sql
1 | SELECT * |
链接
sql
1 | SELECT * |
其他函数
sql
1 | SELECT SLEEP(2) |
注释
sql
1 | /* |
常用编码
Space: %20
#: %23
': %27
": %22
+: %2B
正题:SQL 注入攻击
可见:恶意使用 SQL 增删改查四种操作都是违法犯罪行为!
SQL 注入原理,两个人在通讯的时候,对方把一段信息当作了可执行代码并且执行
信息收集->功能分析->利用逻辑->绕过(知识储备)+ 耐心
最简单:有回显的 SQL 注入
SQL 注入类型的判断:数字型/字符型
获取更多信息(有回显的情况下)
通过联合查询
sql
1 | SELECT ... UNION SELECT ... |
获取列数
获取所有数据库名+表名(仅限 MySQL)
例
无回显的 SQL 注入(只有 Found 和 Not Found 1bit 信息)
判断查找语句
进一步利用 1bit 的信息
利用 SQL 的注释符号,把后面的单/双引号注释掉。同时注入自己的条件代码
无回显的 SQL(甚至不会显示 error) 利用延时注入
会回显报错信息->报错注入
堆叠注入
很多数据库支支持多个 SQL 指令在一行中执行。但是服务端的语言不会支持获取多行的结果
sql
1 | SELECT 1; SELECT 2; |
二次注入
SQL 注入的绕过
常见防护方法/检测方法
- 直接拦截
- 关键字替换
- 编码转移 基本无解
- 参数化查询 不会把输入直接拼接到 SQL 中 基本无解
检测方式 - 关键字匹配(直接查找/正则)
- 语义匹配(例如一个引号就加一个反斜杠转义,一对引号就不转义)
注入绕过
总结
- Module1:PHP
- Moudel2:mySQL
双方互相理解出现了偏差
假如某个网页能实现预览其他网页的功能,直接把目标网页拼接到后面
拼接一个10.0.0.0
等等内网的地址,于是你能看到原本不能看到的内网信息
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.