sqli-labs(十一)(二次注入)


第二十四關:

這關考驗的是sql的二次注入。

這關是一個登陸加注冊的功能點,登陸的地方沒有注入,賬號密碼都輸入輸入'",頁面只會顯示登陸失敗。

但注冊賬號的地方沒有做過濾可以注冊帶有單引符號的用戶,比如可以直接注冊一個單引符號的用戶

其實從源碼中可以看到,只要是用戶輸入的參數,再放入sql進行拼湊之前都會經過mysql_real_escape_string這個函數的轉義,也就造不成注入了(除了寬字節注入)

后來發現,用戶登陸成功后會有一個修改密碼的功能

這里也可以直接看源碼

sql語句中有三個參數拼湊進去了,但是可以看到程序只對用戶輸入的參數做了轉義,而從session中獲取的參數沒有做處理,原因是理論上session是可信域,也就是說里面參數是用戶不可控的。

但是事與願違,session中的uname是從數據庫中取得,而我們在注入賬號的時候是可以往數據庫中加入帶有單引符號的uname。

ok,知道這里應該可以注入后,我們再仔細看下這個sql語句,這是一個update的注入,假設uname我們可以隨意控制,我們讓uname= admin' #是不是就可以將管理員的密碼修改了,而且由於注釋掉了后面的語句,所以我們都不用輸入正確的admin的密碼。

發現可以成功修改管理員的密碼。那么這里僅僅能做到修改密碼的操作嗎?

顯然不是,我們之前就了解了update的sql語句存在報錯注入和盲注,這里沒有報錯信息,所以只能盲注了。但這里由於盲注之前需要有個注冊操作,比較麻煩,需要自己寫腳本。我這里先不寫了,以后遇到了再補上吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM