xss公开教学[第三课]网站后台的利用
我们前一节课讲了留言板代码的分析
今天我们来研究网站后台的利用
一般看见了一个网站的后台,在没有破解出帐户密码的情况下
我们很难进入
但是 作为我们小菜 大家都会尝试一下常用的账号密码
当然大多数是 失败
但是大家是否注意到他的提示信息啊
我本来找到了一个程序但是 不小心把他删掉了
所以 今天 我们只有来虚拟一下
他的代码是我写的
但是在现实中很常见的
我看见过很多】而且是一些很有名的 网站啊
一.前置知识
1.Asp内置对象
在asp引擎中提供了六大内置对象,即request对象,response对象,application对象,server对象,session对象和objectcontext对象,其中最常用的是前面5个,在脚本中不必创建这些对象,便可以直接访问他们的方法,属性和集合,以来扩展脚本的功能。
我们今天主要讲的是response
Response对象于一个http响应对应,通过该对象的属性和方法可以控制如何将服务器的数据发送到客户端浏览器。
这里只讲一些常用的 我们要用到的
其他的大家可以自己看书
这里主要讲的是
1.1向用户端输入数据
使用response对象的write方法可以将指定的字符串写到当前的http输入,语法
response.write variant
其中variant参数指定要写入的数据,
使用write方法时,注意以下几点
(1)variant 参数值可以包含任何有效的html标签,但是不能包括字符组合%>,如果的确需要使用这个字符组合,可以使用转义序列/%>,来代替,
1.2重写定向网址
使用response对象的redirect方法可以使浏览器尝试连接到其他url,语法
Response.redirect URL
应注意以下二点
1.在页面中调用redirect方法时,任何在页面中显示设置的响应正文内容都将被删掉,该方法不向客户端发送该页面设置的其他HTTP标题,但会产生一个将重定向URL做为连接包含的自动响应正文
2.必须在向浏览器发送输出前调用redirect方法。通常在<html>标记前调用该方法,若要在<html>标记后调用它,则必须将response.buffer属性为true
一般后台都是采用get方式提交错误分析
而且在接受数据的时候没有过滤
所以我们就有可乘之机
关于get。Cookie.post的区别我们下节课再讲
今天就来看看我 构造的代码
这里要说明源程序不存在这种问题
我前面说了,我原来的那个程序删掉了
没办法我只有重写构造了一个
大家不用下载这套程序了
他不存在这个问题
但是网上有很多后台有这个问题
很简单我只是说明他的存在,没有设计漂亮的外表啊
大家自己可以好好的设置一下啊
二.代码分析
<%@language=vbscript codepage=936 %>
<!--#include file="inc/conn.asp"-->
<!--#include file="inc/config.asp"-->
<!--#include file="inc/md5.asp"-->
<%
dim sql,rs
dim username,password,CheckCode
username=replace(trim(request("username")),"'","")
password=replace(trim(Request("password")),"'","")
CheckCode=replace(trim(Request("CheckCode")),"'","")
if UserName="" then
FoundErr=True
ErrMsg=ErrMsg & "用户名不能为空"
如果用户名为空 它的 提示信息就会出来
end if
if Password="" then
FoundErr=True
ErrMsg=ErrMsg & "密码不能为空"
如果密码为空 它的 提示信息就会出来
end if
if CheckCode="" then
FoundErr=True
ErrMsg=ErrMsg & "验证码不能为空"
如果验证码为空 它的 提示信息就会出来
end if
if session("CheckCode")="" then
FoundErr=True
ErrMsg=ErrMsg & "你登录时间过长,请重新返回登录页面进行登录"
end if
你登录时间过长,请重新返回登录页面进行登录"
它的 提示信息就会出来
if CheckCode<>CStr(session("CheckCode")) then
FoundErr=True
ErrMsg=ErrMsg & "您输入的确认码和系统产生的不一致,请重新输入"
end if
if FoundErr<>True then
password=md5(password)
set rs=server.createobject("adodb.recordset")
sql="select * from admin where password='"&password&"' and username='"&username&"'"
rs.open sql,conn,1,3
if rs.bof and rs.eof then
FoundErr=True
ErrMsg=ErrMsg & "用户名或密码错误"
else
if password<>rs("password") then
FoundErr=True
ErrMsg=ErrMsg & "用户名或密码错误"
else
rs("LastLoginIP")=Request.ServerVariables("REMOTE_ADDR")
rs("LastLoginTime")=now()
rs("LoginTimes")=rs("LoginTimes")+1
rs.update
session.Timeout=SessionTimeout
session("AdminName")=rs("username")
rs.close
set rs=nothing
call CloseConn()
Response.Redirect "Admin_Index.asp"
end if
end if
rs.close
set rs=nothing
end if
if FoundErr=True then
call WriteErrMsg()
end if
call CloseConn()
'****************************************************
'过程名:WriteErrMsg
'作 用:显示错误提示信息
'参 数:无
'****************************************************
sub WriteErrMsg()
Response.Redirect ("test.asp?msg="+ErrMsg)
end sub
%>
这就是我构造的
他的意思就是把错误信息发给test.asp
在test.asp中提示给用户
让我们来看看test.asp是怎么构造的
<%
Response.write(Request("msg"))
%>
当然 在 现实中不会只用一句代码
但是 我觉得他很说明问题