摘要:問題簡述在用做注入檢測時,遇到一個小小的問題猜出來的列數跟數據庫表中的列數不匹配。在未了解之前,我一直想當然的以為就是獲取數據庫表中的列數,在兩次實際檢測過程中,確實發現這個是我所不能理解的。所以猜解得到的列數還跟在后端的邏輯有關。
環境: xampp-win32-5.6.3-0-VC11 dvwa-1.0.8前言
有幸在網上搜到一款非常不錯的滲透測試演練系統 — dvwa ,作為學習,演練真的非常強大啊! 在學習的過程中也遇到一些問題,所以這里做學習分享記錄。
問題簡述在用dvwa做sql 注入檢測時,遇到一個小小的問題 — order by 猜出來的列數跟數據庫表中的列數不匹配。(注入時猜出來兩個字段,但是實際數據庫的表中卻有6個字段)。在未了解之前,我一直想當然的以為 order by就是獲取數據庫表中的列數,在兩次實際檢測過程中,確實發現這個是我所不能理解的。
問題詳情在發現注入點后,進行猜列數時,用了如下語句:
故此我們猜出有兩列,但是我去數據庫查看相應的表時,發現字段比這個多
搞定問題在別人的指導下作了如下分析:
將猜列數語句直接在sql數據庫執行,發現他們的結果跟在web頁面注入時都是不一致的
而在數據庫執行得到的6列則是跟數據庫匹配的,難道order by 猜的列數有問題?
最后去注入代碼看到源碼一下豁然開朗:
$getid = "SELECT first_name, last_name FROM users WHERE user_id = "$id"";
你也看到了,我在mysql執行的語句是 select * ,而 注入代碼則是 select first_name, last_name。
小結網上大多資料說的order by來猜列數,實際是猜查詢出的列數,而不是表實際的列數。order by本來就是指定的結果如何order,針對的就是查詢結果而不是原表。所以order by猜解得到的列數還跟在后端的邏輯有關。
實用這個有什么用?我用一個例子來簡述。
在注入時,用order by 猜出結果集有兩個字段,且兩字段名分別為:user pwd (實際數據庫表中還有id一字段)
在爆字段值時:當注入語句這樣時可能什么也得不到,甚至直接報錯:
代碼:
and 1=2 union select user, 2 from admin
error:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /usr/local/webroot/cw/about/index.php on line 95
這時我們需要對注入語句進行轉換下:
and 1=2 union select concat(id,0x232323,user,0x232323,pwd),2 from admin
這樣就能到兩字段的值了
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/31928.html
摘要:當后面的數字大于表的列數時就會報錯訪問頁面正常,訪問頁面異常所以這個表有個字段。聯合查詢獲取信息運算符可以將兩個或兩個以上語句的查詢結果集合合并成一個結果集合顯示,即執行聯合查詢。 sqli-labs靶機搭建 docker部署: docker pull acgpiano/sqli-labs docker run -d -p 80:80 acgpiano/sqli-labs 訪問127...
閱讀 1794·2023-04-26 02:14
閱讀 3719·2021-11-23 09:51
閱讀 1381·2021-10-13 09:39
閱讀 3963·2021-09-24 10:36
閱讀 3009·2021-09-22 15:55
閱讀 3511·2019-08-30 12:57
閱讀 2036·2019-08-29 15:30
閱讀 1980·2019-08-29 13:19