sql注入新手問題?
?name=root"or"1"="1 可以用
但是 ?name=root"or1=1# 不可以。為什麼呢,是因為沒有空格嗎?井號「#」不是可以注釋掉後面的引號「"」嗎?
逛了這麼久的知乎,終於有個自己能回答的問題了,怒答之!
----------------------邪惡的分割線----------------------話說這個問題也曾困擾過我一段時間,直到某天腦子一抽,想起來玩xss時看到的一篇集猥瑣之大成的文章---URL Hacking - 前端猥瑣流,頓時一切疑惑煙消雲散(TM的當時恨不得抽自己兩巴掌,虧的自己當初還屁顛屁顛地跑去圖書館看過一本html的書),以下是這篇文章對URL格式的介紹
第一部分:協議名(以單個冒號結束)
第二部分:用戶信息 也就是賬號密碼!(登陸ftp時常用)
第三部分:主機名(也就是域名)
第四部分:埠
第五部分:查詢,這裡有個bug。。。 應該是?號後的內容才是查詢!
第六部分:片段ID(是不會發送到伺服器的!)
重點在第六部分,說得很清楚了,片段ID是不會發送到伺服器的(包括#號).所以想直接使用#去注釋掉後面的引號是不行的,至於解決辦法,樓上已經說得很清楚了,將#轉碼為%23.
在上面曾提到過html,這跟html有什麼關係呢?其實是有關係的,在看到對URL格式介紹時,突然就想起來了,在html中有一個叫錨的東西,也就是#,用法是這個樣子的
錨:&
&錨點&
&&錨&
當點擊這個鏈接時,頁面會轉到錨點段落,這時觀察URL,就會發現URL後會出現#anchor,而且細心點的話能發現頁面只是向上(下)滾動到錨點的地方,而沒有出現刷新時的圈圈,說明是沒有伺服器的參與的.
再細心一點的話,你會發現刷知乎的時候,當你點開一個回答,頁面會直接定位到答主所在的樓層,此時URl的後面也會跟上一個#,比如當我點開這個回答時的URL是這樣的http://www.zhihu.com/question/29524696#answer-13591264
總結一下:在URL中#的作用就是一個頁面定位功能,是不會發送到伺服器去的------------------------邪惡的分割線-------------------------BTW:題主曾提到是不是沒有空格的原因,想來是因為--注釋符後面要接一個空格的原因吧.我曾經試過,如果不接空格的話,接任意一個字元都是可以的哦,不信你可以試試.再啰嗦一句,學習sql注入的話,sqli-labs-master是一個不錯的開源平台.通過抓包可以發現,#號並沒有發送到伺服器。以下內容引自 URL的井號 - 阮一峰的網路日誌
#代表網頁中的一個位置。其右面的字元,就是該位置的標識符。比如,
http://www.example.com/index.html#print
HTTP請求不包括#
#是用來指導瀏覽器動作的,對伺服器端完全無用。所以,HTTP請求中不包括#。
比如,訪問下面的網址,
Example Domain
瀏覽器實際發出的請求是這樣的:
GET /index.html HTTP/1.1
Host: Example Domain
可以看到,只是請求index.html,根本沒有"#print"的部分。
所以,要想發送到伺服器,需要
即 ?name=root"or1=1%23將#轉碼為%23
對#編碼%23,或者使用"-- ",最後記得有個空格。
推薦閱讀:
※如何評價 KoolShare 論壇的 merlin 改版固件?
※如果 CPU 存在安全後門,那麼使用國產伺服器能杜絕安全問題嗎?
※如何看待「網易郵箱泄密事件」?
※15年7月,最近QQ盜號(利用所謂聚會照片)是怎麼回事?這個釣魚網站最近已經見過多次了?
※隨著互聯網的發展,哪些網路攻擊手段越來越盛行了?