新手学渗透之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=1SELECT 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语句,使他具有攻击性。
小知识(看了别打我):

然后我们来利用万能密码来登入网站:

成功登入:
万能密码原理:
(因为它这里写了原理,我就图个方便直接截图了~)