SQL注入XSS漏洞
SQL注入漏洞
什么是sql注入漏洞
攻击者通过在用户输入或其他数据源中注入恶意的 SQL 语句,来篡改或操纵数据库的查询逻辑,从而达到获取敏感信息、修改数据、执行非法操作等目的。
sql注入漏洞的分类
sql 注入分为字符型和数字型。还可以将 sql 注入分为有回显的注入和无回显的注入,无回显的注入又别称为盲注,盲注有三大类,布尔盲注、时间盲注、报错盲注
数字型
显式数字型注入:
攻击者直接通过修改数字参数的值来改变 SQL 查询的逻辑。例如,在SELECT * FROM users WHERE id = 1中,将1修改为其他数字,以获取不同用户的信息。如果应用程序没有对输入的数字进行范围检查,攻击者可能会尝试输入一些特殊的数字,如负数、非常大的数或超出正常范围的数,看是否能获取到额外的信息或导致程序出错。
基于逻辑运算的数字型注入:
利用 SQL 中的逻辑运算符(如AND、OR)与数字参数结合来构造注入语句。比如,输入1 OR 1=1,使查询条件永远为真,从而获取到所有符合查询条件的数据。还可以使用AND运算符来进行更精确的筛选,例如1 AND (SELECT COUNT(*) FROM users)>100,通过判断数据库中users表的记录数是否大于100来获取信息。
基于数学运算的数字型注入:
借助 SQL 中的数学运算符(如+、-、*、/)对数字参数进行运算,以改变查询结果。例如,在一个根据商品价格查询商品信息的功能中,将价格参数100修改为100+1,可能会导致查询出价格大于100的商品信息。攻击者也可能利用数学运算来绕过一些访问控制机制,比如通过修改权限值的计算方式来提升自己的权限。
联合查询数字型注入:
使用UNION关键字将合法的数字查询与恶意查询组合在一起,以获取额外的数据。例如,1 UNION SELECT username, password FROM users,在原本根据数字 ID 查询用户信息的基础上,通过联合查询获取到了用户表中的用户名和密码字段信息。这种类型的注入通常用于获取数据库中其他敏感信息,而不仅仅是通过正常查询所能得到的内容。
盲注数字型注入:
盲注数字型注入又分为基于时间的盲注和基于布尔的盲注。基于时间的盲注是通过让数据库执行一些耗时操作,根据响应时间来判断注入是否成功。例如,输入1 AND (SELECT SLEEP(5) WHERE condition),如果数据库执行了SLEEP(5)函数,页面加载时间会延长 5 秒,说明条件condition为真,从而可以根据不同的条件来获取信息。基于布尔的盲注则是通过观察页面的响应结果(如是否返回特定的错误信息或页面内容是否发生变化)来判断注入条件的真假,进而获取数据库中的信息。例如,输入1 AND (SELECT COUNT(*) FROM users)>100,通过观察页面是否正常显示或出现特定错误来判断数据库中users表的记录数是否大于100。
字符型
简单字符型注入
攻击者直接在字符型参数中输入 SQL 语句片段,以改变原 SQL 查询的逻辑。例如,在一个登录表单中,用户名和密码字段通常是字符型输入。如果应用程序没有对输入进行适当的过滤,攻击者可能在用户名字段中输入' OR '1'='1,密码字段随意输入,这样构造的 SQL 查询可能变为SELECT * FROM users WHERE username = '' OR '1'='1' AND password = 'xxx',由于'1'='1'恒成立,就可能绕过登录验证,获取对系统的访问权限。
基于报错的字符型注入
利用数据库在执行错误的 SQL 语句时返回的错误信息来获取敏感信息。例如,攻击者可以在字符型参数中输入' AND 1=(SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'admin') AND ''=',如果数据库中存在名为admin的数据库,那么这个查询会导致数据库报错,通过分析报错信息,攻击者可以得知数据库的相关结构信息,如表名、列名等。
基于时间的字符型注入
通过让数据库执行一些耗时操作,根据响应时间来判断注入是否成功。例如,攻击者输入' AND (SELECT CASE WHEN (SELECT COUNT(*) FROM users WHERE username LIKE '%admin%') > 0 THEN SLEEP(5) ELSE 0 END) = 0 AND ''=',如果数据库中存在包含admin的用户名,那么SLEEP(5)函数会被执行,页面加载时间会延长 5 秒,攻击者可以根据这个时间延迟来推断数据库中的信息。
联合查询字符型注入
使用UNION关键字将合法的字符型查询与恶意查询组合在一起,以获取额外的数据。例如,在一个搜索功能中,假设原查询是SELECT name, description FROM products WHERE name LIKE '%keyword%',攻击者可以输入' UNION SELECT username, password FROM users WHERE ''=',这样就可以通过联合查询获取到用户表中的用户名和密码信息。
宽字节字符型注入
利用一些数据库对多字节字符编码的处理方式来进行注入。例如,在 GBK 编码中,一个汉字通常占用两个字节。攻击者可以输入%df' OR 1=1 --,其中%df在 GBK 编码下会被解析为一个汉字的一部分,与后面的单引号组合,可能会绕过一些对单引号的过滤机制,从而实现 SQL 注入。
sql注入漏洞的危害
如果该网站有sql注入漏洞
数据泄露
敏感信息获取:攻击者可以通过 SQL 注入攻击获取数据库中的敏感信息,如用户的账号、密码、身份证号码、银行卡号等。这些信息一旦被泄露,将对用户的隐私和财产安全造成严重威胁。
商业机密泄露:对于企业来说,数据库中可能存储着大量的商业机密,如产品研发计划、客户名单、营销策略等。SQL 注入漏洞可能导致这些商业机密被窃取,给企业带来巨大的经济损失。
数据篡改
修改数据:攻击者可以利用 SQL 注入漏洞修改数据库中的数据。例如,在电子商务系统中,攻击者可以修改商品价格、订单信息等,从而获取非法利益。在医疗系统中,修改患者的病历信息可能会对患者的治疗产生严重影响。
删除数据:恶意攻击者还可能通过 SQL 注入执行删除语句,删除数据库中的重要数据。这可能导致系统无法正常运行,业务中断,给企业和用户带来不可挽回的损失。
系统攻击与控制
权限提升:攻击者可以通过 SQL 注入攻击获取数据库管理员权限或其他高权限账户的信息,从而提升自己在系统中的权限。获得高权限后,攻击者可以进一步对系统进行全面的控制和攻击,如安装后门程序、窃取系统文件等。
执行系统命令:在一些情况下,攻击者可以利用 SQL 注入漏洞在数据库服务器上执行系统命令。这可能导致服务器被控制,攻击者可以随意操作服务器,如启动或停止服务、删除文件等,甚至可以将服务器作为跳板,进一步攻击其他内部系统。
网站挂马与恶意传播
植入恶意代码:攻击者利用 SQL 注入漏洞获取网站数据库的控制权后,可以将恶意代码植入到网站页面中。当用户访问被篡改的页面时,恶意代码会在用户的浏览器中执行,可能会窃取用户的登录凭证、下载恶意软件等,从而感染用户的设备,进一步扩大攻击范围。
影响网站声誉:网站被植入恶意代码或出现数据泄露等问题,会严重影响网站的声誉和可信度。用户对网站的信任度降低,可能导致用户流失,对企业的品牌形象造成长期的损害。
sql注入漏洞的实践
and 1=1 正常

