大家好:
小弟做ASP开发多年,对于常见的ASP注入及防范都有一些经验。但这次的问题绝对是没见过的。
IIS日志发现注入时是使用GET方式访问某ASP文件。该ASP文件仅为根据ID查询新闻的页面,已做了CONN通用防注入代码,另也做了 cint 判断。黑客访问该文件时没有添加任何参数,GET,POST都没有,但数据库的值被改了。
由于IIS日志无法记录POST参数,无奈之下,我对所有get,post过来的参数单独做文本日志记录。但发现该黑客在入侵时也不提交任何数据。
会否存在可能,就是黑客饶过了IIS日志记录,将一种新型的注入方式进行数据库操作。
这种操作可以饶过iis日志记录也可以饶过cint(request( "id "))等类似方式。但最后还能注入进来。
急。。。。。。。。。
------解决方案--------------------
freejanker(黑色流星) ( ) 信誉:100 Blog 加为好友 2007-06-07 11:32:12 得分: 0
还有一种可能,对方直接用nc来修改提交信息(参数),可能也会产生这样的IIS记录。
-----------------------------------
这种小白的说法就还是不要到处说了
-------------------------------------
to:楼主
注入又不一定要从get/post的参数里入手,你敢保证你的程序里使用的其他值有过滤么?比如cookie/agent/referer等等
------解决方案--------------------
如果你确定是SQL注入,那么跟踪request不如跟踪conn.Execute,把conn.execute都用一个函数代替了,例如:
Public Function MyExecute(ByVal strSQL)
'记录strSQL到日志里
Set MyExecute = conn.Execute(strSQL)
End Function
------解决方案--------------------
通用防注有漏洞
------解决方案--------------------
管你什么nc,你是要看网站吧,你就要提交数据到页吧,
管你是cookie还是url参数,想要调用,你都要request吧,
如果说楼主对ID进行了验证,你能跳过吗?
所谓通用,就是垃圾的代名词,
针对性的检测速度更快,效果更好,
数据安全性,正则+正确的sql语句就够了(有的还更简单)。
------解决方案--------------------
把你构造SQL 语句,插入数据库的那段代码贴出来,分析分析
------解决方案--------------------
客户端怎么提交。用 nc,还是其他提交工具,还是ie, 还是自己编程用socket提交。
这些对于 iis,apache来说是透明的,服务器根本不知道,不关心,也没有必要知道你用什么工具提交的。
因为不管你用什么工具提交,服务器最终能拿到的都是数据包。
通俗点说就是
POST /news.asp HTTP/1.1
....
...
....
请求数据主题
服务器可以从http报文里面拿到所有的信息 GET,POST,Cookie,Session,http-header.
但是一般情况下 iis,apache 只是记录 get(post)请求到日志。
日志没有问题,只能说 get,post信息没有问题。还有其他很多方面
Cookie,Refer,User-Agent 都是其他比较常见,但是程序员比较容易忽视的攻击点
那些什么所谓的通用检查,看代码就知道是垃圾了,一坨的 if or ..or ..or
一般只检查了 post,get 个别也检查了 cookie http-header都没有做检查
所以,建议楼主看问题看全面一点。
最后,最重要的一点。如果对方是有经验的攻击者,他攻入你的系统后做的第一件事情应该就是
修改iis日志。 删除(修改)那些关于他的攻击记录。
所以说系统被攻击后,日志只能做为参考,不能做为破案工具。 最基本的还是要从源代码入手。
一行一行的找漏洞。
------解决方案--------------------
devms(来不及伪装成人) ( ) 信誉:100 Blog 加为好友 2007-06-08 09:28:42 得分: 0
如果你的意思是指构造包后用nc来发送这种现象就统称为 "用nc提交 ",我就不得不服了.自己写个socket应用很难么,nc只不过是给不懂的人用的罢了
--------------------------------
唉~~~和你一个××沟通真难,现在才明白我的意思。一个很简单的东西,××总是搞得很复杂,要不要我自己造一台电脑,然后写一个系统,再来…………,对××无话可说了。难怪有一句和经典的话“××年年都有,今年特别多”,送给你这样的人再合适不过了。再和你说下去我都要成××,还是不说的好。
------解决方案--------------------
我一向不支持防注,而提倡容注,容注的意思不是说允许对方注入,而是可以容纳对方注入
善用类型转换和ADO可以容纳任何注入
1、查询使用ADODB.Command,虽然它的速度比不上ADODB.RecordSet,但是1000次查询里相差1秒,可以忽略不计
2、新增和更新使用ADODB.RecordSet的AddNew和Update方法,rs(???) = "*** ",文本类型的数据使用这种方法是非常好的,可以[容纳]任何SQL注入,颇有九阳神功里 "他强任他强,清风拂山岗;他狠任他狠,明月照大江。 "的大家风范。数字类型的字段,则要配合类型转换使用。Update还有个好处就是新增数据后,马上可以获得刚新增数据里的IDENTITY的值。
3、类型转换要强制执行,例如非数字或者超过类型范围的数据转数字,强制为0,这里我写有个例子,自己去看,我就不复制代码了:http://community.csdn.net/Expert/topic/5541/5541503.xml?temp=.6943628
顺便提供由它扩展的几个快捷类型转换
'Variant To Integer
Public Function atoi(vtIn)
atoi = ChangeType(vtIn, vbInteger)