天气有点冷,无法及时更新,望见谅。
今天要跟大家学习的SQL注入,如果有同学以前接触过网站攻防的应该已经知道这是什么的了,没接触过的同学,没关系,我们今天就来学习这个。
什么是SQL注入
SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
要想学习SQL注入,一定要熟悉SQL语法,可以去这几个地方学习:
http://www.w3school.com.cn/sql/sql_select.asp
主要学的是SQL语法中select语句的内容,当然,其他的也要熟悉。
实验机IP:
118.89.17.134
实验题目:
bWAPP之SQL Injection (GET/Search)
和
bWAPP之SQL Injection (GET/Select)
都是通过GET请求方法的
实验内容:
0x01:SQL injection(GET/Search)
可以看到,这是一个提供搜索网站内容的搜索框,基本上很多网站都会有这个功能。如果没有做好防护措施的话,很容易被入侵的。接下来教大家怎么手工找这个SQL注入漏洞,并且进行入侵,
0x02:分析一下网站的后台源码
主要源代码:
可以看到,后台对输入的值没有进行任何的过滤就直接对数据库进行查询了,这是个致命的漏洞。怎么进行防护,我们以后的课程再说,就是这个平台的high级别的方法。
0x03:测试分析
在输入框内输入一些数字,点击搜索
什么都没有出来。
网址栏:
http://118.89.17.134/sqli_1.php?title=1&action=search
我们再输入一些字符,输入一个e,点击搜索
可以看到出现很多内容,只要Title栏中带e的都会显示出来。
网址栏:
http://118.89.17.134/sqli_1.php?title=e&action=search
这样我们可以分析得出这里是一个字符型的get请求。
0x04:测试漏洞
接下来我们进行测试这里是否存在SQL注入漏洞
常用的方法:
输入:
点击搜索后
报错了,说明很大可能存在SQL注入漏洞了。
再用or大法测试一下(因为是字符型的,数字型就用and)
输入:
这里我们就不要用一个e了,用一个经常出现的the。
or 1=1 是一个恒等式
# 是MySQL语法中注释符,把 ' 注释掉
页面正常回显。
再输入:
or 1=2 是一个恒不等式
发现无法正常进行查询回显。
说明,这里确实存在SQL注入漏洞。
0x05:爆字段(字段就是这个数据表中的列)
使用的方法:
输入:
报错,说明字段数少于10
再输入:
这是个正常页面,表示没查到信息,没有爆出错误,说明字段数大于5小于10。
再输入:
8也报错,小于8
再输入:
发现没有报错,8报错,7没报错,说明字段数就是7了。
0x06:爆表(即获取当前数据表)
使用的技术
输入:
这个1到7就是我们查出来这个表有的列
我们可以看到,出现了几个数字2、3、5、4
把一些内置函数替换这几个数字,会得出我们想要的东西。
例如
查看当前数据库名:
输入:
我们将2替换成database()这个函数
可以看到原来Title栏的2变成了我们要查的当前数据库的名称bWAPP。
相关函数
这些函数,你们自己都尝试去替换里面的数字,一次性替换几个也行,只要这些数字都是我们利用联合查询查到的数字就行。
我查看MySQL的版本号和当前数据库名:
输入:
可以看到在Release栏出现MySQL的版本5.547。
暴数据表
输入:
可以看到,爆出了5个表,其中users表是一个比较重要的表,也是值得我们注意的表。
0x07:获取后台账户用户名和密码
先查看users表的所有的列的信息
输入:
其中的login和password,应该是我们有我们想要的东西。
那我们就去查出它们的信息
输入:
在Title和Release栏把它们对应的账号和密码爆出了,其中密码是经过md5加密,我们需要去解密
去这个网站可以解出一些MD5加密的密码
ok,我们已经获取了所有我们想要的内容,只要找到后台,我们就可以以管理员的身份去控制这个网站
1x01:bWAPP之SQL Injection (GET/Select)
可以看到,这是个选择框,可以选择去查询,不同的人名出来不同的信息,我们是无法框内输入东西的,就无法安装上面的方法在输入框内直接进行注入。
1x02:测试
我们选择iron man,点击go
出来了iron man 的信息,接下来我们不要在留意这里,把目光转向到浏览器的网址栏去
因为是get请求的,所以我们可以在地址栏中看到很多信息。在这里的话。
movie应该对应的是我们选择人名
action就是按钮go了。
movie=2,这个关键,说明这可能是个数字型的。
1x03:漏洞测试
利用的还是那两个大法
这次我们要在地址栏进行修改,在2后面加个'看看
回车,发现报错了,emmmmm,有漏洞!
再来使用and大法测试看看
正确回显
没查到信息。
可以得出,在movie=2这里存在SQL注入漏洞。
1x04:爆字段
可以得到,字段数为7
1x05:爆表
我们先要让movie等于一个数据表中不存在的数,即让它报错,我在这里改成-2,肯定不存在的。这里关键点
查看数据库:
获取数据表:
发现只是爆出一个表blog表,我们要想一次爆出所有表,怎么办呢
获取所有数据表:
我们用了一个group_concat()函数包住table_name
可以看到,我们把所有的表都在Title栏中看到了,其中users就是我们想要表了。
1x06:获取数据表的字段信息
其中,login和password的内容是我们想要的。
1x07:获取账号和密码
可以看到,账号和密码了。
完结
今天,就这两个,是很重要的,希望大家能好好动动手,做一下笔记。
领取专属 10元无门槛券
私享最新 技术干货