惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Microsoft Azure Blog
Microsoft Azure Blog
博客园_首页
Forbes - Security
Forbes - Security
WordPress大学
WordPress大学
P
Proofpoint News Feed
T
Threat Research - Cisco Blogs
L
LINUX DO - 热门话题
L
Lohrmann on Cybersecurity
Spread Privacy
Spread Privacy
D
Darknet – Hacking Tools, Hacker News & Cyber Security
大猫的无限游戏
大猫的无限游戏
博客园 - 三生石上(FineUI控件)
P
Privacy International News Feed
A
About on SuperTechFans
T
Tailwind CSS Blog
I
InfoQ
S
Securelist
云风的 BLOG
云风的 BLOG
罗磊的独立博客
Recent Announcements
Recent Announcements
T
The Exploit Database - CXSecurity.com
B
Blog RSS Feed
V
Visual Studio Blog
Know Your Adversary
Know Your Adversary
The GitHub Blog
The GitHub Blog
Jina AI
Jina AI
腾讯CDC
Cyberwarzone
Cyberwarzone
有赞技术团队
有赞技术团队
AWS News Blog
AWS News Blog
博客园 - 【当耐特】
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
F
Full Disclosure
S
Secure Thoughts
博客园 - 司徒正美
J
Java Code Geeks
Y
Y Combinator Blog
Google Online Security Blog
Google Online Security Blog
GbyAI
GbyAI
N
News and Events Feed by Topic
Help Net Security
Help Net Security
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Project Zero
Project Zero
T
Tenable Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
T
Tor Project blog
MyScale Blog
MyScale Blog
Scott Helme
Scott Helme
小众软件
小众软件
K
Kaspersky official blog

博客园 - myx

安装gitlab管理自己的代码 升级Tornado到4后weibo oauth登录不了 SQL Server 无日志文件附加数据库 用monit监控系统关键进程 Failed to read auto-increment value from storage engine错误的处理方法 今天测试了一下 sqlalchemy 性能 PIL The _imaging C module is not installed phpExcel大数据量情况下内存溢出解决 tcpdf慢及常用的一些方法及问题 Python获取WebService CodeIgniter出现Disallowed Key Characters的问题 CodeIgniter链接ms sql 如果数据库名称有点号连接出错 用python写windows服务 CodeIgniter链接ms sql 的过程windows 2008 DotNetOpenAuth的Facebook登录,获取头像与基本资料 php里的html内容切取 js生成新加坡的NRIC号码 Sina站内应用的登录 PowerDesigner 链接MySql 用ODBC链接不上的问题
关于NTLM认证的.NET,php,python登录
myx · 2013-03-25 · via 博客园 - myx

早期SMB协议在网络上传输明文口令。后来出现 LAN Manager Challenge/Response 验证机制,简称LM,它是如此简单以至很容易就被破解。微软提出了WindowsNT挑战/响应验证机制,称之为NTLM。现在已经有了更新的NTLMv2以及Kerberos验证体系。NTLM是windows早期安全协议,因向后兼容性而保留下来。NTLM是NT LAN Manager的缩写,即NT LAN管理器。NTLM 是为没有加入到域中的计算机(如独立服务器和工作组)提供的身份验证协议。


NTLM验证允许Windows用户使用当前登录系统的身份进行认证,当前用户应该是登陆在一个域(domain)上,他的身份是可以自动通过浏览器传递给服务器的。它是一种单点登录的策略,系统可以通过NTLM重用登录到Windows系统中的用户凭证,不用再次要求用户输入密码进行认证。

其实这次要做的功能主要是PHP的NTLM登录,不过搜索了很久,都没找到具体的。见到最多资料就是:
https://github.com/loune/php-ntlm
不过ntlm_prompt("testwebsite", "testdomain", "mycomputer", "testdomain.local", "mycomputer.local", "get_ntlm_user_hash"); 好像没有具体的用户名与密码,测试的时候还是在游览器弹出窗口要求输入用户名密码。在其他地方都没找到可用了。后来看CURL里面有个--ntlm,一测试,原来还这么简单的。

        $url = 'http://xxxx.com/HomePage/info.aspx';//注意:是要获取信息的页面地址,不是登录页的地址。
        $user ='test';
        $password ='testpwd';
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HEADER, true); //加上这可以获取cookies,就是输出的$result的前面有header信息
        curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
        curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM);
        curl_setopt($ch, CURLOPT_USERPWD, $user.':'.$password);
        $result = curl_exec($ch);
        preg_match_all ('/^Set-Cookie: (.*?);/m',$result,$m); //获取cookies
        var_dump($m);

.Net的获取方式也很简单,代码如下:

try
            {
                CredentialCache MyCredentialCache = new CredentialCache();
                MyCredentialCache.Add(new Uri("http://www.xxx.com/infot.aspx"), "NTLM", new NetworkCredential("test", "testpwd", "domain"));
                HttpWebRequest req;
                req = (HttpWebRequest)HttpWebRequest.Create("http://www.xxx.com/info.aspx");
                req.Method = "GET";
                req.KeepAlive = true;
                req.Credentials = MyCredentialCache;
                //保存cookie
                CookieContainer cc = new CookieContainer();
                req.CookieContainer = cc;
                HttpWebResponse res;
                res = (HttpWebResponse)req.GetResponse();
                Console.WriteLine(res.StatusCode);
                Console.WriteLine("------------------------");
                Console.WriteLine(res.Headers.ToString());
                if (res.StatusCode == HttpStatusCode.OK)
                {
                    //验证成功
                    Console.WriteLine(res.StatusCode);

                }
            }
            catch (Exception ex)
            {
                //验证失败

            }

Python:python-ntlm(官网地址:http://code.google.com/p/python-ntlm/)是一个用来访问NTLM认证网址的module, 代码的那边搬过来的。我测试可用:

    url = "http://www.xxx.com/info.aspx"  #就是注意这个是获取信息的地址。不是登录的。刚开始测试用的登录的地址。那样是不行的。
    user = u'randy\\test'
    password = 'testpwd'
        
    passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
    passman.add_password(None, url, user, password)
    # create the NTLM authentication handler
    auth_NTLM = HTTPNtlmAuthHandler(passman)
    
    # create and install the opener
    opener = urllib2.build_opener(auth_NTLM)
    urllib2.install_opener(opener)
    
    # retrieve the result
    response = urllib2.urlopen(url)
    print(response.info())
    print(os.path.join(os.getcwd(),"1.txt"))
    #outfile = open(os.path.join(os.getcwd(),"1.htm"), "w")
    #outfile.write(response.read())