📄 define_unit.pas
字号:
unit define_Unit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,ThreadHttpGet;
function GetURLContent(URL: string): string; //获取所有页面内容(html)
function GetURLMsg(URL: string): string; //获取页面出错信息(报错信息)
function GetURLCode(URL: string): integer; //获取页面的server返回头信息
function GetURLMsgBool(str_url:string):boolean; // 获取页面出错信息(报错信息)
function SQLINJECTIONUrlToHex(SQLINJECTIONURL:String;SqlType:Integer):String;//转换字符为urlecode字符
procedure SaveToLogFile(sPath:string; strLog: string);//日记保存
var
url: string; //url地址
FDbName:string; //当前数据库名
const //用户权限 ,add by jiaozhu
str_Power: array[0..6] of string = (
'sysadmin', 'dbcreator', 'diskadmin',
'processadmin', 'serveradmin',
'setupadmin', 'securityadmin');
implementation
uses
main_unit;
//获取页面内容
function GetURLContent(URL: string): string;
var
IdGetObj:TThreadHttpGet;
begin
try
Result := '';
IdGetObj:=TThreadHttpGet.Create(true);
IdGetObj.TimeOut:=TimeOut;//timeout30秒
IdGetObj.FURL:=URL;
IdGetObj.Success:=false;
IdGetObj.Resume;
while not IdGetObj.Success do
begin
application.ProcessMessages;
sleep(50);
end;
Result :=IdGetObj.sContent;
finally
IdGetObj.Free;
IdGetObj:=nil;
end;
end;
//*****************************************************************
//函数:判断某个页面是否存在
function GetURLMsg(URL: string): string;
function GetResultStr(str: string): string;
var
iStart, iEnd: integer;
ss: string;
begin
iStart := pos('^', str);
if iStart > 0 then
begin
ss := copy(str, iStart + 1, length(str) - iStart);
iEnd := pos('^', ss);
if iEnd > 0 then
begin
ss := copy(ss, 1, iEnd - 1);
end;
end;
if ss = '' then
Result := '未知'
else Result := ss;
end;
var
ss:string;
begin
ss:=GetURLContent(URL);
result:=GetResultStr(ss);
end;
//*****************************************************************
//函数:判断某个页面的
function GetURLCode(URL: string): integer;
var
IdGetObj:TThreadHttpGetHead;
begin
try
Result := 0;
IdGetObj:=TThreadHttpGetHead.Create(true);
IdGetObj.TimeOut:=TimeOut;//timeout30秒
IdGetObj.FURL:=URL;
IdGetObj.Success:=false;
IdGetObj.Resume;
while not IdGetObj.Success do
begin
application.ProcessMessages;
sleep(100);
end;
Result :=IdGetObj.iCode;
finally
IdGetObj.Free;
IdGetObj:=nil;
end;
end;
//转换字符为urlecode字符; SQLINJECTIONURL--注入的sql语句,SqlType--类型,1是SQL SERVER格式的转换,0是URL格式的转换
Function SQLINJECTIONUrlToHex(SQLINJECTIONURL:String;SqlType:Integer):String;
Var TempString:String;
i:Integer;
S:String;
Begin
TempString := '';
For i:=1 To Length(SQLINJECTIONURL) Do
Begin
IF SqlType = 1 Then S:=IntToHex(Ord(SQLINJECTIONURL[i]),2)+'00';
IF SqlType = 0 Then S:='%'+IntToHex(Ord(SQLINJECTIONURL[i]),2);
TempString:=TempString+S;
End;
//IF SqlType = 1 Then Result:='DECLARE @S NVARCHAR(4000);SET @S=CAST(0x'+TempString+' AS NVARCHAR(4000));EXEC(@S);--';
IF SqlType = 1 Then Result:='0x'+TempString;
IF SqlType = 0 Then Result:=TempString;
End;
procedure SaveToLogFile(sPath:string; strLog: string);
var
logFile: string;
f: TextFile;
begin
try
logFile := sPath + FormatDateTime('yyyy', Now) + '.txt';
AssignFile(f, logFile);
if FileExists(logFile) then
Append(f)
else
Rewrite(f);
Writeln(f, '[' + FormatDateTime('yyyy-mm-dd hh:nn:ss', Now) + '] '+strLog);
Flush(f);
CloseFile(f);
except
end;
end;
//*****************************************************************
//函数:获取某个页面的返回出错数据
function GetURLMsgBool(str_url:string):boolean;
var
ss:string;
//memo:TMemo;
i:integer;
begin
result:=false;
try
//memo:=TMemo.Create(nil);
//memo.Lines.Add(GetURLContent(str_url));
ss:=GetURLContent(str_url);
//showmessage(inttostr(pos('varchar',ss)));
//showmessage(inttostr(pos('nvarchar',ss)));
//showmessage(inttostr(pos('+user+',ss)));
//showmessage(inttostr(pos('int',ss)));
if ((pos('varchar',ss)>0) or (pos('nvarchar',ss)>0)) and (pos('int',ss)>0) and(pos('db_name()',ss)=0) then
//if (define_unit.GetURLMsg(str_url)<>'未知') then// and (pos('varchar',memo.Text)>0) then
result:=true
else
result:=false;
finally
//memo.Free;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -