ASP與ASPX中結果集對於注入的影響

2021-12-29 16:24:15 字數 2355 閱讀 5824

文/ninty

從bs大牛那裡吸取的經驗,然後自己小小研究了一下,寫點筆記。。

先來看下面這段**:

set conn = server.createobject("adodb.connection")

conn.open "driver=;server=microsof-17a8a8;uid=sa;pwd=sajjjjjj;database=pubs"

set rs = server.createobject("adodb.recordset")

rs.open "select * from sysobjects where id="&request("id") , conn, 1, 3

if not rs.bof and not rs.eof then

response.write rs("name")

end if

set rs2 = rs.nextrecordset

response.write rs2("test")

conn.close

%>

asp以odbc的方式去連線sql server資料庫, 很明顯的存在注入的一段**。

儲存為odbc.asp

然後訪問:

odbc.asp?id=1 and @@version=1

就可以把@@version的值暴出來了。

但是如果我們這麼構造注入:

odbc.asp?id=1;select 1 where @@version=1

這樣是不會有任何效果的。這裡說的不會有任何效果,意思是不能將值暴出來,不過可能暴別的錯誤或者頁面無任何變化 ,

具體要看環境了,

環境不一樣或者連庫所使用的驅動不一樣,都會對注入時的錯誤資訊與注入的方式造成一些影響 。

這時將注釋的那兩行放開,再次利用

odbc.asp?id=1;select 1 where @@version=1

這回值被暴出來了。

當我們提交id=1;select 1 where @@version=1的時候,執行的sql為:

select * from sysobjects where id=1;select 1 where @@version=1

兩條select語句,很明顯會有兩個結果集,但是recordset預設只取第乙個結果集,所以當第二個結果集報錯的話,

是不能將值暴出來的,這時如果**再去取第二個結果集,(rs.nextrecordset)就可以將值暴出來了。

不過貌似沒有多少asp**會這麼寫啊,一般都只取第乙個結果集。。所以在asp中沒有啥大用。

如果**裡面只取了第乙個結果集,那除非第二個語句有語法錯誤,不然一般頁面都不會暴錯的。

比如:odbc.asp?id=1;selectttt 1

這樣,就算沒有取第二個結果集,也會暴錯的。。

再看aspx:

sqlconnection conn = new sqlconnection("server=microsof-17a8a8;user id=sa;password=sajjjjjj;database=pubs;connect timeout=30");

sqldataadapter adap = new sqldataadapter("select * from sysobjects where id = "+request["id"],conn);

datatable dt = new datatable();

dataset dt = new dataset();

adap.fill(dt);

this.gridview1.datasource = dt;

this.gridview1.databind();

conn.close();

仍然是一段有注入漏洞的**:

訪問:sql.aspx?id=1 and 1=@@version

可以將@@version暴出來。

再訪問:

sql.aspx?id=1;select 1 where 1=@@version

跟asp一樣, 暴不出來值。

這時將注釋的那行放開,將datatable dt = new datatable();這一行注釋掉,再訪問

sql.aspx?id=1;select 1 where 1=@@version

拿到錯誤資訊了。。

原因是一樣的,用datatable的話,預設只取了第乙個結果集,而如果用dataset ,則所有的結果集都會被取出來。

自然就會暴錯了。。

用dataset的這種寫法在aspx的程式中還算比較常見的吧?在注aspx的時候可以試試哦。當一句**不好暴出錯誤的話,可以試試多句。。

有一定機率的。

還有不同的資料庫驅動對注入的影響 , 這個沒怎麼搞明白,以後明白點了再寫。。

IIS內部服務錯誤aspx與asp

開啟事件檢視器 在系統事件中有錯誤 distributed transaction coordinator 服務因 3221229584 0xc0001010 服務性錯誤而停止。經多次試驗,發現這主要是系統無法找到ms dtc 日誌檔案造成的,只要建立一下就可以了 點開始 執行 輸入命令 msdtc...

MAXIMO中 結果集 與 lookups的過濾

一 想把maximo啟動中心,結果集中,2天前收到的資料設定為紅色?maximo中本身就可以做上述的設定,如下圖 於是把該類得方法改寫一下 psdi.webclient.controls.resultsetportlet。180行開始 hashtable entry hashtable expres...

Struts2中結果集型別

1 每個action方法都返回乙個string型別的值,struts一次請求返回什麼值是由這個值確定的。2 在配置檔案中,每乙個action元素的配置都必須有result元素,每乙個result對應乙個action的返回值。3 result有兩個屬性 name 結果的名字,和action中的返回值一...