数据库注入漏洞

来源:互联网 发布:spring 主从数据库 编辑:程序博客网 时间:2024/03/29 07:09

本来这样的问题,不值得这样在次重复!没有最坚硬的盾也没有最锋利的矛,主要还是看对该问题的理解和认识上的程度,说来说去,还不是对那几个函数的使用和理解情况而已.(水平低劣不敢多说!呵!)

今天再次看了布丁BLOG上的相关函数,准备找些资料在仔细看看,在说点什么.但是看来看去还是那几篇文章,对于注入的问题.我没太在意过,只是把我自己想到的理个头绪,放在这里慢慢看看在说!

大家都只是对半角的单引号(英文状态下)做处理,我是见得最多的情况,有用是肯定的了,就是网上到处说的OR漏洞可以做到弥补.这个应该算了"逻辑"的问题.(我自己的说法)

另外接下来就是对QueryString值(一般是数字,我说的是常见情况)做判断处理,也是有用的处理.特别是大家习惯的新闻程序之类. Estyle(靳田) 说的:1、如果是排除法防注入,那么应该重点处理符号而非字母字符串。因为可用性应该放在首位,我们不能要求用户Lumida改名字是不是? 这的确是个问题,能够有通用的方法的确是最理想的了.而我说的那个函数只是对单个QueryString的处理,特别是数字的处理,这样一来,是非常必要的!因为MID函数对于猜解时候非常有用!比较麻烦的事情!2、除了非法字符串以外,我们还应该考虑比如过长字符串在内的一些另类情况,所以用正则表达式(编写理想的数据形式模式)进行主动验证要比被动的过滤法方便一些(引入的问题是无法容错); 非常赞同!我不知道别人是怎样做的.我实在对正则不熟悉(不怕见笑!汗,只能够在努力了!)这个问题我看布丁BLOG上的函数:

'####
'##
'## SQL注入攻击预防装置[字符型]
'##
'## @ data  ->处理的数据
'## @ length ->长度限制
'##
'## 例: strSql("SQL字符型数据",50)
'##
function strSql(data,length)
'########################################################################
 if length<>0 then data=left(data,length)
 strSql="'"&replace(data,"'","''")&"'"
end function

是对接收的数据做50的处理,其实看情况也是可行的方法.只是觉得这样一来也是麻烦,函数能够做到通用是好事情不是?!呵!具体问题具体分析,这样做还是有点大胆了点,50已经是好长了!呵!!我的做法是---<%
if len(request.querystring("ddd"))> 8 then
response.write("黑我,少来!")
response.end   %>

只是每次都要判断一下,手写多了点!蠢是蠢主要自己清楚那里可以被注入就这样处理应该是可行的(我到现在还是这样认为的,如果谁有高见,不妨指教一下,我一定虚心听取).8的长度可以再长点也没问题.接下来做点处理.把那些能够在注入能够用到的东西全部CUT了!呵!

----<%
Function checkStr(str)

if isnull(str) then

checkStr = ""

exit function

end if

checkStr=replace(str," ","")

checkStr=replace(str,"'","'")

checkStr=replace(str,";","'")

checkStr=replace(str,"--","'")

checkStr=replace(str,"(","'")

checkStr=replace(str,"[","'")

checkStr=replace(str,"$","'")

end function

%>

我想就足够了!我上文说的那几个纯属有点玩笑,但是也是一种想法而已罢了!!

---<%
Function checkStr(str)

if isnull(str) then

checkStr = ""

exit function

end if

checkStr=replace(str," ","")

checkStr=replace(str,"'","'")

checkStr=replace(str,";","'")

checkStr=replace(str,"--","'")

checkStr=replace(str,"(","'")

checkStr=replace(str,"[","'")

checkStr=replace(str,"$","'")

