Sqli-labs之Less-24

                                                    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處無法進行注入。

登錄成功後創建sessioncookiesession存儲username,但session是建立在服務器上的對象,所以無法獲取;cookie只是個登錄標記,幾乎沒有任何用處。(會話15分鐘後過期)

2. login_create.php

明天繼續寫。。。。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章