﻿<%@ Page Language="C#" Debug="true" trace="false" validateRequest="false" EnableViewStateMac="false" EnableViewState="true"%>
<%@ import Namespace="System.Management"%>
<%@ import Namespace="System.Collections"%>
<title>Exploits Searcher</title>
<%
//Code By zcgonvh,part of GMH'S Fuck Tools
//Blog: z-cg.com
string pairs=@"
KB952004:MS09-012/PR
KB956572:MS09-012/churraskito
KB2393802:MS11-011
KB2592799:MS11-080
KB2621440:MS12-020
KB2160329:MS10-048
KB970483:MS09-020/IIS6 up(could be)
KB2124261:MS10-065/IIS7 up(could be)
KB2271195:MS10-065/IIS7 up(could be)
KB977165:MS10-015
KB2360937:MS10-084
KB2478960:MS11-014
KB2507938:MS11-056
KB2566454:MS11-062
KB2646524:MS12-003
KB2645640:MS12-009
KB2641653:MS12-018
KB944653:MS07-067
KB971657:MS09-041
KB2620712:MS11-097
KB942831:MS08-005
KB2503665:MS11-046
";
Hashtable ht=new Hashtable();
foreach(string pair in pairs.Split(new string[]{"\r\n"},StringSplitOptions.RemoveEmptyEntries))
{
	string[] strs=pair.Split(':');
	try
	{
		ht.Add(strs[0].Trim().ToUpper(),strs[1]);
	}catch{}
}
try
    {
		ManagementObjectCollection moc=GetMOC("Win32_QuickFixEngineering");
		Write("<span style=\"color:red;\">{0}</span> HotFix(s) was installed.<br />",moc.Count);
		string showmode=Request["ShowHotFixs"];
		if(showmode!=null)
		{
			if(showmode.Equals("Excel"))
			{
				Response.Clear();
				Response.AddHeader("Content-Disposition", "attachment;filename=HotFixInfo.csv");
				Response.ContentType = "application/octet-stream";
				Response.ContentEncoding = System.Text.Encoding.GetEncoding(0);
				Write("HotFixID\tType\tInstalledBy\tInstalledOn\tDescription\r\n");
				foreach (ManagementObject o in moc)
				{
					Write("{0}\t{1}\t{2}\t{3}\t{4}\r\n",CheckEmpty(o["HotFixID"]),CheckEmpty(o["FixComments"]),CheckEmpty(o["InstalledBy"]),CheckEmpty(o["InstalledOn"]),CheckEmpty(o["Description"]));
				}
			}
			else
			{
				Write("If you want to get a excel list,please click <a href=\"?ShowHotFixs=Excel\">here</a><br />");
				Write("If you want to search exploits,please click <a href=\"?\">here</a><br />");
				foreach (ManagementObject o in moc)
				{
					Write("HotFix with ID:<span style=\"color:red;\">{0}</span> Installed on <span style=\"color:green;\">{1}</span> by <span style=\"color:red;\">{2}</span>,type is <span style=\"color:green;\">{3}</span>,description is <span style=\"color:red;\">{4}</span><br />",CheckEmpty(o["HotFixID"]),CheckEmpty(o["InstalledOn"]),CheckEmpty(o["InstalledBy"]),CheckEmpty(o["FixComments"]),CheckEmpty(o["Description"]));
				}
			}
		}
		else
		{
			Hashtable htc=ht.Clone() as Hashtable;
			DateTime ldt=DateTime.MinValue;
			foreach (ManagementObject o in moc)
			{
				string s=o["HotFixID"] as string;
				if(!String.IsNullOrEmpty(o["InstalledOn"] as string))
				{
					DateTime instime=DateTime.Parse(String.Concat(o["InstalledOn"] as string," 00:00:00"));
					if(instime>ldt)
					{
						ldt=instime;
					}
				}
				if(s.Equals("File 1")){continue;}
				try
				{
					htc.Add(s,null);
				}
				catch
				{
					ht.Remove(o["HotFixID"].ToString().Trim().ToUpper());
				}
			}
			Write("Last patched time:<span style=\"color:red;\">{0}</span>,Last boot time:<span style=\"color:red;\">{1}</span>,Server time:<span style=\"color:red;\">{2}</span></br>",ldt.ToString("yyyy-MM-dd"),GetLastBootTime(),DateTime.Now.ToString());
			if(ht.Count==0)
			{
				Write("Fuck,all HotFixs was patched.<br />");
			}
			else
			{
				foreach(object o in ht.Keys)
				{
					Write("HotFix with ID:<span style=\"color:red;\">{0}</span> was not patched,exploit name is:<span style=\"color:green;\">{1}</span><br />",o,ht[o]);
				}
				Write("<span style=\"color:red;\">{0}</span> Exploit(s) can be used,good luck.<br />",ht.Count);
			}
			Write("If you want to view all HotFix(s),please click <a href=\"?ShowHotFixs=List\">here</a><br />");
		}
    }
catch{Write("Permission denied");}
%>
<script runat=server>
void Write(string s,params object[] obj)
{
	if(obj!=null)
	{
		Response.Write(String.Format(s,obj));
	}
	else
	{
		Response.Write(s);
	}
}
ManagementObjectCollection GetMOC(string cls)
{
	ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2","SELECT * FROM "+cls); 
	return searcher.Get();
}
string CheckEmpty(object o)
{
	string s=o as string;
	return String.IsNullOrEmpty(s)?"Unknown":s;
}
string GetLastBootTime()
{
	IEnumerator ie=GetMOC("Win32_OperatingSystem").GetEnumerator();
	ie.MoveNext();
	return DateTime.ParseExact((ie.Current as ManagementObject)["LastBootUpTime"].ToString().Split('.')[0],"yyyyMMddhhmmss",null).ToString();
}
</script>
