记录我的第一次SEMCMS代码审计之旅(一)

郑重鸣谢 阿信!!!!!

一、 环境

环境嘛!!就是semcms,随便上网搜一下,丢到网站根目录里去就好了,开始会让配置数据库,也超简单的说!!就不赘述了,需者自取
SEMCMS::: http://www.sem-cms.com/xiazai.html

二、审计发现

我个人对sql注入比较熟一点,所以一上来就先找的sql注入的点!!中途碰了几次壁也去找了找XSS漏洞提升了提升自信。

2.1 vuln1:前台语言配置sql注入漏洞

我拿到项目后,第一件事其实先在前端熟悉了一下整个业务,然后再到后台看项目的目录结构进一步熟悉
在这里插入图片描述
可以看到命名已经很明显了

editimagesincludeinstalltempletezVODSK_Admin
一眼看不出来做什么的,进去看了看,很多的js、css文件,对我们作用不大一看就是存放网站用的图片的包含文件,那么这里面就有可能有一些重要的内容,如网页的通用框架、校验类等安装app时使用的文件这里面其实放的是前台的文件后台管理相关的文件

ok基本的结构熟悉了之后,用phpstorm打开我们的项目,然后我做的第一件事就是去看了他的参数校验规则
在这里插入图片描述
这个contrl.php就是,我们看看它怎么写的
在这里插入图片描述
最上面

if (isset($_GET)){$GetArray=$_GET;}else{$GetArray='';} //get

foreach ($GetArray as $value){ //get
    
    verify_str($value);
  
}

如果有通过get方法传的参数,则对每一个参数值调用verify_str函数,那我们看看这个函数怎么写的

function verify_str($str) { 
 
   if(inject_check_sql($str)) {
   
       exit('Sorry,You do this is wrong! (.-.)');
    } 
 
    return $str; 
} 

就收一个参数$str,然后调用inject_check_sql函数,如果返回值为真,则显示错误信息,否则返回该字符串,那我们继续跟进inject_check_sql函数

function inject_check_sql($sql_str) {
  
     return preg_match('/select|insert|=|%|<|between|update|\'|\*|union|into|load_file|outfile/i',$sql_str); 
} 

该函数使用了preg_match,表示如果我们传入的字符串中出现第一个参数中列出的字符串,那么返回true,否则返回false。可以注意到'被过滤掉了,双引号没有,那么这个时候想,如果某一条sql语句使用双引号闭合或者干脆是数字,是不是就可以越过这一点了?select、union、update也被过滤了,哭了,很明显可以利用的语句不多了,我们再看看有没有其他漏网之鱼,我们知道报错注入有一个函数为extractvalue,没有被过滤,database() user datadir basedir这些都没有被过滤,那么立足于这个,我们就可以在一定程度上搞事情了。
首先我们要找到一条闭合符为数字或者双引号的语句,或者闭合符为单引号但开发者没有对数据进行校验,且要满足通过post方式传参!!
我们直接全局搜索

select.*from.*where

在这里插入图片描述
眼尖的我看到了一句

select * from sc_tagandseo where languageID=$Language

很明显这里的参数为数字,这就满足了一个条件了,我们再看看$language哪儿来的,直接双击定位到该语句的位置,我发现了
在这里插入图片描述

看到没有language是通过post传参的,但是我又注意到,$language除了通过verify_str校验,还经过了另一个函数test_input校验,我们跟进去看看这个函数
在这里插入图片描述
首先替换了%,然后去字符串首尾空格,解转义,实体编码。说实话这些过滤是针对XSS的,对我们sql注入毛的影响都没有,至于引号,我们的语句中都不会出现,它也没有办法实体编码,这我就放心了,那么接下来就是看看我们的sql语句是在哪个页面执行了。
在这里插入图片描述
这是一个配置类文件,看看它在哪被包含,这个文件中包含了大量的配置类信息,我猜它几乎在每一个页面都有,我们随便打开一个文件
在这里插入图片描述
然后我们在浏览器中访问这个文件
在这里插入图片描述
然后配置代理,使用bp抓包,把抓到的包发到重发器
在这里插入图片描述
然后像上图那样鼠标右击request部分,修改请求方式为POST,这里注意我踩了坑,我开始是直接手工将GET改成POST的,一直没有成功,浪费了很多时间!!!!
然后加上请求体
在这里插入图片描述
欸,大功告成,然后我就狗带了
在这里插入图片描述
直接报服务器内部错误,这谁惹得起!!!!
反正我觉得我的思路没有问题,没跑出来肯定不是我的锅!!!

2.2 vuln2:后台类别添加页sql注入漏洞

还是首先全局搜索sql语句,找数字型的,或者没有应用校验规则的,这里我直接贴我找到的一处:
在这里插入图片描述
这条sql语句在checifno这个函数中,要执行要满足需\$fl=f,我们要注入要满足$biao,$ziduan,$str至少一个可控,我们看看哪儿调用了这个函数
在这里插入图片描述
找到一条满足条件的,跟过去
在这里插入图片描述
然后我们看看$PID哪儿来的,继续跟
在这里插入图片描述
post传参,经过test_input函数,你以为这就完了?还没有,我们再看看这条sql要执行需要满足的其他条件。
在这里插入图片描述
我就直接总结了:
$CF=category
$Class=add
$category_name不为空

继续跟,首先看$CF怎么来的
在这里插入图片描述
get方式传参

再看$Class
在这里插入图片描述
一样get方式传参

