如何绕过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验证进入后台?的主要内容,如果未能解决你的问题,请参考以下文章

网站后台提示token验证失败的原因 如何应对

如何在ubuntu系统中验证系统文件的md5

MD5加密--项目案例

下载软件后为啥要验证md5?

md5等验证正确,就能确定文件一定没被修改过吗

请问在ASP中如何验证有JAVA传过来的MD5SUM后的密码