使用sqlmap工具进行sql注入

张开发
2026/5/30 9:37:08 15 分钟阅读
使用sqlmap工具进行sql注入
第一阶段基础认知 (Less-1 至 Less-5)这是SQL注入的“新手村”所有攻击都通过URL的GET参数发起核心是理解数据库如何“说话”。Less-1 (字符型注入):核心:学习如何闭合单引号。手法:输入id1触发报错确认注入点。然后使用UNION SELECT联合查询直接从数据库“偷”出数据。关键Payload:id-1 UNION SELECT 1,2,3 --Less-2 (数字型注入):核心:理解数字型参数无需引号闭合。手法:输入id1直接拼接闭合更简单。关键Payload:id-1 UNION SELECT 1,2,3 --Less-3 4 (复杂闭合):核心:学习闭合更复杂的结构如括号()。手法:Less-3需要用)闭合Less-4需要用)闭合。这是对闭合符猜测能力的训练。关键Payload (Less-4):id1) UNION SELECT 1,2,3 --Less-5 (报错注入入门):核心:当页面不再回显查询结果时如何利用数据库的错误信息进行攻击。手法:故意构造语法错误让数据库把自己的结构信息通过报错吐出来。关键函数:updatexml(),extractvalue()第二阶段逻辑绕过 (Less-11 至 Less-14)攻击场景从URL转向了登录框POST请求核心从“拿数据”变成了“绕过认证”。Less-11 (POST字符型注入):核心:将GET注入的知识迁移到POST请求的用户名/密码框。手法:在用户名处输入admin --密码随意。这会将SQL语句后面的密码验证部分注释掉实现万能密码登录。关键Payload:usernameadmin --passwordanythingLess-12 (POST双引号闭合):核心:识别并闭合双引号。手法:与Less-11类似但需要用来闭合。关键Payload:usernameadmin --passwordanythingLess-13 14 (POST盲注):核心:登录成功后页面只告诉你“成功”或“失败”不再有任何数据库信息。手法:进入“布尔盲注”模式。通过构造usernameadmin AND 11 --和usernameadmin AND 12 --观察页面返回的差异如“登录成功”或“登录失败”来逐位猜解数据。第三阶段盲打艺术 (Less-8, 9, 15, 16)这是SQL注入的“高阶技巧”当页面没有任何回显无论是数据还是错误时你必须学会“盲打”。Less-8 15 (布尔盲注):核心:通过页面的“真/假”反馈来提问。手法:你向数据库提问“数据库名的长度是8吗” (AND length(database())8)。如果页面返回“真”比如登录成功你就知道答案是肯定的。通过不断提问可以拼凑出完整信息。Less-9 16 (时间盲注):核心:当页面连“真/假”反馈都没有时通过服务器的“反应时间”来提问。手法:你向数据库提问“如果数据库名长度是8你就睡5秒。” (AND IF(length(database())8, SLEEP(5), 0))。如果网页加载明显变慢就说明你的猜测是对的。这是最慢但最通用的注入方式。Less-16的特别之处:它引入了)这种复合闭合符增加了猜测难度。第四阶段场景深化 (Less-17)Less-17将注入场景从“登录”变成了“修改密码”这是一个非常贴近实战的更新UPDATE操作。Less-17 (密码更新注入):核心:在UPDATE语句中寻找注入点并利用报错注入。难点:注入点转移:username参数被严格过滤注入点在password参数。前置条件:必须先提供一个存在的用户名如admin才能触发后续的密码更新逻辑。手法:提交usernameadmin和一个恶意的password。关键Payload:password OR updatexml(1,concat(0x7e,database(),0x7e),1) --这里的0x7e是~符号用于在报错信息中清晰地包裹住我们想要的数据如~security~。使用sqlmap工具进行sql注入GET型注入Less-1 至 Less-5第一阶段GET 请求的“明牌”对决Less-1 到 Less-8场景 所有的注入点都在 URL 里例如 id1。Sqlmap 视角 “这太简单了我默认就会检查 URL 里的参数。”主要注入点就是在url属于明文简易明了可以看见都进行了什么操作找到页面进行一个简单的试探不过多赘述写过相关sqlmap的命令解释然后使用sqlmap -u 进行url探测测试成功找到库名找到库名就可以开始查询表单了找到表单进行找字段最终找到相关密码和账号内容这里主要是GET型注入属于明文在urlsqlmap注入基本流程都是找注入点找库找表找字段最终拿内容。难度上就是第一阶段所说的内容比如加单引号进行闭合或者复杂闭合甚至是报错反馈我们所需要信息但是共同点就是执行属于明文在url上面的POST型注入Less-11 至 Less-14)第二阶段POST 请求的“暗牌”交手Less-11 到 Less-14场景 注入点在登录框里数据藏在 HTTP 请求体Body里URL 里看不出东西。Sqlmap 视角 “URL 里没参数了但我可以抓取完整的请求包从中提取 POST 数据进行测试。”区别跟get区别就是注入点就不在url而是存在于提交表单上面了这个需要借助抓包工具或者开发者模式才能详细明白。通过界面有个表单就可以知道这个是存在提交注入的顺便简单测试一下就是在url上面进行?id1会发现页面没有改变那是因为类型已经改变了注入点已经不再url上面了。先随便输入内容进行bp抓包看一下可以看见这个数据包里面的cookie和主体内容这个和GET型注入有很明显的差别那就是多了cookie和data这两个Data 和 Cookie 是数据的容器。Sqlmap 往这些容器里塞入测试代码通过观察服务器的反应来进行校验从而判断是否存在漏洞。这里之后的操作步骤和get注入查库--账号密码流程都是一样的就不多赘述了这里就是在介绍一个-r读取文件查询将抓包以txt格式进行保存将保存的文件进行扫描查询就行了注意这里 的文件路径一定要写对之后的步骤也是一样的就不多赘述了POST型注入Less15-16第三阶段需要“等级提升”的隐蔽角落Less-15, 16场景 依然是 POST 登录框但是页面没有任何报错信息盲注。Sqlmap 视角 “我发了 Payload但页面什么反应都没有。默认情况下我不想浪费时间猜了。除非你强制让我测得更深一点。第16关就多了一个特殊的level 默认是一级 在这里设置3级就够用5级最高但是速度会更慢POST型注入Less17-Less19第四阶段HTTP 头部的“特殊通道”Less-17 其实有点特殊18/19 是典型的头部注入场景 注入点不在 URL也不在 POST 数据里而是在 User-Agent 或 Referer 这种 HTTP 头部里。Sqlmap 视角 “默认情况下我只测 URL 和 POST 数据。头部信息除非你让我测否则我略过。”第17关引用了一个新的参数-p 作用就是指定测试在这里面指定测试的是密码框总结Sqlmap 的“心路历程”前 8 关 (GET) “我看到 URL 有参数直接开干” (默认行为)-14 关 (POST) “你给我一个包我把包里的数据拿出来测。” (使用 -r)-16 关 (Blind) “这里没回显我得用时间延迟和逻辑判断来慢慢校验请给我加 --level。”-17 关 (特定位置) “注入点不在常规位置在密码框或头部请给我加 -p 指定参数名。”

更多文章