想要了解SQL注入原理,就必须去明白什么是数据库,这里我就大概讲一下,数据库就是存储数据的,如果我们需要用的时候,可以用编程语言去调用这个数据,让他展示在页面上。
开始讲解SQL注入原理
我们首先先来看看Web程序三层架构:
- - 界面层
- - 业务逻辑层
- - 数据访问层
区分层次是为了啥,为了"高内聚低耦合",什么是低耦合,就是程序直接关联性不能太强,为什么,如果A产品和B产品是关联的,如果有一天A产品坏了,可能就会导致B产品也坏,这样就是不好的设计理念,所以这里为什么有三层,如果三层中一层坏了,其他两层是不会收影响的,并且,分层式结构是最常见,也是最重要的一种结构被应用于众多类型的软件开发。
数据库驱动的Web应用程序也是有三层:
- - 表示层
- - 业务逻辑层
- - 数据访问层
如图所示(虽然画的有点丑,但还是凑合看吧~):
上图大概过程就是:
1. 访问了https://www.0dayhack.com连接到此网站的服务器
2. 业务逻辑层的服务器从本地存储加载index.php脚本并且解析
3. 脚本连接对应的数据库,并且执行SQL语句
4. 数据库范围层的数据库返回SQL语句执行的结果给服务器
5. 然后服务器讲内容封装成了HTML,并且发送给了浏览器
6. 然后表示层(浏览器)解析HTML的文件,将它的内容展示出来
我们现在再以DVWA为案例来讲解SQL注入原理:
那么当我在输入框里输入1的时候,执行的是哪段sql语句呢,我们可以来看看:
等于说,当我们输入一个语句后,会这么执行sql语句:
`SELECT first_name, last_name, last_login FROM users WHERE user_id = '1'`
(还有之前我讲过DVWA low等级的注入,可以看看:https://www.0dayhack.com/post-815.html)
那么这个时候,我们来输入一下一些而已的sql注入语句,然后看看我们执行的其实是:
(绿色字体皆为代码部分)
SELECT first_name, last_name FROM users WHERE user_id = '1' and 1=1
SELECT first_name, last_name FROM users WHERE user_id = '1' and 1=2
SELECT first_name, last_name FROM users WHERE user_id = '1' order by 3-- a'
SELECT first_name, last_name FROM users WHERE user_id = '1' union select database(),2-- a
Sql注入原理之万能密码登录
这里他说了sql执行的语句是`select user_id,user_type,email from users where user_id='用户名' and password='密码'`,那么我们是否可以构造一下sql语句,使他具有攻击性。
然后我们来利用万能密码来登入网站:
成功登入:
万能密码原理:
(因为它这里写了原理,我就图个方便直接截图了~)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论