Video thumbnail for 【城】一行代码让整个网站瘫痪,永不过时的黑客技术

SQL注入攻擊教學:一行代碼癱瘓網站?黑客技術原理與防禦實戰

Summary

Language:

Quick Abstract

想了解網站安全嗎? 這段影片深入探討了 SQL 注入攻擊,一種常見且危險的網路安全漏洞。從原理到防禦,本摘要將帶您快速掌握關鍵知識,保護您的數據安全!

快速重點:

  • 資料庫基礎: 認識資料庫 (database) 如何儲存網站資料,例如帳戶密碼、商品資訊等。

  • SQL 語言: 了解 SQL 的作用,它是程式設計師與資料庫溝通的指令語言。

  • SQL 注入原理: 揭露 SQL 注入漏洞的成因,以及駭客如何利用漏洞竊取或竄改資料。

  • 防禦方法: 學習如何透過參數化查詢 (parameterized queries) 和網路應用防火牆 (WAF) 來預防 SQL 注入攻擊。

  • 實例分析: 分析真實世界案例,例如 2004 年 Time Machine 和 2017 年 Equifax 的資料外洩事件。

  • 工具應用: 簡介 SQLMap 這類自動化工具,以及如何在 CTF 挑戰中使用。 透過本影片学习更多内容,保护您的网站免受攻击!

SQL 注入攻击与防护

资本的失败与个人努力

历经三年努力,最终仍是资本的失败。作为一名高中生,满怀真诚,日夜辛勤付出,却无人理解。不知是否触动了某些利益,资本的力量成为唯一软肋。

数据库简介

数据库是专门存储结构化数据的网络仓库。例如注册网站时填写的账号密码、淘宝上存储的产品信息、B站收藏夹的视频列表等,都会被拆解存入数据库。动态网页的内容会随数据库操作而改变,不像博客网站的内容直接固定为HTML,任何人访问看到的都是一样的。

以 B 站为例,有一个巨大的用户收藏表,包含用户 ID(UID)、视频 ID(BB)和收藏时间。登录时,输入账号密码,系统先核对用户 ID,再查询收藏表,返回属于用户的数据,通过 PHP、Java 等后端语言展示在网页上。投币也类似,有专门的用户硬币记录表,登录时获取 UID,查询记录得到硬币数据。

数据库相关概念

  • :类似 Excel 工作表,存储一种类型的数据。如用户表存账号密码,产品表存价格库存。一个数据库通常有多个表,像 B 站数据库就有视频收藏表、硬币表、关注列表、粉丝列表等。

  • 列(Column):表的固定栏目,如用户名、密码的标题。

  • 行(Row):具体的数据,如个人的账号信息、用户名、密码等。

SQL 语言与登录过程

SQL 是程序员对数据库的指令。例如从用户表中查询用户名等于“小白”的手机号码,或从订单表中删除价格为零的订单。

网站登录过程分四步: 1. 输入账号密码,如在登录页面填写“小白”和“123456”。 2. 程序生成 SQL 语句:select from the user table where the user name equals xiaobai and the password equals 123456,用于搜索或验证用户信息。 3. 在数据库中执行该 SQL 语句并返回结果,若账号正确则允许登录。 4. 在网页上显示结果。

SQL 注入攻击

若恶意输入,如将用户名改为“' or 1=1 --”,会破坏原 SQL 语言结构,使逻辑判断始终为真,跳过密码验证,甚至能让数据库导出所有用户密码数据,这就是 SQL 注入攻击。其根源在于过度信任用户输入或队友。

SQL 注入漏洞防范

防范 SQL 注入漏洞要秉持最小权限和零信任原则,在开发过程中进行参数化查询。例如用 Python 时,使用游标(cursor)的 execute 方法,能隔离用户输入,将特殊字符转义,使输入成为普通字符串,正常执行 SQL。

CTF 实践

在 NSS CTF 平台的“2021 ez sql”示例中,通过构造特殊输入获取数据库敏感信息。 1. 确定 SQL 语句列数:使用 order by 关键字,若原表有三列,order by 123 可正常执行,order by 4 会报错,报错的第一个数字即为列数。 2. 寻找返回点:使用 union select 方法合并两个表的查询结果。例如输入“-1' union select 1,2,3 --”,让原查询无结果,显示 union 后的结果,确定第二、三列为响应位置。 3. 获取数据库名:使用 database() 函数,将其放在响应位置,如“' union select 1,2,database() --”,得到当前数据库名。 4. 查找表名:利用 information_schema 数据库,构造语句如“' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='testdb' --”,获取表名。 5. 查找列名:对特定表查询列名,如“' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='testTB' --”。 6. 获取 flag:直接查询表中的 flag,如“' union select 1,2,flag from test_tb --”,得到结果后提交。

SQLMap 自动化工具

2006 年,意大利安全团队成员 Bernardo 为提高 SQL 注入检测效率,开发了自动化工具 SQLMap。使用时,在 Kali 系统中输入 sqlmap -u <url>?<parameter>=<value> --batch -dbs 可直接检查所有数据库,还能自动检测是否有 WAF 并构造 payload 获取信息。

SQL 注入攻击案例

2004 年 9 月 28 日,某互联网文件库的时间机器导致数据泄露,黑客窃取 3100 万用户认证数据库。2017 年,Equifax 因 SQL 注入攻击,1.47 亿用户记录泄露,公司股价大跌,后续投入至少 10 亿美元维护网络和数据安全。

网络应用防火墙(WAF)

WAF 用于保护 web 应用,防范各种网络攻击。它工作在应用层,扫描所有进入的 HTTP 和 HTTPS 流量,识别并阻止攻击。其原理是预设常见攻击特征,如“UNIUS SELECT 2E = 1E”。

著名的开源 WAF 有 Long - Stop Lightning,还有 Bankerweb、Baotaweb、Nanqiangweb 等。使用 WAF 进行 SQL 注入测试时,攻击会被直接检测和拦截,还能在攻击防御列查看攻击 IP 和详细信息,甚至通过 AI 分析攻击行为。但 WAF 也有局限性,可能被绕过,且无法弥补原代码逻辑漏洞,所以最重要的还是在代码层面进行保护。

结语

若喜欢本视频或觉得有帮助,请点赞、订阅和收藏。支持是制作视频的重要动力,期待更多交流,下次再见。

Was this summary helpful?

Quick Actions

Watch on YouTube

Related Summaries

No related summaries found.

Summarize a New YouTube Video

Enter a YouTube video URL below to get a quick summary and key takeaways.