1. 程式人生 > >2017 X-NUCA 程式碼審計

2017 X-NUCA 程式碼審計

今天的比賽中的一道程式碼審計的題目。

step 1 初步審計

發現所有的資料庫操作都是 PDO操作,這也就意味著不可能是SQL注入了。查詢flag出現的位置

do_changepass.php
這裡寫圖片描述
user.php
這裡寫圖片描述
發現如果是要獲取flag 那麼必須要更改userinfo陣列的值····

step 2 程式碼回溯

我們發現在上述兩個頁面userinfo的值就是session的值,所以目標轉化為更改session值,找到登入後的操作
這裡寫圖片描述

在這裡發現了$_session[userinfo]的賦值操作$userinfo,本來userinfo是陣列,我們在這裡有個變數覆蓋
common.php


這裡寫圖片描述

我們如果傳入?userinfo=a那麼就是一個字串這時
$userinfo["id"]=$userinfo[0]=a

我們看register.php
這裡寫圖片描述
role = 1

所以$_session[userinfo]='1' session是字串1

這時再次訪問do_changepass.php即可

這裡寫圖片描述