php2019版本,某cms 2019版本代码审计

原标题:某cms 2019版本代码审计

听说这个比较好入门就下载下来练习代码审计了

一、任意文件删除

/admin/dl_data.php

3fdd1dace9fdd67b964d9273bb289017.png

可以看到对filename参数没有任何的过滤

2f10017110baa2a3fa389d8888065eca.png

二、 sql注入

在 /inc/stopsqlin.php下,

3fb304a355e29270109585c31e9eca65.png

可以看到对 get、 post 和cookie中的接收的内容都在zc_check函数进行过滤

e3b9807a9cb8f37035ed24d67490e932.png

主要使用了addslashes函数 ,也就是说 会对单引号(')、双引号(")、反斜线(\)与 NUL(NULL 字符) 进行转义

那么想找sql注入的话常见的有以下几种思路:

1.SQL语句中传参无单引号闭合

2.字符串编码绕过

这个问题主要利用一些编码对转义的特殊字符进行编码,第一种情况是当数据库编码格式设置为GBK时,可以实现宽字节注入,第二种情况是使用了iconv()或mb_convert_encoding()进行编码绕过

3.Sprintf()格式化字符串函数漏洞

4.超全局变量$_SERVER

比如 $_SERVER['PHP_SELF'] $_SERVER['HTTP_HOST']

1. $_SERVER [‘HTTP_HOST’]

5d55a8d74d0a0eed87167b1190070c37.png

在第五行可以看到 $_SERVER [‘HTTP_HOST’] 没有进行过滤就直接拼接了,查找包含调用 zt/top.php文件的来进行利用

136c0ec15a2d2f2488578da247dfdfcd.png

比如利用 http://127.0.0.1/zt/companyshow.php

ef34b62ec9083f5113d8f276d009b252.png

2. user\adv2.php

57f8f2067587f6bd4e734edb2503e1d7.png

第67行,很明显看到这边对post方法传进的id没有进行过滤

首先注册用户要企业用户,用户要通过审核后才能发布招商信息

eb4c1d0e4615a0f7e533db49363189f9.png

$_REQUEST 调用接受action的动作

61a2c35e1b650a6ec65b756a26020741.png

当action为modify的时候

df8bb53a4743d501f599443fa9b667d2.png

调用 check_user_power函数,传参set_text_adv

跟进 check_user_power

042d7eaef39af37c4554efde46c45937.png

b7fdcf160922cea6c2bde13c8a538db9.png

将传进的值set_text_dev与查询出的config的内容用函数str_is_inarr对比,返回no

21275b9e194f34c0e02cd4fd7a685e45.png

因为积分模块默认开启,向setAdv函数传值1

接下来要让 $a+$b==0不成立

ce2a7a95a394e888a323edcf1310b3ae.png

因为zzcms_main里面存的是对应用户的招商信息,我们只要发布一条招商信息就可以让$a=1,然后设置广告语后就可以进行构造语句注入了

ebe9925caa53d80366cfd327e8fa30d4.png

3. ajax/zs.php

79170f347c3b26b2ab385389bf5d8bcd.png

f918218423d1a0726e87eb48b8aabb1e.png

第十行这边从从cookie中获取pxzs的内容,然后直接没有引号闭合就在第45行进行拼接,导致sql语句可控,利用sqlmap来进行注入

c33080ee97246c3995e857272393a87b.png

a7ab7690d005607108758abcffd00fbe.png

4. zs/subzs.php

4dfd491e0b57d2a609bddb24569de7ff.png

在showcookiezs函数中,第十六行sql语句将cookie中接收的zzcmscpid没闭合直接拼接

查找调用showcookiezs的函数,在fix函数中被调用,而且要当标签为cookiezs的时候才能执行,继续查找调用fix的函数

c847ca334997119d0f5d0de5a3b8c712.png

发现在label.php的第十二行的showlabel函数中调用

d7f63fcc7880a7b880cb45c4e44e27ae.png

也就是要查找调用showlabel函数,而且传进去的$str 带有标签 cookiezs 的

43a9e025c98e1746fc833bcf413679d4.png

查找发现有2个符合,分别是 zs/search.php 和 zs/zs_list.php

zs/search.php

$fp="../template/".$siteskin."/zs_search.htm";

$f = fopen($fp,'r');

$strout = fread($f,filesize($fp));

$strout=showlabel($strout);

echo $strout;

833d75fb4fb470ea669b92903085f13c.png

zs_list.php

$fp="../template/".$siteskin."/".$skin;

$f = fopen($fp,'r');

$strout = fread($f,filesize($fp));

$strout=showlabel($strout);

echo $strout;

9fa83492fa0166fc0cfb4c84c3d1816e.png

三、XSS

user/ask.php

传入action为modify的话会执行 modify函数 ,跟进 modify函数

4f1549d497a4e955d78d02d863978a94.png

目标是触发218行的markit函数,可知,当传入id不为0的时候,并且根据你要修改的id从 zzcms_ask表里面查询出来的编辑者不是当前用户的话,那么就会触发 markit

28245f1884c2fa0bfe94fb087e181224.png

跟进 markit 函数,发现使用$_SERVER[‘HTTP_HOST’]来进行拼接,直接在host头部构造xss语句

f05736a208fc6290604bb4bdbe3daf1b.png

45580dcd38e429de0f5fd06ffa4ff574.png

bc9d33056c4fb6518f24681e94e5dec7.png

因为还有$_SERVER[‘REQUEST_URI’],也可以在请求的url中构造,但是要注意在inc/stopsqlin.php中有过滤

if (strpos($_SERVER['REQUEST_URI'],'')!==false || strpos($_SERVER['REQUEST_URI'],'%26%2399%26%')!==false|| strpos($_SERVER['REQUEST_URI'],'%2F%3Cobject')!==false){

die ("无效参数");//注意这里不能用js提示

}

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值