您的位置:首页 > 数据库

小白必读记——内网渗透之SQL注入基本原理和攻击(超级详细的哦)(一)

2020-02-01 04:22 736 查看

前言

在对信息安全的学习中,我们要时刻保持好奇心,多问为什么,要多去探究根本原理,
而不是只会使用工具和死记硬背,遇到不会又搜不到答案的问题,我们要大胆猜想,
小心求证,只有这样我们才能不断的进步,在信息安全的领域越走越远

重要部分请大家多读几遍 o!

Web入侵先遣—SQL注入攻击技术初探

了解TA的前世今生

SQL注入式攻击技术,一般针对基于Web平台的应用程序.造成SQL注入攻击漏洞的原因,是由于程序员在编写Web程序时,没有对浏览器端提交的参数进行严格的过滤和判断。用户可以修改构造参数,提交SQL查询语句,并传递至服务器端,从而获取想要的敏感信息,甚至执行危险的代码或系统命令。
虽然SQL注入攻击技术早已出现,但是时至今日仍然有很大一部分网站存在SQL注入漏洞,在本章开篇中进行的入侵检测中就发现了各大门户网站同样存在SQL注入漏洞,更别说一些小网站了。由于SQL漏润存在的普遍性,因此SQL入侵攻击技术往往成为黑客入侵攻击网站渗透内部服务的首选技术,其危害性非常大。

1.1 注射式攻击的原理
注射式攻击的根源在于,程序命令和用户数据(即用户输入)之间没有做到泾渭分明。这使得攻击者有机会将程序命令当作用户输入的数据提交给Web程序,以发号施令,为所欲为(注:注入最终是数据库,与脚本、平台无关)。
个人认为总之一句话:注入产生的原因是接受相关参数未经处理直接带入数据库查询操作

为了发动注射攻击,攻击者需要在常规输入中混入将被解释为命令的“数据”,要想成功,必须要做三件事情:

 确定Web应用程序所使用的技术
注射式攻击对程序设计语言或者硬件关系密切,但是这些可以通过适当的踩点或者索性将所有常见的注射式攻击都搬出来逐个试一下就知道了。为了确定所采用的技术,攻击者可以考察Web页面的页脚,查看错误页面,检查页面源代码,或者使用诸如Nessus、AWVS、APPSCAN等工具来进行刺探。

 确定所有可能的输入方式
Web应用的用户输入方式比较多,其中一些用户输入方式是很明显的,如HTML表单;另外,攻击者可以通过隐藏的HTML表单输入、HTTP头部、cookies、甚至对用户不可见的后端AJAX请求来跟Web应用进行交互。一般来说,所有HTTP的GET和POST都应当作用户输入。为了找出一个Web应用所有可能的用户输入,我们可以求助于Web代理,如Burp等。

 查找可以用于注射的用户输入
在找出所有用户输入方式后,就要对这些输入方式进行筛选,找出其中可以注入命令的那些输入方式。这个任务好像有点难,但是这里有一个小窍门,那就是多多留意Web应用的错误页面,很多时候您能从这里得到意想不到的收获。

1.2 经典OR漏洞原理解析
大家经常听到网站万能密码登录,今天我们就来分析分析万能密码是怎么回事。先给大家来一个简单的实例:
1.登录页面关键代码如下:
1
2
3
4
5
6 privateboolNoProtectLogin(stringName, stringpassword)
{
intcount = (int)SqlHelper.Instance.ExecuteScalar(string.Format
(“SELECT COUNT(*) FROM Login WHERE Name=’{0}’ AND Password=’{1}’”, Name, password));
returncount > 0 ? true: false;
}
方法中Name和 password 是没有经过任何处理,直接拿前端传入的数据,这样拼接的SQL会存在注入漏洞。(帐户:yuan 123)
1)输入正常数据,效果如图:


合并的SQL为:select * from Admin where name=‘yuan’ and passWord=‘123’

2)输入注入数据:
如图,即用户名为:用户名:'or 1=1–,密码可随便输入


合并的SQL为:
SELECT * FROM admin WHERE Name=’'or 1=1–'and Password=‘mima’

2、现在我们来分析一下:‘or 1=1–为什么能登录系统,原因有如下:
(1)、SELECT * FROM admin WHERE Name=’‘or 1=1 首先看这条查询语句,查询所有来自admin表的数据,条件name为空或者1=1,这两个条件只要一个满足就为真, Name=’‘or 1=1 现在1=1就是真而且是是没任何作用的真,那么最终数据库执行的语句相当于 select * from Admin
(2)、因为Name值中输入了“–”注释符,后面语句被省略而登录成功。(常常的手法:前面加上’; ’ (分号,用于结束前一条语句),后边加上’–’ (用于注释后边的语句))
(3)、不同的程序万能密码也是不一样的,如ASP的万能密码是’or’=‘or’ PHP的万能密码是’or 1=1/* (如果在登陆窗口输入错误的语法出现报错一般说明存在sql注入)详细请看: http://chengkers.lofter.com/post/14c64b_379726
小提示:穿山甲如何post注入:

1.3 注入前的准备及注入漏洞检测

1.3.1 湿示友好HTTP错误信息
在进行SQL注入攻击时,需要利用到从服务器返回的各种出错信息,但是在浏览器中默认设置是不显示详细错误返回信息的,不论服务器返回什么错误,都只能看到“HTTP 500服务器错误”的窗口(图1)。因此,每次进行SQL注入攻击测试前,首先要取消IE浏览器返回信息设置,以便查看到注入攻击时返回的数据库信息。
打开IE浏览器,选择菜单“工具”一“Internet选项”命令,打开“Internet选项”对话框。打开“高级”选项卡,在“设置”列表框中找到“浏览组”,取消勾选“显示友好HTTP错误信息息”复选框。


图1 错误页面返回信息被简化处理

图2显示友好HTTP错误信息息

1.3.2 手工检测SQL注入点
最常用的SQL注入点判断方法,是在网站中寻找如下形式的网页链接。
http://www..com/.asp?id=xx (ASP注入)
或者下面的链接。
http://www..com/.php?id=xx (php注入)
http://www..com/.jsp?id=xx (jsp注入)
http://www..com/.aspx?id=xx (aspx注入)
http://www..com/index.asp?id=8&page=99 (注:注入的时候确认是id参数还是page参数,工具默认只对后面page参数注入,所以要对工具进行配置或者手工调换)
http://www.
.com/index/new/id/8 伪静态
http://www. ***.com/index/new/php-8.html伪静态
其中的“
”可能是数字,也有可能是字符串,分别被称为整数类型数据和字符型数据。如何判断某个网页链接是否存在SQL注入漏洞呢?通常有两种检测方法。

1.“单引号”法
第一种检测SQL注入漏洞是否存在的方法是“单引号”法。方法很简单,直接在浏览器地址栏中的网址链接后加上一个单引号,如果页面不能正常显示,浏览器返回一些异常信息,则说明该链接可能存在注入漏洞。

2. 1=1和1=2法
很多时候检测提交包含引号的链接时,会提示非法字符,或者直接不返回任何信息,但这并不等于不存在SQL注入漏洞。此时可使用经典的“1=1和1=2”法进行检测。方法很简单,就是直接在链接地址后分别加上and 1=1和and 1=2进行提交,如果返回不同的页面,那么说明存在SQL注入漏洞。

下面的后面分享哦!!!!感谢大家的阅读,希望对你有益处。
别忘了点个赞哦!

  • 点赞
  • 收藏
  • 分享
  • 文章举报
太白神羽酒 发布了6 篇原创文章 · 获赞 0 · 访问量 82 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: