原理:使用者向資料庫裡存入惡意的資料,在資料被插入到資料庫之前,肯定會對資料庫進行轉義處理,但使用者輸入的資料的內容肯定是一點摸樣也不會變的存進資料庫裡,而一般都預設為資料庫裡的資訊都是安全的,查詢的時候不會進行處理,所以當使用者的惡意資料被web程式呼叫的時候就有可能出發sql注入。
**:二次注入比普通的注入更難發現,很難被工具掃瞄出來。
原理大概知道了,接下來就是實戰了
以sql-libs第24關為例
有登入,註冊頁面
好奇的我就試了一下弱口令登入
嘖嘖嘖,登陸成功了!不過這和本文沒有聯絡,回到正題!
我們利用註冊功能,將我們的資料插入資料庫裡。
登陸試試
登入進去,現在我們修改密碼
我們檢視一下
我們登入的是admin』#,但是修改的卻是admin賬號的密碼,那為什麼admin賬號的密碼會被改變呢???
我們去靶場原始檔pass_chang.php看一下 找到這句話
$ sql = "update users set password='$ pass' where username='$ username' and password='$ curr_pass' ";我們的使用者名稱被admin'#傳入進去,在資料庫裡#號為注釋符 然後這句話就變成了
$ sql = "update users set password=』$ pass』 where username=』admin『#』 and password=』$ curr_pass』 ";然後就是
$ sql = "update users set password=』$ pass』 where username=』admin『從而將使用者名為admin的賬號的密碼修改了
資料庫還是對自己太過相信,認為資料庫裡的資料都是正常的,當從資料庫裡呼叫的時候沒有經過過濾,這就造成了二次注入。
在原始碼裡找到了mysql_real_escape_string($_post["login_user"]);這個函式將我們的輸入的資料進行轉義
mysql_real_escape_string() 函式轉義 sql 語句中使用的字串中的特殊字元。下列字元受影響:x00'"x1a如果成功,則該函式返回被轉義的字串。如果失敗,則返回 false。
emmmm
再次演示一下攻擊
先建立乙個list.php
<?phpinclude ("../sql-connections/sql-connect.php");error_reporting(0);$sql="select * from users order by id";$result=mysql_query($sql);$num=mysql_num_rows($result);for ($i=0; $i < $num; ++$i) }?>
我選擇把list.php和sql-connect.php放在一起
現在我們在註冊乙個使用者名稱1』 union select 1,user(),database()#
然後訪問list.php
使用者名稱和密碼就被列印出來了
我們分析一下流程。
list.php包含了sql-connect.php,我們建立好賬號後,再次登入使用1『 union select 1,user(),database() #
$ username = $row[1]; $ sql_detail = "select * from users where username='$ username'";我們的username傳入進去
$ sql_detail = 「select * from users where username=』1』 union select 1,user(),database() #』」;也就是語句變成了
$ sql_detail = 「select * from users where username=union select 1,user(),database() 」;我們從表裡就列印出了賬號和密碼這張表。
白帽子之web漏洞 sql注入
通過把sql命令插入到web表單提交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令。具體來說,它是利用現有應用程式,將 惡意的 sql命令注入到後台資料庫引擎執行的能力,它可以通過在web表單中輸入 惡意 sql語句得到乙個存在安全漏洞的 上的資料庫,而不是按照設計者意圖...
SQL注入(二)
sql注入 一 的內容說說防範 sql第5點 5.限制輸入長度 如果在web 頁面上使用文字框收集使用者輸入的資料 使用文字框的 maxlength 屬性來限制使用者輸入過長的字元也是乙個很好的方法 因為使用者的輸入不夠長 也就減少了貼入大量指令碼的可能性。程式設計師可以針對需要收集的資料型別作出乙...
白帽子講web安全 編碼問題sql注入的 筆記
在書上166面的7.2.4編碼問題,討論了寬字符集,gbk編碼導致的漏洞。但是有些地方講得有點迷糊,也許還有錯別字。所以我結合國外在06年發布的addslashes versus mysql real escape string 這篇文章分析了一下。這裡需要知道,作者借char表達的意思是字元,不是...