[转]关于NTLM认证的.NET,php,python登录
本文转自:http://www.cnblogs.com/myx/archive/2013/03/25/php-ntlm-python-net.html
早期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())

[转]关于NTLM认证的.NET,php,python登录的更多相关文章
- iOS进行Basic认证与NTLM认证
一.iOS进行Basic认证 只需要在NSMutableURLRequest的Header中添加认证所需的Username和password. NSMutableURLRequest *webReq ...
- NTLM认证协议及SSPI的NTLM实现
没错,NTLM就是你听说过的那个NTLM.是微软应用最广泛的认证协议之一. NTLM是NT LAN Manager的缩写,这也说明了协议的来源.NTLM 是 Windows NT 早期版本的标准安全协 ...
- 域渗透基础之NTLM认证协议
域渗透基础的两个认证协议ntlm和Kerberos协议是必须总结的~ 这篇简单总结下ntlm协议 晚上写下kerberos 0x01 NTLM简介 NTLM使用在Windows NT和Windows ...
- python登录验证程序
自己写的一个python登录验证程序: 基础需求: 让用户输入用户名密码 认证成功后显示欢迎信息 输错三次后退出程序 升级需求: 可以支持多个用户登录 (提示,通过列表存多个账户信息) 用户3次认证失 ...
- 用python登录远程salt,并执行命令
用python操作saltstack,如果是在本地,则可以用python的salt模块,但如果要操作远程saltstack,则不行,今天就来看看怎么操作. 用python操作远程的saltstack, ...
- selenium(python)登录时账号密码错误提示语
selenium(python)登录时账号密码错误提示语的获取 可以用text
- 教育改革——国家认证 “网红” 编程语言 Python
特大消息!!! 不止是上海计算机二级考试 ,全国计算机考试等级考试也有要求 如果你正打算考计算机等级,那你需要学习以下知识 要求学习的知识太多了,我就不一一在这里展示了! 一.考试改革的目标 据悉 ...
- 聊聊NTLM认证协议
近期发现多家安全媒体发布NTLM协议漏洞的文章.他们越说越术语,越说越官方,如此这般下去,他们写出来到底给谁看?大雅就是俗,让我来一篇俗文.啥是NTLM呢?微软windows系统的用户账号存储密码哈希 ...
- 记录使用Python登录浙江大学统一身份认证
背景 现在每天要进行健康情况上报,但是因为经常睡过头忘记打卡,于是想着写一个程序来自动打卡. 统一身份认证 访问健康情况上报页面(https://healthreport.zju.edu.cn/nco ...
随机推荐
- C# Session操作
Session.Abandon();//清除全部Session//清除某个SessionSession["UserName"] = null;Session.Remove(&quo ...
- linux学习之用户的切换
普通用户: 输入su 用户名,点击Enter Root用户: 输入su root,点击Enter 输入登录密码,点击Enter
- php—Smarty-缓存1(25)
一. 缓存原理: IE:将资源文件保存至本地 Smarty:将缓存保存到服务器 编译 < 缓存 < 静 ...
- 【OCP 12c】最新CUUG OCP-071考试题库(64题)
64.(22-7) choose the best answer: View the Exhibit and examine the structure of the ORDERS and ORDER ...
- Java-File类获取目录下文件名-遍历目录file.listFiles
package com.hxzy.IOSer;import java.io.*;/*File 类获取功能 * List * ListFile * */public class Demo06 { pub ...
- Kali Linux来袭~老司机带你进击
Kali是BackTrackLinux完全遵循Debian开发标准彻底的完全重建.全新的目录框架,复查并打包所有工具,我们还为VCS建立了Git树. 本次推荐内容主要介绍Kali-Linux的安装,包 ...
- Nodejs Express模块server.address().address为::
来自 http://blog.csdn.net/medivhq/article/details/74171939 我按照菜鸟教程上的写法为:(http://www.runoob.com/nodejs/ ...
- var 是 Java 开发的好朋友啊!
简评:Java var != JavaScript var. Java 10 中引入了新的语法用于局部变量类型推断,很多开发者有所疑惑,希望这篇文章能帮到你. 什么是类型推断 其实在 Java 中类型 ...
- react onclick传递参数
最近在做react项目的时候,被一个小问题绊了一脚,记录一下 onClick 传入参数 onClick={e=>{this.Mallclose(e,index)} onClick={this.M ...
- 40.oracle事务
一.事务特性 事务必须具备以下四个特性,简称ACID属性 原子性(Atomicity):事务是一个完整的操作.事务的各步操作是不可分割的(原子的):要么都执行,要么都不执行场景:银行转账 A-100 ...