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相关推荐

  1. Pikachu靶场通关笔记--Sql Inject(SQL注入)

    在owasp发布的top10排行榜里,注入漏洞一直是危害排名第一的漏洞,其中注入漏洞里面首当其冲的就是数据库注入漏洞.一个严重的SQL注入漏洞,可能会直接导致一家公司破产! SQL注入漏洞主要形成的原 ...

  2. 谈VBS在Hacking中的作用———SQL Inject中的应用

    本文,已发于<黑客手册>07年10月刊 平常我们遇到有注入漏洞一类的网站大部分人都是用NBSI Or 阿D一类的注射工具.但有的站点的注射点很难构造,或者说注射语句比较特殊.如果用手工去注 ...

  3. Pikachu靶场-SQL Inject

    Pikachu靶场-SQL Inject SQL Inject 漏洞原理概述 SQL Inject攻击流程 如何判断是否存在注入 如何判断注入点类型及常见注入类型 数字型 字符型 搜索型 XX型 SQ ...

  4. SQL Inject of Code to bypass

    目录 PHP Code audit Think about bypass filtering String to URL Code String to Base64 Code String to Ja ...

  5. 服务器怎么修复插件,如何修复服务器状态代码:302由SQL发现我注入了Firefox插件...

    我使用SQL Inject Me Firefox插件扫描了登录脚本 根据测试结果,我的脚本容易受到SQL注入的攻击.结果示例 Results: Server Status Code: 302 Foun ...

  6. SQL注入详解和简单绕过原理

    1.什么是SQL 结构化查询语言(Structured Query Language)简称SQL SQL使我们有能力访问数据库 2.什么是SQL注入 用户提交的数据可以被数据库解析执行 如果用户随随便 ...

  7. golang mysql 防注入_Go,Gorm 和 Mysql 是如何防止 SQL 注入的

    Go,Gorm 和 Mysql 是如何防止 SQL 注入的 SQL 注入和 SQL 预编译技术 什么是 SQL 注入 所谓SQL注入(sql inject),就是通过把SQL命令插入到Web表单提交或 ...

  8. php逻辑难是难在sql,[实验吧] 所有web writeup

    实验吧 writeup 打算把实验吧所有的web题做一遍 花了一个礼拜多的时间吧 有些也看了wp不得不说收获挺大 WEB 简单的登录题 F12看下网络里面里面的请求头中有一个tips:test.php ...

  9. sql注入危害利用及防护详解+sqlmap使用

    来自于个人日常学习总结,欢迎大家一起来学习交流,如要转载请标明出处. sql注入危害 数据库信息泄露 网页篡改: 通过操作数据库对网页进行篡改,嵌入木马连接 数据库被恶意操作:被攻击.管理员账户被更改 ...

最新文章

  1. SSM实现个人博客系统
  2. FD.io/VPP — VPP Agent — Telemetry Plugin
  3. 隐藏数据的好方法----Alternative Data Stream(可选数据流)
  4. 使用echart的雷达图的时候,如果文字越界的解决办法记录,标签文字自动换行
  5. Windows10 手机应用程序开发 - 3. 做一个简单的计算器界面
  6. 计算机博士论文答谢,这篇博士论文《致谢》刷屏,句句扎心
  7. sap 供应商表_SAP系统玩阴的?
  8. 经典面试题(19):以下代码将输出的结果是什么?
  9. PHP中基本符号及使用方法
  10. Android Studio导入model
  11. python编程英语单词怎么写_用Python写一个背英文单词程序
  12. LINUX SHELL中使用sed匹配某一行并替换这一行的内容
  13. huffman编码的程序流程图_基于哈夫曼编码的压缩解压程序(C 语言)
  14. 基于高德地图的城市区域代码表
  15. 小米手机每次安装应用都需要属于小米账号密码
  16. 【逆向】修改软件标题(基于PE Explorer)
  17. 十进制计算机算法,计算机知识--二进制,十进制,十六制算法
  18. 在五环六环之间,有最真实的北京
  19. 深度学习记录第二篇————Tensor基本操作
  20. 窄带传输与LoRa扩频传输技术应用方案对比

热门文章

  1. Android 10.0 Launcher3 单层app列表页排序功能实现
  2. Java实现动态切换数据源
  3. table的样式设置
  4. 无抵押贷款 幸福生活新选择
  5. MapX.h和MapX.cpp下载
  6. SQL Developer 19.2.1下载安装
  7. 电子计算机开关及清屏键,计算机清屏键是什么
  8. 基于极限学习机的预测、图像降噪和回归
  9. MVC 和Spring MVC
  10. linux zsh 终端,linux安装zsh终端