and 1=2 报错

从这就已经说明是sql数字型注入了
上sqlmap


很明显,出现了报错注入,布尔,时间盲注
SQL注入漏洞如何防范
使用参数化查询
预编译语句:在大多数现代编程语言和数据库驱动中,都提供了预编译语句的功能。使用预编译语句时,SQL 语句的结构和参数是分开传递给数据库的,数据库会对参数进行严格的类型检查和转义处理,从而防止恶意的 SQL 注入。
存储过程:存储过程是在数据库中预先定义好的一组 SQL 语句集合,可以接受参数并执行特定的操作。通过使用存储过程,将 SQL 逻辑封装在数据库内部,应用程序只需要传递参数给存储过程,减少了直接在应用程序中编写 SQL 语句的风险。
输入验证和过滤
限制输入类型和长度:对用户输入的内容进行严格的验证,确保输入的数据符合预期的类型和格式。例如,如果是数字字段,只允许输入数字;对于字符串字段,限制其长度,防止过长的输入导致缓冲区溢出或 SQL 注入攻击。
使用白名单验证:采用白名单机制,只允许输入特定的合法字符和字符集。例如,只允许字母、数字、特定的标点符号等,拒绝其他可能包含恶意 SQL 命令的特殊字符。
数据库权限管理
最小权限原则:为应用程序使用的数据库账户分配最小的权限,仅授予其执行必要操作的权限。例如,如果应用程序只需要查询某些表的数据,那么只给该账户授予 SELECT 权限,而不授予 INSERT、UPDATE 或 DELETE 等危险权限。
定期审查权限:定期检查数据库账户的权限,确保权限没有被意外扩大或滥用。对于不再使用的账户或权限,及时进行清理和调整。
代码审查和安全测试
代码审查:在开发过程中,定期进行代码审查,检查是否存在可能导致 SQL 注入的代码漏洞。审查人员要特别关注对用户输入的处理、SQL 语句的拼接方式以及数据库操作的安全性。
安全测试:使用专业的安全测试工具和技术,如静态代码分析工具、动态漏洞扫描工具等,对应用程序进行全面的安全测试。这些工具可以检测出潜在的 SQL 注入漏洞,并提供详细的报告和修复建议。
错误处理和日志记录
避免泄露敏感信息:在处理数据库错误时,不要向用户返回详细的错误信息,尤其是包含数据库结构和 SQL 语句的信息。这些信息可能会被攻击者利用,进一步了解数据库的情况并进行攻击。
详细日志记录:记录详细的数据库操作日志,包括执行的 SQL 语句、用户输入的参数、操作时间等信息。这样在发生安全事件时,可以通过日志分析来追踪攻击来源和过程,有助于及时发现和解决问题。
XSS漏洞
XSS漏洞的定义
什么是XSS漏洞?
XSS 漏洞,全称为跨站脚本攻击(Cross - Site Scripting)漏洞。XSS 漏洞是指攻击者在目标网站中注入恶意脚本,当用户访问该网站时,浏览器会执行这些恶意脚本,从而导致用户信息泄露、被攻击者控制浏览器等安全问题。
XSS漏洞的分类
XSS漏洞分为反射型XSS,存储型XSS,DOM型XSS
反射型XSS
攻击者构造一个包含恶意脚本的 URL,诱使用户点击。当用户访问该 URL 时,服务器将恶意脚本作为响应内容返回给浏览器,浏览器执行该脚本,从而实现攻击。这种攻击通常是一次性的,依赖于用户主动点击恶意链接。
存储型 XSS
攻击者将恶意脚本存储在目标网站的数据库中,例如通过在评论区发布包含恶意脚本的评论。当其他用户访问包含该恶意脚本的页面时,浏览器会从服务器获取并执行脚本,从而对多个用户造成攻击。
DOM型XSS
通过修改页面的 DOM 树来注入恶意脚本。攻击者利用网站前端代码中的漏洞,通过修改 DOM 节点来插入恶意脚本,当浏览器解析和渲染页面时,执行这些恶意脚本。这种攻击不依赖于服务器端的响应,而是在客户端浏览器中发生。
XSS漏洞的危害
用户层面
隐私数据泄露:攻击者利用 XSS 漏洞可窃取用户的登录凭证、个人信息、联系方式等隐私数据。例如,通过注入恶意脚本,当用户登录银行网站时,脚本可获取用户输入的账号密码等信息,并发送给攻击者,导致用户资金安全受到威胁。
设备被控制:恶意脚本能够监控用户的键盘输入、鼠标操作等行为,甚至控制用户设备进行一些恶意操作,如发送垃圾邮件、下载恶意软件、参与 DDoS 攻击等。比如,攻击者控制用户设备发起大规模邮件轰炸,不仅影响用户设备的正常使用,还可能导致用户账号被封禁。
遭受钓鱼攻击:攻击者可通过 XSS 漏洞篡改网页内容,将正常的链接替换为钓鱼链接。当用户点击这些链接时,会被引导至虚假网站,进而遭受钓鱼攻击,造成财产损失。
网站层面
声誉受损:一旦用户在网站上遭遇 XSS 攻击,会对网站的安全性产生质疑,进而影响网站的声誉和口碑。用户可能会减少对该网站的访问,甚至不再信任该网站,导致网站的用户流失。
业务受影响:XSS 攻击可能会篡改网站的业务逻辑,干扰正常的业务流程。例如,在电商网站中,攻击者通过 XSS 漏洞修改商品价格或订单信息,导致交易出现异常,影响商家的正常运营和收入。
法律风险:如果网站未能保护好用户数据,导致用户因 XSS 攻击遭受损失,网站可能会面临法律诉讼和监管部门的处罚。例如,在一些数据保护法规严格的地区,网站运营者可能需要承担巨额罚款和法律责任。
XSS漏洞的实践

