<a target="_blank" rel="nofollow" href="http://gao200810.cn">http://gao200810.cn</a>
前一段时间,樱花浪子发现了DVBBS8.0的自定义头像跨站点,看了他的文章后令我对DVBBS8有了一些兴趣,所以就下了套来看,谁知,真的被我看出了点问题了。好了,现在我们来分析下漏洞的成因。
我们看看IndivGroup_List.asp文件的部分漏洞代码:
....省略部分代码....看倒了么?在saveappgroup过程中Groupname和GroupInfo两个变量经过Dvbbs.CheckStr过滤之后再赋值,那么,现在我们来看看Dvbbs.CheckStr这个函数是怎么写的,代码如下:
....省略部分代码....public static final int ONE = 1;
public static final int TWO = 2;
protected boolean mammal = true;
protected boolean carnivorous = true;
protected int mood = TWO;
public boolean isMammal()
{
return(mammal);
}
public boolean isCarnivorous()
{
return(carnivorous);
}
abstract public String sayHello();
abstract public String sayHello(int moodval);
public void setMood(int newValue)
{
mood = newValue;
}
public int getMood()
{
return(mood);
}
}public int getNumberOfLegs();
}public boolean getGillFlag();
public boolean getLaysEggs();
}{
private int numberOfLegs = 4;
public Dog()
{
mammal = true;
carnivorous = true;
}
public String sayHello()
{
return("摇摇尾巴");
}
public String sayHello(int moodval)
{
this.setMood(moodval);
switch (mood) {
case 1:
return("呜呜叫");
case 2:
return("旺旺旺叫");
}
return("摇摇尾巴");
}
public int getNumberOfLegs()
{
return(numberOfLegs);
}
}private int numberOfLegs = 4;
private boolean tailFlag = true;
public Cat()
{
mammal = true;
carnivorous = true;
}
public String sayHello()
{
return("喵喵叫");
}
public String sayHello(int moodval)
{
this.setMood(moodval);
switch (mood) {
case 1:
return("嘶嘶叫");
case 2:public static final int ONE = 1;
public static final int TWO = 2;
protected boolean mammal = true;
protected boolean carnivorous = true;
protected int mood = TWO;
public boolean isMammal()
{
return(mammal);
}
public boolean isCarnivorous()
{
return(carnivorous);
}
abstract public String sayHello();
abstract public String sayHello(int moodval);
public void setMood(int newValue)
{
mood = newValue;
}
public int getMood()
{
return(mood);
}
}public int getNumberOfLegs();
}public boolean getGillFlag();
public boolean getLaysEggs();
}{
private int numberOfLegs = 4;
public Dog()
{
mammal = true;
carnivorous = true;
}
public String sayHello()
{
return("摇摇尾巴");
}
public String sayHello(int moodval)
{
this.setMood(moodval);
switch (mood) {
case 1:
return("呜呜叫");
case 2:
return("旺旺旺叫");
}
return("摇摇尾巴");
}
public int getNumberOfLegs()
{
return(numberOfLegs);
}
}private int numberOfLegs = 4;
private boolean tailFlag = true;
public Cat()
{
mammal = true;
carnivorous = true;
}
public String sayHello()
{
return("喵喵叫");
}
public String sayHello(int moodval)
{
this.setMood(moodval);
switch (mood) {
case 1:
return("嘶嘶叫");
case 2:printf("\n请输入要插入的学号:");
scanf("%d", &stu[n].num);
printf("\n姓名:");
fflush(stdin);
gets(stu[n].name);
printf("\n三门成绩:\n\n成绩1:");
scanf("%f", &stu[n].score[0]);
printf("\n成绩2:");
scanf("%f", &stu[n].score[1]);
printf("\n成绩3:");
scanf("%f", &stu[n].score[2]);
stu[n].avr = (stu[n].score[0] + stu[n].score[1] + stu[n].score[2]) / 3;
n++;
}printf("\n请输入要删除的学员的学号:");
scanf("%d", &number);
del(stu , n , number);
n--;
}printf("学号:");
scanf("%d", &stu[i].num);//接收学号
printf("\n姓名:");
fflush(stdin);
gets(stu[i].name);//接收姓名
printf("\n成绩1:");
scanf("%f", &stu[i].score[0]);//接收成绩1
printf("\n成绩2:");
scanf("%f", &stu[i].score[1]);//接收成绩2
printf("\n成绩3:");
scanf("%f", &stu[i].score[2]);//接收成绩3
stu[i].avr = (stu[i].score[0] + stu[i].score[1] + stu[i].score[2]) / 3;//计算平均成绩
i++;
printf("\n是否继续?<y/n>");
fflush(stdin);
ch = getchar();