Less-24
POST型基於存儲的二次注入
隨意輸入
點擊:Forgot your password?
翻譯:如果你忘記了密碼,去黑掉它。
點擊:New User click here?
註冊用戶。
嘗試註冊一個用戶: 用戶:test1 密碼:test1
翻譯:
用戶成功
創建
重定向到5中的登錄頁面......
如果未重定向,請點擊右上角的主頁(HOME)按鈕
嘗試註冊過後的用戶進行登錄:
嘗試更改用戶test1的密碼爲tese2
從上面的情況中我們可以分析出:
- 登錄界面,具有登錄功能,同時有忘記密碼和註冊的鏈接。
- 註冊界面,具有註冊功能。
- 忘記密碼界面,返回一張圖片
- 修改密碼界面,登陸成功後,1.顯示用戶名,2.可以重置密碼,3.有登出的鏈接。
- 登錄失敗界面,返回一張圖片。
綜上,可推斷出注入點在更改密碼上。
分析下源文件:
這三個文件與數據庫進行交互,剩下的五個文件分別對應上述幾個顯示的界面。
代碼審計:
這幾個文件出現頻率最高的代碼是:
session_start()
可參考php手冊
session_start() 會創建新會話或者重用現有會話。 如果通過 GET 或者 POST 方式,或者使用 cookie 提交了會話 ID, 則會重用現有會話。
session_start的作用是開啓$_SESION,需要在$_SESION使用之前調用。
PHP $_SESION 變量用於存儲關於用戶會話(session)的信息
接着分析:
1. login.php
PHP mysql_real_escape_string() 函數
定義和用法
mysql_real_escape_string() 函數轉義 SQL 語句中使用的字符串中的特殊字符。
下列字符受影響:
- \x00
- \n
- \r
- \
- '
- "
- \x1a
如果成功,則該函數返回被轉義的字符串。如果失敗,則返回 false。
語法
mysql_real_escape_string(string,connection)
參數 描述 string 必需。規定要轉義的字符串。 connection 可選。規定 MySQL 連接。如果未規定,則使用上一個連接。 說明
本函數將 string 中的特殊字符轉義,並考慮到連接的當前字符集,因此可以安全用於 mysql_query()。
可以看到代碼對username和passseord的特殊字符進行了轉義,想要在這裏進行注入就得采取“繞過”,但這不是我們這道題想要的解法,我們就當這裏無法注入好了,也就是說在登錄頁面login.php處無法進行注入。
登錄成功後創建session
和cookie
,session
存儲username
,但session
是建立在服務器上的對象,所以無法獲取;cookie
只是個登錄標記,幾乎沒有任何用處。(會話15分鐘後過期)
2. login_create.php
明天繼續寫。。。。