“注入”这一词眼下可算得上时髦,“大街小巷”到处都能“听”到看到。这一词曾经让无数人“闻名色变”,今天我们的话题仍是注入。不过今天我们这里的这个注入不同于以往的,它有别于通常的SQL注入,可以说是一种新型的。平日里,人们在提交数据的时候都是采用页面形式。但是,今天我们这里就要打破这一传统观念。这种方法是通过自己构造HTTP请求报文,以程序的方式代替传统的方法,实现数据的自动提交。 在文章还未进入正题的时候,我就HTTP协议这个东西给大家再罗嗦两句。其实关于HTTP协议这个东西我本来都不想说的。但是,为了照顾大多数朋友。平日里,当我们在打开一个网站的时候,比如说http://www.36963.cn/,实际上IE作为一个客户端,它将向服务器发送的是如下的请求报文:GET / HTTP/1.1 Accept: 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-cn Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) Host: www.36963.cn Connection: Keep-Alive Cookie: 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.1 HOST:www.36963.cn 但在HTTP/1.0中,HOST字段并不是必须的,至于这里为什么不能省,继续往下看。GET和POST是浏览器向服务器提交报文通常所采用的两种方法。服务器在收到报文之后,解码分析出所需的数据并进行处理,最后返回结果。通常我们可以看到的都是像http://***.***.***.***/list.asp?id=***这样的URL请求,我们可以自己构造如下的报文来完成 。GET /list.asp?id=*** HTTP/1.1 HOST:***.***.***.*** 由于受URL长度1024的限制,所以GET方法通常是用在提交一些小数据的情况下。如果数据比较大就只能采用POST方法。在讲解POST方法的一些要点之前,大家还是先来看一段POST请求报文。
POST /huace/add.php HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms- powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwav e-flash, */* Referer: http://202.147.125.36/huace/add.php Accept-Language: zh-cn Content-Type: application/x-www-form-urlencoded Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) Host: 202.147.125.36 Content-Length: 115 Connection: Keep-Alive
name=test&email=&comefrom=&homepage=&icq=&oicq=&image=say.gif&comment=test&password=&doadd=
