如何绕过MD5验证进入后台?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何绕过MD5验证进入后台?相关的知识,希望对你有一定的参考价值。
以下是详细代码:
<!--#include file="../conn.Asp"-->
<!--#include file="../incsub/websub.asp"-->
<!--#include file="../Incsub/Config.asp"-->
<!--#include file="../incsub/md5.Asp"-->
<%
If request.QueryString("action")="login" Then
user_name = ReplaceBadWord(request.form("user_name"))
user_pwd_1 = Request.form("user_pwd")
user_pwd = md5(ReplaceBadWord(user_pwd_1))
Code = Request.form("Code")
If Code <> Session("GetCode") And Session("GetCode") <> "" Then
%>
<script language="javascript">
alert("验证码不正确")
document.location="index.asp"
</script>
<%
Session("GetCode") = Null
Response.End()
Else
Session("GetCode") = Null
End If
Sql="Select [id] From [FYBlog_user] where [user_name] = '"& User_name &"' And [user_pwd] = '"& user_pwd &"'"
Set Rs=Server.CreateObject("adodb.recordset")
Rs.open Sql,Conn,1,1
If Rs.Eof Then
%>
<script language="javascript">
alert("用户名或密码错误")
document.location="index.asp"
</script>
<%
Response.End()
Else
Response.Cookies("admin_name")= user_name
Response.Cookies("admin_pwd") = user_pwd
Response.Redirect("Control.asp")
Rs.Close
Set Rs = Nothing
Conn.Close
Set Conn = Nothing
End If
End If
%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<link href="../skin/server.css" rel="stylesheet" type="text/css">
<title>后台管理 - <%=web_name%></title>
</head>
<script type="text/javascript">
function Login_admin()
if(document.admin_login.user_name.value.length<2)
alert("用户名必须填写");
document.admin_login.user_name.focus();
return false;
if(document.admin_login.user_pwd.value.length<5)
alert("密码必须填写");
document.admin_login.user_pwd.focus();
return false;
if(document.admin_login.Code.value.length<4)
alert("验证码必须填写");
document.admin_login.Code.focus();
return false;
return true;
</script>
<body>
<div class="ServerLogin">
<form action="index.asp?action=login" method="post" name="admin_login" onSubmit="return Login_admin();">
<div class="logo">KETEO</div>
<ul>
<li>用户名:<input name="user_name" type="text" /></li>
<li>密 码:<input name="user_pwd" type="password" /></li>
<li>验证码:<input name="Code" type="text" id="Code" style="width:50px;" maxlength="4" /> <img src="../GetCode.asp?" width="50" height="12" border="0" align="absmiddle" style="cursor:hand;" title="点击刷新验证码" onClick="this.src += Math.random()"></li>
<li><input name="Submit" type="submit" class="but" value="登 陆" /></li>
</ul>
</form>
</div>
</body>
</html>
谁说具体买点修改方法!!!!
最好把修改完的代码贴出来,好的追加分!
<%
If request.QueryString("action")="login" Then
user_name = ReplaceBadWord(request.form("user_name"))
user_pwd_1 = Request.form("user_pwd")
user_pwd = md5(ReplaceBadWord(user_pwd_1))
Response.Cookies("admin_name")= user_name
Response.Cookies("admin_pwd") = user_pwd
Response.Redirect("Control.asp")
Response.End() 参考技术A 应该修改这个部分return Login_admin()。
这个部分不在该文件里。在Control.asp里应该,
我绕过验证的模拟登陆的崎岖倒流
由于好奇一直想试试模拟登陆,然后就把目标定在某所大学的登录网站上
大至样式就是这样的
通过界面我们大致可以了解到请求可能会后username,password,验证码,记住用户
接着使用burp进行抓包得:
可以通过post请求知道dlm就是uesrname,hexMd5是加密后的password(加密手段应该是MD5),cookie就是记住用户
...等等,怎么没有验证码,真奇怪,算了待会再看验证码把
通过浏览器中查看源码,得:
我们看出来dlmm是原始密码,而hexMd5是通过md5加密后的值
而后我的好奇心又回到了验证码上,源码显示:
哈哈哈,验证码居然在明面上,那简直太简单了,抓一下试试,代码如下:
1 import re 2 def reg_html(html): 3 parttern = re.compile(r\'<input type="hid.*\') 4 yzm = parttern.findall(html) 5 return yzm
但结果也大失所望,抓到的value值为空,可能是我对前端知识不太了解,愿意坚持看下去
发现这个验证码调用了一个js的generateMixed函数
找到这个函数 得:
大致看明白了,别的还好说,关键这个random就让人没法弄啊。苦恼想放弃.....回家!
在路上,我问了一个师哥,我说我的post请求里没有验证码这是什么情况,他告诉我两种情况:
1 验证码在只是在前端作为一个check,可以绕过
2 验证码可能和用户密码等参数分着发过去了
我不解,回去用fiddler又做了一次抓包,post的数据中确实没有验证码,所以我猜想是第二种可能
于是我写了个脚本进行验证 代码如下:
1 #!/usr/bin/env python 2 #coding:utf-8 3 4 import re 5 import requests 6 from bs4 import BeautifulSoup 7 import hashlib 8 9 URL = \'http://xxxxx.xxxxxx.edu.cn/login.login.action\' #login_url 10 URL_p = \'http://xxxxx.xxxxxx.edu.cn/login.toStudentJsp.action?math=4636\' #跳转url,可以通过js找到 11 URL_p2 = \'http://xxxxxx.xxxxxx.edu.cn/stumiddle.jsp\' #user_info_url 12 13 def md5Encode(string): 14 m = hashlib.md5() 15 m.update(string) 16 return m.hexdigest() 17 18 def post_html(url,url2,url3): 19 session = requests.Session() 20 headers = {\'User-Agent\':\'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1581.2 Safari/537.36\'} 21 payload = {\'dlm\':\'xxxxxxxxxxxxxxx\', 22 \'hexMd5\':\'%s\'%md5Encode(\'xxxxxxxxxxxxxx\'), 23 \'cookie\':\'0\' 24 } 25 session.post(url,data=payload,headers=headers) 26 session.get(url2,headers=headers) 27 text = session.get(url3,headers=headers).text 28 return text 29 30 def parser_html(html): 31 soup = BeautifulSoup(html,\'html.parser\') 32 return soup.prettify() 33 34 35 if __name__ == \'__main__\': 36 parser_html(post_html(URL,URL_p,URL_p2))
其中URL_p可以通过fiddler抓包得到或者通过js的跳转代码也可以找到,其中math=4636,如果看到js源码,这个就是js随机生成的一个4位数,可能为了标记每次的用户信息页面不一样吧
URL_p2通过fildder可以找到
运行这个脚本,如果我们的username或者password有错误,会返回这个text
但如果正确,则会get到正确页面,下图是上面脚本运行后,fiddler抓到的
模拟登陆成功了!,完全绕过了页面的验证码环节。
那么话说回来,既然有账号密码,我用的着这么麻烦,我个人认为有两方面原因
一是为了练习一下模拟登陆
二是可以 b r u t e f o r c e 阿,但我有个不好的消息,这所大学的登录系统,如果5次尝试失败,会将username冻住30分钟。这真是杀敌一千自损八百啊,
但如果你要真想让这个用户崩,你可以写一个30钟登录5次的模拟登陆脚本,让该用户始终上不了。
haha,不聊了,看电视剧去了
以上是关于如何绕过MD5验证进入后台?的主要内容,如果未能解决你的问题,请参考以下文章