您现在的位置是:知识 >>正文

sql注入语句实例大全

知识257人已围观

简介很多人第一次接触SQL注入,是因为在搜索框里敲了个单引号,页面直接报错——那种数据库错误信息赤裸裸地暴露在前端,像一扇没关严的门。这篇文章不讲废话,直接列实例。每个例子我都尽量给出具体场景和可复现的逻 ...

很多人第一次接触SQL注入,入语是句实因为在搜索框里敲了个单引号,页面直接报错——那种数据库错误信息赤裸裸地暴露在前端,入语像一扇没关严的句实门。这篇文章不讲废话,入语直接列实例。句实每个例子我都尽量给出具体场景和可复现的入语逻辑,你拿去对照自己的句实代码就行。

最基础的入语注入是绕过登录验证。假设后端拼接的句实SQL是:

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

你在用户名输入 ' OR '1'='1,密码随便填,入语拼接后变成:

SELECT * FROM users WHERE username = '' OR '1'='1' AND password = 'xxx';

由于 '1'='1' 恒真,句实这条查询会返回users表里所有记录,入语登录逻辑直接崩掉。句实更狠的入语是用注释符截断后面的条件:用户名填 admin'--,密码留空,SQL变成:

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

-- 在多数数据库里是注释,后面的密码校验直接被吃掉。这种手法在十几年前的CMS里一抓一大把,现在虽然少了,但有些老旧后台仍然能撞上。

UNION注入是拿数据的主力。前提是你得先知道原查询返回几列。用 ORDER BY 递增试探:

id=1 ORDER BY 1-- id=1 ORDER BY 2-- id=1 ORDER BY 3-- (报错,说明只有2列)

确定列数后,用UNION SELECT把想要的数据拼到结果里。比如:

id=1 UNION SELECT username, password FROM users--

页面原本显示文章标题和内容的位置,会直接变成用户名和密码哈希。我见过一个真实案例,某站点的商品详情页用 id 参数,注入后UNION出来的居然还有数据库版本和当前用户,信息泄露得干干净净。

报错注入适合页面不回显数据、但会打印数据库错误的情况。MySQL里常用 extractvalue() 或 updatexml():

id=1 AND extractvalue(1, concat(0x7e, (SELECT database()), 0x7e))--

报错信息里会带上数据库名,夹在两个波浪号之间。把 database() 换成 user()、version() 或者子查询查表名,都能一行行套出来。这种手法在MySQL 5.1以上版本有效,新版本有些函数被限制,但变种一直存在。

盲注是没回显、没报错时的笨办法,但笨办法往往最可靠。布尔盲注靠页面状态差异判断:

id=1 AND (SELECT SUBSTRING(database(),1,1))='a'--

如果页面正常,说明数据库名首字母是a;如果异常,就换字母继续试。时间盲注更隐蔽,用 SLEEP() 制造延迟:

id=1 AND IF((SELECT SUBSTRING(database(),1,1))='a', SLEEP(3), 0)--

页面卡三秒就是命中。手工跑盲注很折磨人,通常直接上sqlmap,但理解原理能帮你判断哪些参数值得测。

堆叠注入在支持多语句的数据库里(比如SQL Server)可以干更多事:

id=1; DROP TABLE users--

一条注入直接删表。当然实际渗透里不会这么粗暴,更常见的是 ; EXEC xp_cmdshell 'whoami' 这种提权操作。MySQL的PDO默认不支持堆叠,但有些老代码用 mysqli_multi_query 就中招。

宽字节注入是GBK编码下的经典问题。后端用 addslashes 转义单引号变成 \',你输入 %df',编码后 %df%5c%27,%df%5c 在GBK里是一个合法汉字,剩下的 ' 就逃逸出来了。这个坑在早期PHP项目里特别多,现在虽然少了,但遇到GBK站点还是可以试一把。

二次注入更隐蔽。你注册用户名 admin'--,注册时被转义存进数据库变成 admin\'--。但下次修改密码时,代码从数据库读出这个用户名直接拼接,转义符没了,注入就发生了。这种漏洞靠扫描器很难发现,得手工跟数据流。

最后说个现实观察:现在纯拼接SQL的代码少了,但ORM框架里的原生查询、ORDER BY 后面的参数、LIMIT 后面的数字,仍然是注入高发区。我见过一个项目,所有输入都过滤了,唯独排序字段 sort 直接拼进 ORDER BY,结果被 ORDER BY (CASE WHEN ... THEN ... END) 玩出布尔盲注。防御的核心就一条:别拼字符串,用参数化查询。做不到的话,至少把数据库报错关掉,别让错误信息帮你把路铺好。

Tags:

相关文章

  • 中国体育彩票举报投诉平台

    知识

    彩票店老板老周上个月栽了。他偷偷在柜台下装了台“快三”私彩机,每天傍晚用微信喊熟客来押注。直到有人输红了眼,拨通中国体育彩票举报投诉平台的热线。第三天,稽查人员带着执法证出现在他店里,那台机器被当场砸 ...

    【知识】

    阅读更多
  • mossfrp内网穿透网站

    知识

    MossFrp 这个网站,第一次打开的时候我愣了一下。界面黑底绿字,像极了早年黑客电影里的终端窗口,没有花哨的动画,没有“立即注册”的大按钮弹窗。它干的事其实很直接:把你本地电脑上的服务,通过它的服务 ...

    【知识】

    阅读更多
  • 网络推广课程标准

    知识

    网络推广这门课,很多学校把它上成了“广告学概论”的翻版。学生背了一堆4P、SWOT,真到抖音投DOU+、小红书铺关键词时,连后台在哪都找不到。问题不在学生,在课程标准本身——它把“推广”当成了知识,而 ...

    【知识】

    阅读更多


友情链接