因本人比较菜,只挖到了反射型XSS漏洞
XSS漏洞的防范
1. 输入验证和过滤
严格校验数据类型:对用户输入的内容进行严格的数据类型检查,确保输入符合预期的格式。比如,对于要求输入数字的字段,只允许输入数字字符,拒绝其他非数字字符。
限制输入长度:限制用户输入内容的长度,防止通过超长输入来突破应用程序的缓冲区限制,进而执行恶意脚本。
使用白名单验证:建立白名单,明确允许输入的字符集和字符范围。只允许用户输入特定的合法字符,如字母、数字、特定的标点符号等,禁止其他可能用于构造恶意脚本的特殊字符。
2. 输出编码
HTML 编码:在将用户输入的内容输出到网页之前,对特殊字符进行 HTML 编码。例如,将 “<” 转换为 “<”,“>” 转换为 “>”,使浏览器将这些字符作为普通文本显示,而不是解析为 HTML 标签,从而防止恶意脚本被执行。
JavaScript 编码:当将用户输入的内容嵌入到 JavaScript 代码中时,要对其进行 JavaScript 编码。对可能引起脚本执行的特殊字符进行转义,如将引号(' 和 ")转换为对应的转义字符,避免恶意脚本注入到 JavaScript 代码中。
CSS 编码:如果用户输入的内容会用于 CSS 样式中,同样需要进行 CSS 编码,对可能导致样式注入攻击的特殊字符进行处理,防止攻击者通过修改 CSS 样式来执行恶意操作。
3. 使用安全的开发框架和库
利用框架的内置安全机制:许多现代的 Web 开发框架都提供了内置的安全功能来防范 XSS 漏洞。例如,Angular、React 等前端框架在渲染数据时会自动对数据进行安全处理,防止 XSS 攻击。开发者应充分利用这些框架的安全特性,遵循框架的最佳实践进行开发。
及时更新框架和库:保持开发框架和相关库的版本更新,以获取最新的安全补丁和功能改进。漏洞修复和安全增强通常会随着框架的更新而发布,及时更新可以确保应用程序能够抵御最新的安全威胁。
4. 内容安全策略(CSP)
限制脚本来源:通过设置 Content - Security - Policy(CSP)头信息,明确指定允许加载脚本的来源。例如,只允许从当前域名或经过授权的域名加载脚本,禁止从其他未知或不可信的来源加载脚本,从而防止浏览器执行恶意脚本。
禁止内联脚本和 eval ():CSP 可以禁止使用内联脚本和 eval () 函数,这是 XSS 攻击中常用的手段。通过禁用这些危险的特性,可以大大降低 XSS 攻击的风险。如果确实需要使用内联脚本,可以通过 CSP 的 nonce 或 hash 值来进行安全授权。
HttpOnly 属性:
设置 Cookie 的 HttpOnly 属性:对于包含用户敏感信息的 Cookie,如登录凭证等,设置 HttpOnly 属性。这将使 Cookie 只能通过 HTTP 协议进行访问,无法通过 JavaScript 脚本进行读取和修改,从而防止攻击者通过 XSS 漏洞窃取用户的 Cookie 信息。
安全意识培训:
对开发者的培训:对开发人员进行安全培训,使其了解 XSS 漏洞的原理、危害和防范方法。开发人员应掌握安全的编码规范和最佳实践,在编写代码时能够自觉采取防范措施,避免引入 XSS 漏洞。
对用户的教育:对用户进行安全意识教育,提醒用户不要随意点击来路不明的链接,避免在不可信的网站上输入敏感信息。用户在使用网站时应注意观察网址和页面的异常情况,发现可疑之处及时向网站管理员报告。

浙公网安备 33010602011771号