新手首次php代码审计--熊海cmsV1.0

首次代审--熊海cmsV1.0

附源码下载链接

https://zdown.chinaz.com/201503/xhcms_v1.0.rar

将源码导入seay系统,并开始审计

0x01

index.php文件 文件包含

代码解读:

file变量接受get传参的r参数值

$action=$file==''?'index':$file;

这是简单的判断语句

条件表达式 ? 真值时的结果 : 假值时的结果

意思就是 如果file的值为空action就等于index否则等于$file变量

include() 函数 包含指定文件

漏洞验证:

在网站根目录放入一个phpinfo文件,后缀名为php

然后访问网站

127.0.0.1:8081/index.php?r=../test

0x02

adset.php文件sql注入

代码解读:

if ($save==1){ $query = "UPDATE adword SET ad1='$ad1', ad2='$ad2', ad3='$ad3', date=now()"; @mysql_query($query) or die('修改错误:'.mysql_error()); echo "<script>alert('亲爱的,广告设置成功更新。');location.href='?r=adset'</script>"; exit; } 如果$save变量为1,就会更新adword表的记录$ad1、$ad2、$ad3为文本 now()为当前时间

@mysql_query($query) #执行sql语句

漏洞验证:

进入数据库查看一下该表数据

在web找到该功能点

开启mysql命令监听工具

点击保存

查看执行的语句

添加'--+干扰发现有魔术引号

因为数据库编码是utf-8编码,所以不能宽字节注入

只能尝试二次注入了 看功能点没办法进行二次注入 gg了

0x03

editoolumn.php 文件sql注入

代码解读

只要save变量等于1 都会执行update的sql语句

并且这些参数全是get和post传参

漏洞验证:

来到栏目管理 -》修改栏目

全跟一个单引号干扰,成功引出报错,存在sql注入

构造获取当前数据库名字语句

0' and updatexml(1,concat(0x7e,database(),0x7e),1)--+#

成功实现报错注入

3-15都是一个原理

0x04

downloads.php文件任意文件读取漏洞

代码解读:

$fp变量以二进制读取指定路径$socurceFile的文件

fread($fp, 1024 * 8):从文件指针 $fp 中读取数据。第一个参数是文件指针,第二个参数是要读取的最大字节数。在这里,每次读取的字节数是 1024 * 8,即 8192 字节(8KB)

例如python中的fp = open(socurceFile,"rb")

追溯到该参数的第一个位置 可以看见该文件sourceFile参数是$fileadd参上

再追溯fileadd参数 可以发现是$down关联数组键名为为softadd的值

addslashes():对预定义字符进行转义 例如 ’、\、“

!is_numeric():判断是否为数字

mysql_fetch_array()是PHP中用于从MySQL查询结果中获取数据的函数。它接受一个查询结果变量作为参数,并以数组的形式返回一行数据。

mysql_query():执行sql语句

这一套看下来 get传参cid参数的值进行转义后赋值给fileid参数

然后去数据库查询id=$fileid的结果赋值给 result

再将该查询结果变为数组赋值给 down

$down关联数组键名为为softadd的值赋值给$fileadd参数

fileadd又直接赋值给sourceFile

然后读取出来

ok 那么开始构造

漏洞验证:

来到前端的下载页面点击 【电信下载】

发现报错

复制文本来到源码查找原因

发现是因为$sourceFile变量为空导致

$fileadd=$down['softadd'];

$sourceFile = $fileadd;

进入数据库查看id=1时 softadd确实是为空

添加一个路径进去

再次访问就变成下载链接

但是这个路径不可控,所以说不存在任意文件下载

但是可以联合sql注入不断更新数据进行任意文件下载

0x05

downloads.php文件sql注入

代码解读:

0x04讲过这段代码

看注入点就是这个fileid了

漏洞验证:

在cid参数后添加'发现返回 : 错误的下载请求

查看源码发现

是因为cid参数必须是数值才能继续执行sql,所以说这里不存在sql注入

0x06

controller.php文件xss

代码解读:

seay系统爆漏洞是因为这个echo

if (isset($_GET["callback"])) { if (preg_match("/^[\w_]+$/", $_GET["callback"])) { echo htmlspecialchars($_GET["callback"]) . '(' . $result . ')'; } else { echo json_encode(array( 'state'=> 'callback参数不合法' )); } } else { echo $result; }

isset():检查变量是否已设置并且不为null的函数,变量存在且不为null,则返回true,否则返回false

preg_match():已经介绍了,是正则的匹配函数

^ 匹配开头 [\w_] 匹配一个字母、数字或下划线 + 按照前面的匹配模式持续 $匹配结尾

联合起来:字符串是否完全由字母、数字、下划线组成

要满足这个正则才能执行echo

漏洞验证:

直接访问/seacmseditor/php/controller.php?callback=123

解密

查看源码

是进入了这个选择里,不用管这里

因为123已经写进去了,尝试xss payload

发现没有写入成功 因为这个正则过滤掉了<>这些符号

好了首次代审结束,有点收获:发现了代审的魅力所在了,再接再厉

  • 14
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值