SQL Inject
SQL(pikachu)
SQL Inject漏洞概述
在owasp发布的top 10漏洞里面,注入漏洞一直是危害排名第一,其中主要指 SQL Inject漏洞
数据库注入漏洞,主要是开放人员在构建代码时,没有对输入边界进行安全考虑,导致攻击者可以通过合法的输入点提交一些精心构造的语句,从而欺骗后台数据库对其进行执行,导致数据库信息泄露的一种漏洞。
SQL Inject漏洞攻击流程
1、第一步:注入点探测
—— 自动方式:使用web漏洞扫描工具,自动进行注入点发现
—— 手动方式:手工构造sql inject测试语句进行注入点发现
2、第二步:信息获取
通过注入点期望得到的数据。
—— 1.环境信息:数据库类型,数据库版本,操作系统版本,用户信息等。
—— 2.数据库信息:数据库名称,数据库表,表字段,字段内容(加密内容破解)
3、第三步:获取权限
—— 获取操作系统权限:通过数据库执行shell,上传木马
SQL Inject漏洞 - 常见注入点类型
- 数字型 —— user_id=$id
- 字符型 —— user_id= ‘$id’
- 搜索型 —— text LIKE ‘%{$_GET[‘search’]}%’"
SQL Inject - 数字型注入(pikachu)
$id $_POST['id']
select 字段1,字段2 from 表名 where id = $id;
select 字段1,字段2 from 表名 where id = 1 or 1 = 1; //简单的数字型的SQL Inject的演示
SQL Inject 漏洞代码分析(数字型)
if(isset($_POST['submit']) && $_POST['id']!=null){//这里没有做任何处理,直接拼到select里面去了,形成Sql注入$id=$_POST['id'];$query="select username,email from member where id=$id";$result=execute($link, $query);//这里如果用==1,会严格一点if(mysqli_num_rows($result)>=1){while($data=mysqli_fetch_assoc($result)){$username=$data['username'];$email=$data['email'];$html.="<p class='notice'>hello,{$username} <br />your email is: {$email}</p>";}}else{$html.="<p class='notice'>您输入的user id不存在,请重新输入!</p>";}
}
SQL Inject - 字符型注入(pikachu)
$username=$_GET['username']
select 字段1,字段2 from 表名 where username='kobe';
~~kobe or 1=1~~
select 字段1,字段2 from 表名 where username='kobe' or 1=1#';
SQL Inject 漏洞代码分析(字符型)
if(isset($_GET['submit']) && $_GET['name']!=null){//这里没有做任何处理,直接拼到select里面去了$name=$_GET['name'];//这里的变量是字符型,需要考虑闭合$query="select id,email from member where username='$name'";$result=execute($link, $query);if(mysqli_num_rows($result)>=1){while($data=mysqli_fetch_assoc($result)){$id=$data['id'];$email=$data['email'];$html.="<p class='notice'>your uid:{$id} <br />your email is: {$email}</p>";}}else{$html.="<p class='notice'>您输入的username不存在,请重新输入!</p>";}
}
SQL Inject - 搜索型注入(pikachu)
select * from member where username like '%k%';
like '%xxxx%' or 1=1 #%'
%xxxx%' or 1=1 #= ('xx')or 1=1 #')
xx')or 1=1 #
SQL Inject 漏洞代码分析(搜索型)
//这里没有做任何处理,直接拼到select里面去了$name=$_GET['name'];//这里的变量是模糊匹配,需要考虑闭合$query="select username,id,email from member where username like '%$name%'";$result=execute($link, $query);if(mysqli_num_rows($result)>=1){//彩蛋:这里还有个xss$html2.="<p class='notice'>用户名中含有{$_GET['name']}的结果如下:<br />";while($data=mysqli_fetch_assoc($result)){$uname=$data['username'];$id=$data['id'];$email=$data['email'];$html1.="<p class='notice'>username:{$uname}<br />uid:{$id} <br />email is: {$email}</p>";}}else{$html1.="<p class='notice'>0o。..没有搜索到你输入的信息!</p>";}
if(isset($_GET['submit']) && $_GET['name']!=null){//这里没有做任何处理,直接拼到select里面去了$name=$_GET['name'];//这里的变量是字符型,需要考虑闭合$query="select id,email from member where username=('$name')";$result=execute($link, $query);if(mysqli_num_rows($result)>=1){while($data=mysqli_fetch_assoc($result)){$id=$data['id'];$email=$data['email'];$html.="<p class='notice'>your uid:{$id} <br />your email is: {$email}</p>";}}else{$html.="<p class='notice'>您输入的username不存在,请重新输入!</p>";}
}
总结
不管是什么型,总而言之,就是对SQL中的各种类型的输入进行闭合测试,构造合法SQL,欺骗后台执行!
补充:MYSQL小知识:注释符号
因为在SQL注入测试中,需要经常对多余的内容进行消除,以保证SQL语句语法正确,比如上面的#。
使用注释符号直接对多余内容进行注释是比较有效的方法。
MySQL服务器支持3种注释:
1.从 '#' 字符从行尾。
2.从 '--' 序列到行尾。请注意 '--'(双破折号)注释风格要求第2个破折号后面至少跟一个空格符(例如:空格、tab、换行等等)。该语法与标准SQL注释语法稍有不同。
3.从 /* 序列到后面 */ 序列。结束序列不一定在同一行中,因此该语法允许注释跨越多行。
4.下面的例子显示了3种风格的注释:
mysql> SELECT 1+1; #This is comment continues to the end of line
mysql> SELECT 1+1; --This comment continues to the end of line
mysql> SELECT 1 /*This is an in-line comment*/ + 1;
mysql> SELECT 1+ /*This is amultiple-line comment*/ 1;
注入方式get&post区别
GET 方式中使用URL提交注入数据;
POST 方式中使用抓包工具修改post数据部分提交注入;
不管是 GET方式还是 POST方式,都可能会出现SQL注入漏洞,本质其实是一样的!
以上是我的听课及学习笔记,欢迎借鉴交流学习,并指出不足!谢谢支持!
SQL Inject相关推荐
- Pikachu靶场通关笔记--Sql Inject(SQL注入)
在owasp发布的top10排行榜里,注入漏洞一直是危害排名第一的漏洞,其中注入漏洞里面首当其冲的就是数据库注入漏洞.一个严重的SQL注入漏洞,可能会直接导致一家公司破产! SQL注入漏洞主要形成的原 ...
- 谈VBS在Hacking中的作用———SQL Inject中的应用
本文,已发于<黑客手册>07年10月刊 平常我们遇到有注入漏洞一类的网站大部分人都是用NBSI Or 阿D一类的注射工具.但有的站点的注射点很难构造,或者说注射语句比较特殊.如果用手工去注 ...
- Pikachu靶场-SQL Inject
Pikachu靶场-SQL Inject SQL Inject 漏洞原理概述 SQL Inject攻击流程 如何判断是否存在注入 如何判断注入点类型及常见注入类型 数字型 字符型 搜索型 XX型 SQ ...
- SQL Inject of Code to bypass
目录 PHP Code audit Think about bypass filtering String to URL Code String to Base64 Code String to Ja ...
- 服务器怎么修复插件,如何修复服务器状态代码:302由SQL发现我注入了Firefox插件...
我使用SQL Inject Me Firefox插件扫描了登录脚本 根据测试结果,我的脚本容易受到SQL注入的攻击.结果示例 Results: Server Status Code: 302 Foun ...
- SQL注入详解和简单绕过原理
1.什么是SQL 结构化查询语言(Structured Query Language)简称SQL SQL使我们有能力访问数据库 2.什么是SQL注入 用户提交的数据可以被数据库解析执行 如果用户随随便 ...
- golang mysql 防注入_Go,Gorm 和 Mysql 是如何防止 SQL 注入的
Go,Gorm 和 Mysql 是如何防止 SQL 注入的 SQL 注入和 SQL 预编译技术 什么是 SQL 注入 所谓SQL注入(sql inject),就是通过把SQL命令插入到Web表单提交或 ...
- php逻辑难是难在sql,[实验吧] 所有web writeup
实验吧 writeup 打算把实验吧所有的web题做一遍 花了一个礼拜多的时间吧 有些也看了wp不得不说收获挺大 WEB 简单的登录题 F12看下网络里面里面的请求头中有一个tips:test.php ...
- sql注入危害利用及防护详解+sqlmap使用
来自于个人日常学习总结,欢迎大家一起来学习交流,如要转载请标明出处. sql注入危害 数据库信息泄露 网页篡改: 通过操作数据库对网页进行篡改,嵌入木马连接 数据库被恶意操作:被攻击.管理员账户被更改 ...
最新文章
- SSM实现个人博客系统
- FD.io/VPP — VPP Agent — Telemetry Plugin
- 隐藏数据的好方法----Alternative Data Stream(可选数据流)
- 使用echart的雷达图的时候,如果文字越界的解决办法记录,标签文字自动换行
- Windows10 手机应用程序开发 - 3. 做一个简单的计算器界面
- 计算机博士论文答谢,这篇博士论文《致谢》刷屏,句句扎心
- sap 供应商表_SAP系统玩阴的?
- 经典面试题(19):以下代码将输出的结果是什么?
- PHP中基本符号及使用方法
- Android Studio导入model
- python编程英语单词怎么写_用Python写一个背英文单词程序
- LINUX SHELL中使用sed匹配某一行并替换这一行的内容
- huffman编码的程序流程图_基于哈夫曼编码的压缩解压程序(C 语言)
- 基于高德地图的城市区域代码表
- 小米手机每次安装应用都需要属于小米账号密码
- 【逆向】修改软件标题(基于PE Explorer)
- 十进制计算机算法,计算机知识--二进制,十进制,十六制算法
- 在五环六环之间,有最真实的北京
- 深度学习记录第二篇————Tensor基本操作
- 窄带传输与LoRa扩频传输技术应用方案对比