修复\\\'or\\\"=\\\"or\\\'漏洞

用’or”=”or’就能登陆网站后台的漏洞怎么修补?





议题提交:小行

信息来源:邪恶八进制信息安全团队



现在很多的公司网站的后台漏洞是大的叫人害怕

只要写入’or’ ‘=’,



就可以顺利的登入它的后台管理

针对于此,大家都是如和处理的?



希望各位发出自己的检验,完善下这个帖子,



PS:为安全做点力量



我本着抛砖引玉思想欢迎大家来一起讨论此帖,谢谢!

此帖已经在远望论坛发帖子讨论,已经有人回复总结一文,在此一起发出,希望更多的人针对此发表自己的见解



针对ASP中SQL Injection的初级防护(总结版)

                    robur/文



记得大约是在2002年的时候,SQL Injection(SQL注入)开始有了最初的雏形。黑客们发现,在动态网页的某些地方(表单等……)插入一些可以在数据库查询中起作用的语句和符号,就可以让页面执行后,返回特殊的结果。于是,经过了2003的发展,到2004年,SQL Injection已经作为一种很成熟的入侵技术登上了安全界的舞台。也是2004年,有大批的网站程序被发现了SQL Injection漏洞,也有大批的网站栽倒在这种攻击手段之下。

下面,我就小行和逍遥一指令的帖子,作总结性的说明,仅供参考。

正如如小行所说的,在某些网站的登录界面,如果你知道了存在的用户名(例如:admin),你无须知道密码。只需在密码框中输入’ or ”=’即可。(注意,全是单引号!)这样在不知道密码的情况下,也可以用admin的身份登录。

但是,我想说的是,’ or ”=’在一些地方会出现问题。有些数据库不会认为“空”=“空”是成立的条件,这样就不行了。最好写成’ or ’1′=’1

这样,SQL的查询语句,就变成了如下的样子。

select * from users where name=’admin’ and pass=’123456′ or ’1′=’1′

上面,蓝色的部分是用户在密码框中输入的数据。大家可以看见,由于用户的巧妙构造,使得SQL Server把这条查询语句解析为3个条件:

1、name=’admin’

2、pass=’123456′

3、’1′=’1′

关键是中间的那个or,这样一来,SQL Server在解析的时候,只要条件2、3,符合一个就可以了。

因为1=1是衡成立的,所以这个查询的结果肯定是true。



既然已经知道了原理,那我们可以试着防范这种攻击。

我们的根本目标,就是把用户输入的单引号和or过滤掉,这样就能在基本上杜绝SQL Injection攻击。但是,需要强调的是,SQL语句中,起作用的还有and,分号,–(两个减号)等等。



解释一下:and用于连接两个条件。;(分号)用于分隔两个语句。(如果把两个语句写在一行,就需要它。)–(双减号只在MS SQL Server中起作用,含义是忽略后面的内容。这个通常在繁琐的MS SQL注入中使用。)



回归主题。asp中为我们提供的字符转义函数:Replace。看代码:



<%

Dim Usr,Pwd

Usr=Request.form(“username”) ‘从表单获得数据

Pwd=Request.form(“password”) ‘同上

if (Usr<>“”) and (Pwd<>“”) then ‘判断数据为非空

Usr=Replace(Replace(Usr,”‘”,”"),”or”,”") ‘嵌套了两个replace函数,过滤特殊字符

Pwd=Replace(Replace(Pwd,”‘”,”"),”or”,”")

end if

%>



Repalce语法规则:

Replace(变量名称,”要过滤的字符”,”要替换的字符”)

说明,“要替换的字符”那里,如果留空,就是把要过滤的字符直接删除。

例子:

Replace(Pwd,”‘or”,”")

过滤Pwd变量中的or字符。

由于Replace函数,一次只能对一组字符进行转义,所以讲讲Replace的嵌套:

Replace(Replace(Pwd,”or”,”"),”‘”,”")

代码中红色的地方,被外面的replace函数看作一个变量,依此类推。

如果你还想过滤and,分号,–什么的,请看下面(完全过滤了在SQL注入中最关键的5个字符串。)

Replace(Replace(Replace(Replace(Replace(变量名称,”‘”,”"),”or”,”"),”and”,”"),”–”,”"),”;”,”")



上面只是防范从表单提交的数据,对于一些新闻系统,经常会出现诸如:

http://host/news/show.asp?id=1

之类的URL。

如果在那个1后面,加上一个单引号,一样会报错。我们往下看。

如果加上了单引号,SQL语句就变成了:

select * from news where id=’1”

因为最后一个引号没有闭合,所以系统一定会报错。

防范如下(其实和上面的原理是一样D……)看代码:



<%

Dim id

id=Request(“id”)

if Not IsNumeric(id) then ‘——事先声明了变量,所以可以直接写进去。否则,就要写Request(“id”)

Response.write “Error!” ‘——反馈错误信息

Response.end ‘——中止执行下面的语句

end if

%>



因为,类似新闻ID之类的变量,是根本不需要有字母和符号存在的,所以用IsNumeric来判断是否为纯数字,确保万无一失。

如果一个变量,里面需要有字母和符号,那你就只好用Replace函数慢慢过滤了……:O)



最后,再说两种防止ASP页面暴出错误信息的方法。

众所周知,入侵者往往都是通过页面暴出的错误来得知一些额外的信息。比如你的系统,SQL Server的版本,是否存在某数据库,SQL语句是否执行成功等……

防止入侵者看到错误信息,就是让入侵者变成了睁眼瞎,找不到头绪。(骨灰级黑客除外~~~~)

方法1:打开你的IIS管理器(以IIS6.0为例),选择你的网站=》属性页面=》主目录选项卡=》点击配置按钮=》调试选项卡=》向客户端发送下列文本错误消息

这样,即使入侵者找到了注入点,注入后,得到也只是服务器返回的固定的错误消息。不能得到任何有价值的错误信息。



方法2:在你的ASP语句中(一般是在最开头的地方),加上一句

On Error Resume Next

(注意,这句必须加在<%   %>里面,不然IIS可不认。)

这就是著名的容错语句,当ASP语句执行时发生错误,就跳过错误,继续向下执行,而且不会返回错误信息。

当然,入侵者看不到错误信息,调试人员也看不到。所以,你一定在把一个ASP程序调试完毕后,再把这个语句加到ASP语句的顶端。否则,调试的时候,会烦死你的~~~~~~:O)



好了,不多说。就这些了,全是自己写的。大家随便看看,捧捧场哦~~~~
发表评论

如何安装PHP5+Apache

信息来源:oldblog.blogchina.com



1.下载php-5.0.0-Win32 地址为:http://cn.php.net/get/php-5.0.0-Win32.zip/from/a/mirror

下载Apache 地址为:http://nagoya.apache.org/mirror/httpd/binaries/win32/apache_2.0.50-win32-x86-no_ssl.exe

在安装php之前必须把IIS停止或卸载掉,或更改端口。





2.解压php-5.0.0-Win32.zip到D:\PHP,重命名php.ini-dist为php.ini,压缩包中包括两个 ini 文件,php.ini-dist 和 php.ini-recommended。建议使用 php.ini-recommended,因为此文件对默认设置作了性能和安全上的优化。仔细阅读此文件中的说明并研究 ini 设置 一章来亲自人工设定每个项目。如果要达到最佳的安全效果,则最好用这个文件,尽管 PHP 在默认的 ini 文件下也工作的很好。将选择的 ini 文件拷贝到 PHP 能够找到的目录下并改名为 php.ini。PHP 默认在 Windows 目录下搜索 php.ini:





在 Windows 9x/ME/XP 下将选择的 ini 文件拷贝到 %WINDIR%,通常为 c:\windows。

在 Windows NT/2000 下将选择的 ini 文件拷贝到 %WINDIR% 或 %SYSTEMROOT% 下,通常为 c:\winnt 或 c:\winnt40 对应于服务器版本。





3.修改Apache的httpd.conf文件(在D:\Program Files\Apache Group\Apache2\conf下),在最后添加:

ScriptAlias /php/ “D:/PHP/”

AddType application/x-httpd-php .php

Action application/x-httpd-php “/php/php-cgi.exe”

4.修改php.ini文件,将extension_dir改成extension_dir = “D:\PHP\ext”;

如果要用mysql的话去掉extension=php_mysql.dll前面”;”

5.在系统变量PATH路径中添加D:\PHP

方法:右击我的电脑,选择属性>>高级>>环境变量>>系统变量>>编辑Path,在Path最后补上D:\PHP即可





6.配置完后,在apache安装目录下的htdocs文件夹建立一个test.php文件,代码如下:

phpinfo();

?>

然后在浏览器中输入http://localhost/test.php若配置成功,则显示php相关的信息。



7.某些扩展库需要附加的 dll 文件才能工作。其中一部分可以在压缩包中找到,在 c:\php\dlls\ 目录下,但有一些,例如 Oracle(php_oci8.dll)需要的 dll 没有在压缩包中绑定。将绑定的 dll 从 c:\php\dlls 目录拷贝到 Windows 路径中,例如:





c:\windows\system for Windows 9x/Me

c:\winnt\system32 for Windows NT/2000

c:\windows\system32 for Windows XP





如果这些文件已经安装在你的系统中,仅在不能正常工作的情况下覆盖它们(在覆盖之前,最好先将其备份,或者移动到其它目录 – 以防出错)。



注: 如果你运行 PHP 的服务器模块版本,记得重启动 webserver 来使你对 php.ini 的改动生效。
发表评论