在xfocus看了一篇文章
update注射(mysql+php)的兩個模式http://.xfocus.net/articles/200508/815.html
分析一下他所說的兩個模式:
假設有表userinfo
該錶有三個字段 使用者名稱username 使用者密碼pass 使用者許可權groupid
理論上將我們只能改自己的密碼,無法改許可權
我們要做的就是:利用修改使用者密碼的sql語句,趁機修改許可權。 嘿嘿嘿嘿
mode1
如果sql語句是
update userinfo set pass=$p where username='***'
在這種情況下,我們令$p為 12345,groupid=1 即可
這樣就可以修改自己的許可權groupid
mode2
如果sql語句是
update userinfo set pass='$p' where username='***'
我們如果令$p為 12345',groupid='1
在magic_quotes_gpc=on的環境下,sql語句就會變成
update userinfo set pass='12345/',groupid=/'1' where username='***'
之所以這樣,是因為gpc為on,會在敏感字元前加反斜槓
所以這樣僅僅乙個update語句達不到目的
怎麼辦呢?
這樣上乙個update語句將userinfo中的pass更新為 12345',groupid='1 了
我們利用這個值
如果有selete語句將這個值取出來,賦給乙個變數$pass
然後我們再構造下面的update語句
update userinfo set pass='$pass' where username='***'
這時的update語句就是
update userinfo set pass='12345',groupid='1' where username='***'
為什麼此時沒有加反斜槓?因為gpc僅對使用者輸入的字串起作用吧
這時就可以修改我們自己的許可權了
總結我們回顧上面兩個模式,原理倒是不難理解
第一種模式是沒有問題的,單一的update語句到處都是,輕易就可以利用
第二種模式是有點問題,這種模式要求的條件太苛刻了
請看先有針對密碼的update (操作1)
然後是針對密碼的select (操作2)
然後是針對密碼的update(操作3)
這種模式如果要成功,操作者必須仔細尋找這樣的點,因為這時三條sql語句,單獨乙個頁面是很難
具備這樣的條件的。
當然,現在web開發者已經很認真了,多數人已經對sql注入問題格外關注,在編碼上盡量避免,所以
現在再想簡簡單單就sql注入成功比較困難了。上述模式構思比較巧妙,值得贊一下。
C 兩個小技巧
從新新那裡學來的,記錄一下,感覺還挺不錯,哈哈 一。靈活的在注釋與 間轉換 注釋風格 code here 風格 code here 看一下兩者之間,相差什麼呢?只差乙個斜槓 也就是說,只要刪乙個斜槓,就可以把中間這段 注釋掉,增加乙個斜槓,就可以使中間這段 有效。在寫一些測試 時會比較有用。二。寫個...
C 兩個小技巧
從新新那裡學來的,記錄一下,感覺還挺不錯,哈哈 一。靈活的在注釋與 間轉換 注釋風格 code here 風格 code here 看一下兩者之間,相差什麼呢?只差乙個斜槓 也就是說,只要刪乙個斜槓,就可以把中間這段 注釋掉,增加乙個斜槓,就可以使中間這段 有效。在寫一些測試 時會比較有用。二。寫個...
Linux兩個小技巧
在使用公司環境申請的虛擬機器的時候,老出現兩個問題 五分鐘沒有操作就自動登出 不能使用上下箭頭檢視歷史命令 查了一下,原來就是幾個環境變數在作祟 超時登出問題是由於系統設定了tmout 300環境變數,可以通過取消這個環境變數或者增加超時時間解決,比如 unset tmout 或者export tm...