Web网站程序编写中的安全软肋
不管你的硬件防护措施如何的强大和严密,软件程序的算法和结构如何的规范严谨、网页程序编写时过滤的如何的严格,依然会破绽百出,这是为什么呢?因为Web程序的漏洞是永远都防不胜防的。例如动网论坛,动网经历了这么多年,被人不断的发掘出这么多的漏洞,其中有很多漏洞都是一些很低级的错误。一个纯静态的网页,不知道后台,也不知道FTP帐号密码等信息,但是它还是被人拿下了,这又是为什么呢?今天就让笔者来替大家进行一次不完全归纳及简要分析。下面我们一起来看一下由于程序员在软件编写过程中的疏漏导致的漏洞。IXPUB技术博客`\ Zqid
IXPUB技术博客1c n?5kb g网站程序存在的漏洞IXPUB技术博客+W1W;XA/o7U1t3L^
8nti[I$Qk!r4v&aE0 1. 注入漏洞IXPUB技术博客,P6UN:`j`M5S#I
2. 上传文件格式验证不完善IXPUB技术博客iGO!WIy
3. 参数可写入文件——构造一句话
@'h^W+h;cl0 4. mdb数据库改用ASP\ASA等名字作为数据库扩展名(添加防下载代码)IXPUB技术博客[:{*q#^1s/da7@R)bW
5. 后台显示数据库路径IXPUB技术博客Oy7T:m`
6. 数据库可备份修改扩展IXPUB技术博客'x5HCB+I/}_J
B
7. 文件管理部分传递参数过滤问题及外部提交
0e[,bdaz5|'Hn0 8. XSS漏洞骗取cookies得到后台权限IXPUB技术博客8y-cE-|%]Yrb.S
9. 任意文件下载漏洞
W O6W;FnrM/s0 10. 远程包含漏洞
ZwU!oKs0 11. 使用未加密的cookies进行用户权限等级及权限验证
$z#~xBEs0 12. session被构造欺骗
下面就让我们来简要分析下这些漏洞的形成和解决办法:IXPUB技术博客)g N ^"o(F0Q+J'k
IXPUB技术博客g7O-ns.QxT0z (1) 注入漏洞IXPUB技术博客L;R+D:_p2w
V0^G~
注入漏洞的产生原理:IXPUB技术博客?/ASl2WN-W
我们来手工构造一段存在注入漏洞的查询程序,这里就使用asp比较简单明了
w(OI2`0]
n.u0 <!--#include file="conn.asp"-->
0o?/XA0|3?0p+?0 <%
sP x~~O$w0~0 Id=request("id")
rerq1a,J0 if id<>"" then
qT%e
`s)R^rn0 Set rs=Server.CreateObject("ADODB.RecordSet")IXPUB技术博客?ed/q z3gkr
sql="select * from news where id="&id
"M#mD,X*]nSh5Q%o0 rs.Open sql,conn,1,1
:O
AzMK/I8G0 response.write "标题:"&rs("title")&"<br>"IXPUB技术博客 y(q$Pj(qb
response.write "内容:"&rs("content")
!`8B6HD5}2hnq0 set rs=nothing
Gf;wU5yDr]0 rs.colse
4U2A9L0y.K~0 elseIXPUB技术博客4A Yl+q']/UB{!G
response.write "缺少参数"IXPUB技术博客u],E?_4?
end if
C-tWf5myXi]JJ0 %>IXPUB技术博客$~V)Q5p S
cT
这段代码直接从浏览器接收了id的值,然后不进行任何过滤就提交进数据库查询,首先我们来判断下是否存在注入,通常使用的办法是 and 1=1返回正常IXPUB技术博客 nc:q!|P8k
and 1=2返回错误或无返回内容则认为存在注入漏洞,我个人经常偷懒直接在地址栏后面加上一个“’”,返回错误或无返回内容则认为有注入。IXPUB技术博客0r~w+ar
kK9n@e.h0 构造注入语句:
7}I(uzKh4r0E7x0 and exists (select count(*) from admin)IXPUB技术博客B0IL
nkD/x~`#z
将这段代码加到地址后面就是
$IK \3V7q psW0 http://localhost/index.asp/id=1and exists (select count(*) from admin)IXPUB技术博客9mWaY:t/DQ
K4L*G
那么在程序中接收到的参数就变成了后面的联合查询语句,我们带入数据库查询部分。看看结果如何?IXPUB技术博客GZ!o8^5E&N |cB
sql="select * from news where id="&1 and exists (select count (*) from admin)IXPUB技术博客Vs6OM0P&HR Mo8A/}_
IXPUB技术博客X{C)OZkx结果显而易见,原来的单句查询变成了联合查询,将admin表的内容进行了查询操作,这个语句是用来判断字段是否存在的。如果字段存在则查询成功,返回正常,字段不存在就返回错误提示,表示不存在表。详细的注入方法这里就不说明了。
^lA1^x'Q'Hr0,|Q }&J~X6p%@)pq0 另外有有一个技巧,有一些站点不是对整站进行过滤的,所以导致出现一些隐藏的注入点。比如有一个文件他对提交的id参数的值进行了过滤无法注入,但是你会留意到地址栏里的参数有很多个的,加入有一个没有进行过滤,同样可以产生注入漏洞。IXPUB技术博客0o~n/GyF{P)U7M
例如:IXPUB技术博客&TZ!J:u5ibR
http://localhost/index.asp?class=1&id=1在程序中有时候只对id这个参数进行过滤而没有对class进行过滤,所以就导致了一个隐藏注入点。我们将地址改为http://localhost/index.asp?class=1,然后再进行注入,如果这个时候程序中没有对id这个参数的非空条件进行处理的话,我们就可能顺利的进行注入了。IXPUB技术博客3TE&AE7x3_I2_-}"D
\r(jR5V EV0 另外一种情况是,有的程序员虽然处心积虑的写好了防注入的自定义函数,但是在程序编写过程中并没有进行调用,所以依然导致注入漏洞的产生。IXPUB技术博客 by+T3K[&T.s t&r
v{"t v:MZ2u0另外现特别需要注意的就是对cookies注入进行过滤,因为现在有特别多的网站程序员都习惯了依赖通用防注入系统,但是旧版本的通用防注入系统都存在一个问题,就是没有对cookies注入进行过滤。
-f(S0g-tNn+l0Mb-vgm l6H9P-q3Z0 也就是说当我们发现一个网站使用了通用防注入的话,就证明网站本身程序并没有对注入进行过滤,当这个网站恰好使用的是一个旧版本的通用防注入程序的话,那么相当于告诉我们“此地无银三百两”了。下面要做的事情就是构造简单的cookies注入语句就可以轻松拿下后台的帐号密码了。
+JX.On?8[#a0NgGf0ZJx7p(u}0 所以程序员要特别注意对程序后台地址的验证或者隐藏,这里对程序员的后台提出以下几点意见:
RSs%Y@:NGO0IXPUB技术博客?-P#W e(J,H,c-\ 1. 后台编写使用类似动易的管理验证码IXPUB技术博客2V"}(oi-d~0N q
2. 后台地址路径手工输入正确地址后转向正确管理后台IXPUB技术博客7d$zIU-]5Z
3. 用户可自定义后台文件夹名称和路径
sR+j kY0 4. 对于不开源的程序,数据库的表名和字段名使用非常规名称IXPUB技术博客
gSTEzPY