通過(guò)SQL注入得到WebShell的原理及步驟
發(fā)布日期:2021-12-17 17:28 | 文章來(lái)源:腳本之家
一.通過(guò)SQL注入得到WEBSHELL的原理:
N.E.V.E.R的方法:利用數(shù)據(jù)庫(kù)備份得到WEBSHELL。創(chuàng)建一個(gè)表,在表中建一個(gè)字段用來(lái)保存木馬數(shù)據(jù)。然后利用MSSQL導(dǎo)出庫(kù)文件的辦法把整個(gè)數(shù)據(jù)導(dǎo)出來(lái),最后再刪除新建的表。
分析: N.E.V.E.R利用了MSSQL的備份數(shù)據(jù)庫(kù)功能。把數(shù)據(jù)導(dǎo)出來(lái),設(shè)想數(shù)據(jù)庫(kù)中有<%%>之類的ASP標(biāo)實(shí)符,導(dǎo)出文件,文件名以.ASP的形式保存。然后文件又保存在WEB的路徑下。那么這個(gè)導(dǎo)出的ASP文件是不是要去解釋<%%> 之內(nèi)的語(yǔ)句呢?如果數(shù)據(jù)庫(kù)中有的表中有<%%>標(biāo)實(shí)符,并且這之中有錯(cuò)誤,那么我們導(dǎo)出來(lái)生成的ASP文件也會(huì)有誤。不過(guò),這種機(jī)會(huì)也不太大。
再來(lái)看看CZY的方法吧。
CZY的方法:前面的和N.E.V.E.R的方法基本上差不多。只是后面用到了擴(kuò)展存儲(chǔ)過(guò)程——sp_makewebtask。這個(gè)擴(kuò)展存儲(chǔ)過(guò)程的作用就是:可以把MSSQL數(shù)據(jù)庫(kù)中的某個(gè)表中的記錄導(dǎo)出來(lái),以文件的方法保存起來(lái)。這種方法就不會(huì)出現(xiàn)什么問(wèn)題原因在于:我們只去讀表中的某個(gè)字段中的值。把字段的信息導(dǎo)出來(lái)生成文件。這個(gè)字段中的值都是我們剛加上的。自己在加入數(shù)據(jù)的時(shí)候,先調(diào)試一下,沒(méi)有問(wèn)題在加入進(jìn)去,導(dǎo)出來(lái)就當(dāng)然沒(méi)有問(wèn)題了。
以上兩位的方法,我都手工測(cè)試過(guò)。利用SQL注入漏洞,建表,向表中加數(shù)據(jù),然后再導(dǎo)出數(shù)據(jù),再刪除表。都是利用的SQL語(yǔ)句。這里我就不多說(shuō)了,大家可以看本期的文章。
二.利用DELPHI去實(shí)現(xiàn)功能的
原理都分析過(guò)了。我們?cè)趺蠢肈ELPHI來(lái)實(shí)現(xiàn)他們的手工操作呢?其實(shí)方法是非常簡(jiǎn)單的。DELPHI提供了一個(gè)NMHTTP控件。我們利用這個(gè)控件就可以向某個(gè)特定的URL提交參數(shù)。然后實(shí)現(xiàn)我們的自動(dòng)注射功能。我馬上要為大家講解的這個(gè)程序,有一個(gè)特點(diǎn)。也可以說(shuō)成是一個(gè)缺陷吧。程序不去自動(dòng)猜解WEB的絕對(duì)路徑。程序不去判斷當(dāng)前連接SQL數(shù)據(jù)庫(kù)的當(dāng)前賬號(hào)的權(quán)限。我為什么要這么做?因?yàn)榈玫竭@兩者用SQL注入是非常難得到的。所以,我們程序發(fā)送命令就不會(huì)考慮太多。成不成功你執(zhí)行完自己去看看生成沒(méi)有就OK了。
三.如何利用DELPHI得到WEBSHELL。
程序中用到的值。我們這里來(lái)看看有哪些:URL路徑,遠(yuǎn)程WEB絕對(duì)路徑(通過(guò)其他方法得到,你一定有辦法的) 采用什么方法去得到WEBSHELL(也就是兩位的方法,你選哪一種)。我們同時(shí)要求點(diǎn)擊一個(gè)按紐開(kāi)始執(zhí)行命令,和點(diǎn)擊一個(gè)按紐來(lái)終止命今。最后就是新建的表的名稱,以及表的字段名稱,再次就是字段的類型。前面的我們?cè)诔绦蛑蟹派陷斎?,選擇之類的控件就行了。后面的我們?cè)O(shè)一個(gè)選項(xiàng)按紐點(diǎn)按紐彈出相應(yīng)設(shè)置。再把這些相應(yīng)的設(shè)置用一個(gè)RECORD來(lái)保存。
首先,我們?cè)贒IT控件。名稱分別是:UrlET //URL路徑的輸入框、ShellPathET //遠(yuǎn)程木馬的位置、CustomBdoorET//自定義木馬的位置。再放兩個(gè)RadioButton用來(lái)選擇采用什么方式獲取WEBSHELL。CAPTION分別取名為: BackUP DataBase 和 WEB作業(yè)。然后再放三個(gè)SpeedButtion按紐。名稱分別是:設(shè)置,開(kāi)始,停止, 最后再放一個(gè)MEMO控件。來(lái)顯示當(dāng)前添加的信息。到此界面上的工作就做完了。界面如圖:
現(xiàn)在來(lái)寫程序了。
我們首先定義一個(gè)RECORD。
如下:
Type
SetOption = Record
TableName : String; //用來(lái)保存要?jiǎng)?chuàng)建的表名.
FieldName : String; //用來(lái)保存要?jiǎng)?chuàng)建的字段名.
FiledType : String; //用來(lái)保存創(chuàng)建的字段名類型.
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字段類型值.
再定義一個(gè)全局變量:
Var
ISStop : Boolean; //用來(lái)判斷用戶是否按下了停止按紐.
好了。在表單創(chuàng)建的過(guò)程中,我們?yōu)镽ECORD記錄輸入默認(rèn)值.
代碼如下:
procedure TMainForm.FormCreate(Sender: TObject);
begin
sOption.TableName :=’cyfd’
sOption.FieldName :=’gmemo’
sOption.FiledType :=’text’
end;
現(xiàn)在我們添加開(kāi)始執(zhí)行命令的代碼。
先定義BDoorList 為TstringList。主要目的就是把木馬的內(nèi)容加進(jìn)來(lái).
創(chuàng)建兩個(gè)變量來(lái)保存urlET.和ShellPathET的值.方便程序簡(jiǎn)化調(diào)用.
在程序開(kāi)始執(zhí)行前,我們得先檢查一下用戶的輸入
定義一個(gè)Checkinput函數(shù).
如下:
Function CheckInput : Boolean;
Begin
Result := False;
if Trim(urlet.Text) = ’’ then
Begin
Application.MessageBox(’請(qǐng)輸入U(xiǎn)RL地址!’,’提示’,mb_ok mb_iconinformation);
Exit;
End;
if Trim(ShellPathET.Text) = ’’ then
Begin
Application.MessageBox(’請(qǐng)輸入文件保存地址!’,’提示’,mb_ok mb_iconinformation);
Exit;
End;
IF DefBDoor.Checked then
Begin
if Not FileExists(extractfilepath(Application.ExeName) ’默認(rèn)木馬.txt’) then
Begin
Application.MessageBox(’沒(méi)有找到 [默認(rèn)木馬.txt] 文件!’,’提示’,mb_ok mb_iconinformation);
Exit;
End;
End
Else
if Not FileExists(CustomBdoorET.Text) then
Begin
Application.MessageBox(’沒(méi)有找到所選的木馬文件!’,’提示’,mb_ok mb_iconinformation);
Exit;
End;
Result := True;
End;
N.E.V.E.R的方法:利用數(shù)據(jù)庫(kù)備份得到WEBSHELL。創(chuàng)建一個(gè)表,在表中建一個(gè)字段用來(lái)保存木馬數(shù)據(jù)。然后利用MSSQL導(dǎo)出庫(kù)文件的辦法把整個(gè)數(shù)據(jù)導(dǎo)出來(lái),最后再刪除新建的表。
分析: N.E.V.E.R利用了MSSQL的備份數(shù)據(jù)庫(kù)功能。把數(shù)據(jù)導(dǎo)出來(lái),設(shè)想數(shù)據(jù)庫(kù)中有<%%>之類的ASP標(biāo)實(shí)符,導(dǎo)出文件,文件名以.ASP的形式保存。然后文件又保存在WEB的路徑下。那么這個(gè)導(dǎo)出的ASP文件是不是要去解釋<%%> 之內(nèi)的語(yǔ)句呢?如果數(shù)據(jù)庫(kù)中有的表中有<%%>標(biāo)實(shí)符,并且這之中有錯(cuò)誤,那么我們導(dǎo)出來(lái)生成的ASP文件也會(huì)有誤。不過(guò),這種機(jī)會(huì)也不太大。
再來(lái)看看CZY的方法吧。
CZY的方法:前面的和N.E.V.E.R的方法基本上差不多。只是后面用到了擴(kuò)展存儲(chǔ)過(guò)程——sp_makewebtask。這個(gè)擴(kuò)展存儲(chǔ)過(guò)程的作用就是:可以把MSSQL數(shù)據(jù)庫(kù)中的某個(gè)表中的記錄導(dǎo)出來(lái),以文件的方法保存起來(lái)。這種方法就不會(huì)出現(xiàn)什么問(wèn)題原因在于:我們只去讀表中的某個(gè)字段中的值。把字段的信息導(dǎo)出來(lái)生成文件。這個(gè)字段中的值都是我們剛加上的。自己在加入數(shù)據(jù)的時(shí)候,先調(diào)試一下,沒(méi)有問(wèn)題在加入進(jìn)去,導(dǎo)出來(lái)就當(dāng)然沒(méi)有問(wèn)題了。
以上兩位的方法,我都手工測(cè)試過(guò)。利用SQL注入漏洞,建表,向表中加數(shù)據(jù),然后再導(dǎo)出數(shù)據(jù),再刪除表。都是利用的SQL語(yǔ)句。這里我就不多說(shuō)了,大家可以看本期的文章。
二.利用DELPHI去實(shí)現(xiàn)功能的
原理都分析過(guò)了。我們?cè)趺蠢肈ELPHI來(lái)實(shí)現(xiàn)他們的手工操作呢?其實(shí)方法是非常簡(jiǎn)單的。DELPHI提供了一個(gè)NMHTTP控件。我們利用這個(gè)控件就可以向某個(gè)特定的URL提交參數(shù)。然后實(shí)現(xiàn)我們的自動(dòng)注射功能。我馬上要為大家講解的這個(gè)程序,有一個(gè)特點(diǎn)。也可以說(shuō)成是一個(gè)缺陷吧。程序不去自動(dòng)猜解WEB的絕對(duì)路徑。程序不去判斷當(dāng)前連接SQL數(shù)據(jù)庫(kù)的當(dāng)前賬號(hào)的權(quán)限。我為什么要這么做?因?yàn)榈玫竭@兩者用SQL注入是非常難得到的。所以,我們程序發(fā)送命令就不會(huì)考慮太多。成不成功你執(zhí)行完自己去看看生成沒(méi)有就OK了。
三.如何利用DELPHI得到WEBSHELL。
程序中用到的值。我們這里來(lái)看看有哪些:URL路徑,遠(yuǎn)程WEB絕對(duì)路徑(通過(guò)其他方法得到,你一定有辦法的) 采用什么方法去得到WEBSHELL(也就是兩位的方法,你選哪一種)。我們同時(shí)要求點(diǎn)擊一個(gè)按紐開(kāi)始執(zhí)行命令,和點(diǎn)擊一個(gè)按紐來(lái)終止命今。最后就是新建的表的名稱,以及表的字段名稱,再次就是字段的類型。前面的我們?cè)诔绦蛑蟹派陷斎?,選擇之類的控件就行了。后面的我們?cè)O(shè)一個(gè)選項(xiàng)按紐點(diǎn)按紐彈出相應(yīng)設(shè)置。再把這些相應(yīng)的設(shè)置用一個(gè)RECORD來(lái)保存。
首先,我們?cè)贒IT控件。名稱分別是:UrlET //URL路徑的輸入框、ShellPathET //遠(yuǎn)程木馬的位置、CustomBdoorET//自定義木馬的位置。再放兩個(gè)RadioButton用來(lái)選擇采用什么方式獲取WEBSHELL。CAPTION分別取名為: BackUP DataBase 和 WEB作業(yè)。然后再放三個(gè)SpeedButtion按紐。名稱分別是:設(shè)置,開(kāi)始,停止, 最后再放一個(gè)MEMO控件。來(lái)顯示當(dāng)前添加的信息。到此界面上的工作就做完了。界面如圖:
現(xiàn)在來(lái)寫程序了。
我們首先定義一個(gè)RECORD。
如下:
Type
SetOption = Record
TableName : String; //用來(lái)保存要?jiǎng)?chuàng)建的表名.
FieldName : String; //用來(lái)保存要?jiǎng)?chuàng)建的字段名.
FiledType : String; //用來(lái)保存創(chuàng)建的字段名類型.
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字段類型值.
再定義一個(gè)全局變量:
Var
ISStop : Boolean; //用來(lái)判斷用戶是否按下了停止按紐.
好了。在表單創(chuàng)建的過(guò)程中,我們?yōu)镽ECORD記錄輸入默認(rèn)值.
代碼如下:
procedure TMainForm.FormCreate(Sender: TObject);
begin
sOption.TableName :=’cyfd’
sOption.FieldName :=’gmemo’
sOption.FiledType :=’text’
end;
現(xiàn)在我們添加開(kāi)始執(zhí)行命令的代碼。
先定義BDoorList 為TstringList。主要目的就是把木馬的內(nèi)容加進(jìn)來(lái).
創(chuàng)建兩個(gè)變量來(lái)保存urlET.和ShellPathET的值.方便程序簡(jiǎn)化調(diào)用.
在程序開(kāi)始執(zhí)行前,我們得先檢查一下用戶的輸入
定義一個(gè)Checkinput函數(shù).
如下:
Function CheckInput : Boolean;
Begin
Result := False;
if Trim(urlet.Text) = ’’ then
Begin
Application.MessageBox(’請(qǐng)輸入U(xiǎn)RL地址!’,’提示’,mb_ok mb_iconinformation);
Exit;
End;
if Trim(ShellPathET.Text) = ’’ then
Begin
Application.MessageBox(’請(qǐng)輸入文件保存地址!’,’提示’,mb_ok mb_iconinformation);
Exit;
End;
IF DefBDoor.Checked then
Begin
if Not FileExists(extractfilepath(Application.ExeName) ’默認(rèn)木馬.txt’) then
Begin
Application.MessageBox(’沒(méi)有找到 [默認(rèn)木馬.txt] 文件!’,’提示’,mb_ok mb_iconinformation);
Exit;
End;
End
Else
if Not FileExists(CustomBdoorET.Text) then
Begin
Application.MessageBox(’沒(méi)有找到所選的木馬文件!’,’提示’,mb_ok mb_iconinformation);
Exit;
End;
Result := True;
End;
版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。
相關(guān)文章
關(guān)注官方微信