2011-08-07 57 views
4

我使用很多方法登錄到joomla管理面板。 但返回的值與登錄頁面相同。即使用戶名和密碼正確,也可以使用 。從c#應用程序登錄joomla

例如:

WebClient Client = new WebClient(); 
System.Collections.Specialized.NameValueCollection Collection = 
    new System.Collections.Specialized.NameValueCollection(); 
Collection.Add("username", "--my username--"); 
Collection.Add("passwd", "--my password--"); 
Collection.Add("option", "com_login"); 
Colletion.Add("e0484cdc56d8ccc42187d26a813324ba", "1"); 
Collection.Add("lang", ""); 

Client.Proxy = null; 
byte[] res = Client.UploadValues(
    "http://127.0.0.1/administrator/index.php", "POST", Collection); 
textBox1.Text = Encoding.UTF8.GetString(res, 0, res.Length); 

回答

2

問題是這一行:

Colletion.Add("e0484cdc56d8ccc42187d26a813324ba", "1"); 

這是Joomla的CSRF防僞標記。的Joomla!嘗試通過在每個POST表單中插入一個令牌來保護CSRF,並且每個GET查詢字符串都能夠修改Joomla!系統。這個隨機字符串提供保護,因爲受感染的站點不僅需要知道目標站點的URL和目標站點的有效請求格式,還必須知道每個會話和每個用戶更改的隨機字符串。

爲了發出正確的令牌與您的登錄請求你必須:

  1. 首先使用「客戶對象」的要求
  2. 檢索令牌GET請求正確的登錄表單與正則表達式/name="([a-zA-z0-9]{32})"/
  3. 發送登陸請求與令牌

好運

編輯:給你的「收藏」增加一個參數:

Collection.Add("task", "login");