文/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中的返回值一...