再看$category_name
在这里插入图片描述
post方式传参,test_input函数过滤。
幸运的是这几个参数都在一个文件里面
在这里插入图片描述
然后看哪个文件使用了它
在这里插入图片描述
继续,看哪个使用了上面的文件
在这里插入图片描述
搞定,我们访问这个页面,其实是后台主页面,然后发送到bp,修改请求方式为POST,添加url参数与请求体如下
在这里插入图片描述
等待十秒后成功返回数据
在这里插入图片描述
我们试一下可以拿数据不
在这里插入图片描述
结果是可以的,注意语句中不能出现引号,会被实体编码!!!

2.3 vuln3:后台登录页面密码可爆破

直接bp抓包,爆破就行了,巨简单,没有一秒我就跑出来了
在这里插入图片描述

2.4 vuln4:后台登录页面忘记密码验证码可爆破

输入用户名,点击忘记密码,输入绑定的邮箱,点击发送验证码,随便填一个验证码,点击确认,
在这里插入图片描述
这里因为配有配置邮箱相关信息,所以会报错,不过验证码已经成功生成了,是一个四位数字
在这里插入图片描述
正常不报错会跳转到输入验证码的界面,这里我们直接访问
在这里插入图片描述
注意这里第一个input框是只读的,我们需要审查元素找到它,然后把只读属性去掉,填入刚才接受验证码的邮箱,然后填入新密码,随便输一个验证码,使用bp抓包发送到爆破模块
在这里插入图片描述
去除它自己加的所有payload位置,只在uyzm字段添加!!在payload选项卡这样设置
在这里插入图片描述
然后点击开始攻击
在这里插入图片描述
验证码为6217
在这里插入图片描述
然后使用新密码654321登录成功

2.5 vuln5:后台登录地址显示处反射型XSS

我在进行黑盒测试的时候,发现有这么个东西。
在这里插入图片描述
这个竟然有我的ip,那么我的ip能从哪里来呢?
http请求头!!client-ip x-forward-ip x-real-ip remote-addr字段
然后我就试了cliten-ip字段,我把他改成1234登录了一次
在这里插入图片描述
然后
在这里插入图片描述
嗯就是他,我们再看这个值在源代码中式怎么展示的,审查元素
在这里插入图片描述
看到了吗,被<span>标签包围了,那么我准备构造这样的payload

123</span><img src οnerrοr=alert(document.cookie)>

在这里插入图片描述
然后他就
在这里插入图片描述

2.5 vuln6:用户名明文与密码直接存储在cookie中

看这个
在这里插入图片描述
cookie的值为

PHPSESSID=tv7i242svjma2sptqlf598cip3; scusername=%E6%80%BB%E8%B4%A6%E5%8F%B7; scuser=c33367701511b4f6020ec61ded352059; scuserqx=74%2C76%2C77%2C87%2C88%2C75%2C78%2C79%2C80%2C81%2C82%2C83%2C84%2C89%2C100%2Cen

让我们猜猜这几个字段什么意思

字段scusernamescuserscuserqx
%E6%80%BB%E8%B4%A6%E5%8F%B7c33367701511b4f6020ec61ded35205974%2C76%2C77%2C87%2C88%2C75%2C78%2C79%2C80%2C81%2C82%2C83%2C84%2C89%2C100%2C
解密总账号654321%2c是逗号,这是一串啥???

在这里插入图片描述
这密码就这么明晃晃得放着啊!!!!

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
SemCms是一套开源外贸企业网站管理系统,主要用于外贸企业,兼容IE、Firefox 、google、360 等主流浏览器。 SemCms(asp版)使用vbscript语言编写,结合iis运行。 SemCms(php版)使用php语言编写,结合apache,在window,或linux系统下运行。 SemCms采用国际通用utf-8编码编写。 SemCms非常适合在外贸企业,电子商务互联网应用上使用,2009年12月首次发布以来,SemCms依靠出色的用户体验和领先的技术不断扩大外贸场占有率,目前在国内已经成为最受欢迎的英文外贸网站之一。 主要特点: 快速:体积小,加载速度快。 开源:开放源代码,高水平,高品质。 扩展:可静态化,可根据需求增减功能。 风格:修改编辑风格很容易,只需修改一个CSS文件。 兼容:支持大部分主流浏览器,比如IE、Firefox google、360 等。 程序php版 : php+myslq+apache+div+css。php版采用自适应网站模式开发,兼容pc端、移动和平板端设备。 主要功能: 主要栏目:Home About us Products News FAQ Feedback Contact us。 文件名:自定义产品文件名,产品栏目文件名,上传的图片文件名。 生成静态:semcms:asp版可生成整站纯静态html格式(一键生成方式),php版可全站伪静态使用 url 重写机制。 缩略图:上传图片结合aspjpeg组件可生成大图与小图及自定义水印位置,无限制上传图片。 图片展示:结合lightbox插件多图展示。 询盘管理:客户留言及询盘都可自动发送自已定义的邮箱及后台的询盘管理中。 联系方式:无限制添加emial,skype,WhatsApp可自行输入。 模板管理:后台模板一键切换。 文件管理:图片与文件可一键删除。 排序功能:导航,产品,栏目,可自定义排序,随意调动显示顺序。 后台管理:所有参数都在后台自行设定。 系统扩展: semcms php版 可扩展 多语言系统,商城模式。 运行环境: php+mysql+apache windows系统或linux系统下运行 默认帐户密码: 后台帐户:Admin 后台密码:1 semcms php 版 外贸网站 V1.6更新内容如下: 1.修改上传文件,获取扩展名 2.修改带单引号的数据写不了数据库 3.友情链接修改,用户修改,banner 等修改,为空返回链接地址不对

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值