根据题目得知,上一个靶场得到的admin是假后台,所以选择查找网站的真实后台,使用扫描工具wwwscan
wwwscan.exe 120.203.13.75 –p 8001 –m 10,回车,经过扫描后发现:
有一个登录页面是admin123/login.asp。尝试登录:
但是登录后不是正常页面,显示为:
对不起,不允许从外部地址登录,思考目标是如何判断我们是从外部地址登录的,由于http协议传输数据包时,会带上访问来源和访问目标,此时怀疑数据包传输时此内容被目标判断为外部地址.且在页面上看到了源码。在抓包的过程中也发现,在请求sysadmin_view.asp的时候,被判断为外部连接
<%
dim ComeUrl,cUrl,AdminName //定义3个变量
ComeUrl=lcase(trim(request.ServerVariables("HTTP_REFERER"))) // request.ServerVariables函数用于获取http头中的referer信息,trim函数用于移除referer中左右两把的空格(不重要),lcase函数用于将字母转换为小写(不重要)
if ComeUrl="" then //如果获取到的referer为空,直接弹出不允许访问提示
response.write "<br><p><font color='red'>对不起,为了系统安全,不允许直接输入地址访问本系统的后台管理页面。</font></p>"
response.end
else // referer有值为else情况
cUrl=trim("http://" & Request.ServerVariables("SERVER_NAME")) //将curl变成http://server_name
if mid(ComeUrl,len(cUrl)+1,1)=":" then //判断referer中的地址中间部位是不是”:”号
cUrl=cUrl & ":" & Request.ServerVariables("SERVER_PORT") //将crul变成http://server_name: SERVER_PORT
end if
cUrl=lcase(cUrl & request.ServerVariables("SCRIPT_NAME")) //将curl变成http://server_name: SERVER_PORT/ SCRIPT_NAME -- SCRIPT_NAME为相对路径,比如说“http://localhost/bbs/post.asp”,那么返回的就是“bbs/post.asp”。
if lcase(left(ComeUrl,instrrev(ComeUrl,"/")))<>lcase(left(cUrl,instrrev(cUrl,"/"))) then
//referer中取得的是http://120.203.13.75:8001/admin123/default.asp(也就是ComeUrl),curl是取了服务器的ip(Request.ServerVariables("SERVER_NAME")),也就是http头中的host,加上后面语句的端口,组成:http://server_name: SERVER_PORT,在判断条件时变成是不相等,跑出下面语句。
response.write "<br><p><font color='red'>对不起,为了系统安全,不允许从外部链接地址访问本系统的后台管理页面。</font></p>"
response.end
end if
end if
通过审计,发现对方从host和referer进行判断我们是否referer和host来自不同的地方。如果是则不允许外部地址,管理在登录的时候,referer是来自他的服务器,所以host和referer相同。那从代码中看,我们只要让host和referer来自相同的地方即可,我们也将抓到的数据包中,请求的referer和host都改成相同的本地ip:127.0.0.1。即可绕过对方代码判断进行登录,实际上,只要将host和referer改为除120.203.13.75:8001以外任何相等的值就行,包括可以改为120.203.13.75,localhost,186.168.10.52之类编造的IP。
打赏我,让我更有动力~
© 2016 - 2024 掌控者 All Rights Reserved.