checkStr=replace(str,"asc'," ")

checkStr=replace(str,"mid"," ")

checkStr=replace(str,"delete"," ")

checkStr=replace(str,"drop"," ")


end function

%>

这样一来,就是有注入点,也是没办法了!因为我觉得至少在URL地址栏里要操作我的数据库已经非常难了(在说一次,只是想法,使用上具体情况灵活使用了)!

另外,如果对于注入猜解密码数据库字段成功后,对于WEB程序员来讲还有其它招数.我的想法是对用户密码做MD5处理后在入库,特别是重要的信息部分.话说开了就越来越多.

猜解设置的字典,我看很多人,特别是做数据库设计的人都知道大家都喜欢用:

username
user
name
u_name
administrators
userid
adminuser
adminpass
adminname
user_name
admin_name
usr_n
usr
dw
nc
uid
admin
admin_user
admin_username
user_admin
adminusername
pwd

自己看看,是不是都喜欢这样用,我不是说所有的人,反正我至少习惯用里面某个字段是真的,想想都得改这个习惯,最好数据库名字设置特殊一些比较好就是!还有字段名称设置也是复杂一些好!至于有多复杂自己想个自己记得住的差不多就行了,就是地球绕一圈回来也可以!呵!因为我是用过一些猜解工具,呵!!但是没试过别人的站点,其实也就是拿来做自己程序的检测罢了!呵!!所以列这些内容,另外还要注意这样的问题,就是对管理入口要设置得复杂一些(哎!我怎么又说"复杂一些"了~^)^~)

admin
admin_index
admin_admin
index_admin
admin/index
admin/default
admin/manage
admin/login
../admin/index
../admin/default
../admin/manage
../admin/login
manage
login
manage_index
index_manage
wocaonima
admin1
admin_login
login_admin
ad_login
ad_manage
count
login
manage
manager
guanli
denglu
houtai
houtaiguanli
htgl
adminlogin
adminuserlogin
admin_login
adm_login
chklogin
chkadmin
user
users
adduser
adminuser
admin_user
edituser
adduser
adminadduser
member
members
editmember
adminmember
addmember
logout
exit
login_out
edit
adminedit
admin_edit
delete
admindelete
admin_delete
del
admindel
admin_del
up
upload
upfile
backup
config
test
webmaster
root
aadmin
admintab
admin_main
main
art
article
databases
database
db
dbase
devel
file
files
forum
girl
girls
htdocs
htdocs
idea
ideas
include
includeinc
includes
incoming
install
manual
misc
mrtg
private
program
programming
programs
public
secret
secrets
server_stats
server-info
server-status
set
setting
setup
***
snmp
source
sources
sql
stat
statistics
Stats
stats
telephone
temp
temporary
tool
tools
usage
weblog
weblogs
webstats
work
wstats
wwwlog
wwwstats
www
wenzhang

这些都是字典文件.都看看用到了没!?呵!!看着后怕,我是!

布丁说的为什么老有人举ASCII码的问题,补充一下还是因为有大部分WEB程序员还是仅对半角引号和数字做判断,这里针对数字判断来说,当然这样了!

-14367-15895-10284-11319-19004-10780-10519

轻灵自由的珍珠

3 97 100 109 105 110

admin

45

-

是ASCII码!!

如果是这样写的:

if IsNumeric(request.querystring("ddd")) then

Execute("select * from [table]")

不是一样都绕过去了的说!说了很多烂得不能在烂的废话,一来我也没仔细研究过注入,二来在CSDN的WEB版这个话题,一个叫"小竹"的牛人是最有发言权的!我不敢造次!而且我接手WEB开发时间也不算长,经验就更少了!算是自娱自乐!!如果谁有更高明的做法,请留言.一起学习下!

<%
StrTemp=request.servervariables("server_name")&request.servervariables("url")&"?"&Request.QueryString
StrTemp = LCase(StrTemp)
If Instr(StrTemp,"select%20") or Instr(StrTemp,"insert%20") or Instr(StrTemp,"delete%20from") or Instr(StrTemp,"count(") or Instr(StrTemp,"drop%20table") or Instr(StrTemp,"update%20") or Instr(StrTemp,"truncate%20") or Instr(StrTemp,"asc(") or Instr(StrTemp,"mid(") or Instr(StrTemp,"char(") or Instr(StrTemp,"xp_cmdshell") or Instr(StrTemp,"exec%20master") or Instr(StrTemp,"net%20localgroup%20administrators") or Instr(StrTemp,"net%20user") or Instr(StrTemp,"%20or%20") or Instr(StrTemp,"'") or Instr(StrTemp,"%20") or Instr(StrTemp,"""") or Instr(StrTemp,""") or Instr(StrTemp,""") or Instr(StrTemp,":") or Instr(StrTemp,":") or Instr(StrTemp,";") or Instr(StrTemp,";") or Instr(StrTemp,",") or Instr(StrTemp,",") or Instr(StrTemp,"%27") then
Response.Write "<script language='javascript'>alert('非法操作!立即返回!');history.back();</script>"
Response.end
End If
%>
将上面代码存入一个ASP文件中,在存在注入点的ASP中<!--#i nclude file="checksql.asp"-->
原创粉丝点击