以前的代码审计都是在CTF比赛题里面进行对于某一段代码的审计,对于后端php整体代码和后端整体架构了解的却很少,所以有空我都会学习php的代码审计,以提高自己

环境就直接用的是phpstudy,学习的前期对于环境的搭建以能够满足我们学习的需求即可,没有必要将每个组件分开安装,反而本末倒置了。

使用的代码审计工具是 Seay源代码审计系统

同时参考书籍也是尹毅的 《代码审计-企业级web代码安全架构 》

作者的博客:

https://seay.me/

espcms是2014版本的。

我们使用seay代码审计工具

常见的代码审计思路有以下四种:

1,根据敏感关键词回溯参数传递过程
2,查找可控变量,正向追踪变两个传递过程
3,寻找敏感功能点,通读功能点代码
4,直接通读全文代码

espcms的代码审计,我们跟书中一样,使用对于敏感函数回溯参数过程。

先按照书上审计的过程走一遍,我们再自己根据敏感函数寻找一些漏洞

我们找到

22条提示我们可能存在sql注入漏洞,继而我们点击该条

可以看到这里将我们传入的$parentid代入$sql语句中进行查询,而$parentid变量的值是在oncitylist()函数里面没有进行设么过滤,传参过来的函是accept()

这里仅对$parentid变量进行了是否为空的检测。

右键定位accept()函数

可以看到accept函数里面的内容

在这个位置对于输入的$k进行了daddslashes函数,daddslashes函数实际上是包装之后的addslashes函数

即对于我们输入的parentid参数输入的单引号等预定义字符进行过滤,不过之前的$sql语句里面我们发现

我们可以可以发现对于$parentid参数没有单引号进行闭合,所以 daddslashes 实际上没有起到任何作用。

如果这个语句写成下边这种情况:

$sql = "select * from $db_table where parentid='$parentid'";

同时还是像之前一样使用了addslashes()函数,那么除非有宽字节注入或者其他的特殊情况,不然我们就不能进行注入了。

我们发现这里有注入之后,可以看到该函数在important这个类里面

于是我们全局变量搜索出现了important类的位置,重点关注的是new 了important类的地方

可以看到在adminsoft/index.php这个页面new 了important这个类

点击之后可以看到在index.php页面$archive和$action这两个变量都有默认的值,我们在本地搭建的网站不输入参数直接访问就可以看到(当然在代码的逻辑里面也可以很清楚看出)

可以看到当我们没有任何参数输入的时候,archive=adminuser&action=login

但是实际上我们是想

调用important类里面的oncitylist函数,同时传递一个parentid的值。

在这里传入的$action与’on’字符串进行连接,组合成为新的$action,所以我们传入的$action=citylist,这里我们令$archive也为citylist,本来觉得archive为何值不重要,不过用其他array组里面的值就会报错,应该是代码里面其他地方做了限制。

因为是在admin的界面下进行的注入,所以我们需要先登录,再在url输入我们构造的payload

现在可以看到已经出现了citylist

不过我们的目的是传递parentid参数,

因为我们访问成功之后实际上已经调用了important类里面的oncitylist方法,不过因为我们没有主动传递parentid的值,所以其默认为1而已。

于是我们手动使用get方法传递parentid的值

构造payload之后,我们可以看到现在返回页面的citylist只剩下了北京,根据我们之前的分析,此处parentid存在不需要单引号闭合的sql注入漏洞,于是我们开始常规注入

字段数为5

回显位置: 3

在3的位置查询数据库名字和用户名

OK,跟着书上的漏洞复现成功,第一弹结束,第二弹的分析过程就自己分析吧,站在巨人的肩膀上固然会看的很远,但是更需要自己向上攀登才能到达更远的地方

espcms代码审计第一弹的更多相关文章

  1. typecho流程原理和插件机制浅析(第一弹)

    typecho流程原理和插件机制浅析(第一弹) 兜兜 393 2014年03月28日 发布 推荐 5 推荐 收藏 24 收藏,3.5k 浏览 虽然新版本0.9在多次跳票后终于发布了,在漫长的等待里始终 ...

  2. 我的长大app开发教程第一弹:Fragment布局

    在接下来的一段时间里我会发布一个相对连续的Android教程,这个教程会讲述我是如何从零开始开发“我的长大”这个Android应用. 在开始之前,我先来介绍一下“我的长大”:这是一个校园社交app,准 ...

  3. Hadoop基础-MapReduce的工作原理第一弹

    Hadoop基础-MapReduce的工作原理第一弹 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在本篇博客中,我们将深入学习Hadoop中的MapReduce工作机制,这些知识 ...

  4. Java基础-程序流程控制第一弹(分支结构/选择结构)

    Java基础-程序流程控制第一弹(分支结构/选择结构) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.if语句 1>.if语句的第一种格式 if(条件表达式){ 语句体: ...

  5. RMQ_第一弹_Sparse Table

    title: RMQ_第一弹_Sparse Table date: 2018-09-21 21:33:45 tags: acm RMQ ST dp 数据结构 算法 categories: ACM 概述 ...

  6. codechef 营养题 第一弹

    第一弾が始まる! 定期更新しない! 来源:http://wenku.baidu.com/link?url=XOJLwfgMsZp_9nhAK15591XFRgZl7f7_x7wtZ5_3T2peHh5 ...

  7. 好玩的WPF第一弹:窗口抖动+边框阴影效果+倒计时显示文字

    原文:好玩的WPF第一弹:窗口抖动+边框阴影效果+倒计时显示文字 版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csd ...

  8. [Git] 002 初识 Git 与 GitHub 之加入文件 第一弹

    在 GitHub 的 UI 界面使用 Git 往仓库里加文件 第一弹 1. 点击右上方的 Create new file 2. 在左上方填入文件名,若有后缀,记得加上 3. 页面跳转,此时已有两个文件 ...

  9. [Markdown] 03 进阶语法 第一弹

    目录 1. YMAL 题头 2. 缩写 3. 强调 4. 自定义 <div> 标签 5. <cite> 标签 5. <code> 与 <br> 标签 6 ...

随机推荐

  1. ip_rcv 中使用skb_share_check

    /* * Main IP Receive routine. */ int ip_rcv(struct sk_buff *skb, struct net_device *dev, struct pack ...

  2. 都知道的copy_from_user

    Q:一直知道内核和用户态的数据交互前都需要 校验地址的合法性,一般都用copy_from/to_user完成数据拷贝,那么为什么要这样呢?? A:看了一些blog以及Stack Overflow 主要 ...

  3. C语言环境总结

    1.虚拟内存下C语言环境 2.main函数调用 3.栈调用 每次函数调用,在栈中分配一个栈帧,寄存器通过持有该栈帧的基地址,并上下偏移,访问形参和本地变量, C语言形参为一个字大小,所以通常传指针,这 ...

  4. ceph客户端服务端属性匹配关系

    ceph的server是定期会发布版本,而它的客户端是放到linux 内核当中的,一些属性的支持是依赖于内核版本的,这样就存在一些问题,一些功能后端支持,而客户端旧了:还有可能是客户端用的很新的内核, ...

  5. TensorFlow_笔记

    Tensorflow 1.基本概念 TensorFlow是一个编程系统,使用图(graphs)来表示计算任务,图(graphs)中的节点称之为op(operation),一个op获得0个或多个Tens ...

  6. 阿里巴巴已offer:Java实习五面详细面经(附解答)

    1.岗位 Java后台开发实习生 2.时间表 2020/3/18 提交简历 & 测评 2020/3/23 笔试 2020/3/26 简历面 2020/4/11 技术一面 2020/4/14 技 ...

  7. Kubernetes 入门与安装部署

    一.简介 参考:Kubernetes 官方文档.Kubernetes中文社区 | 中文文档 Kubernetes 是一个可移植的.可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自 ...

  8. [LeetCode题解]24. 两两交换链表中的节点 | 递归

    方法一:递归 解题思路 递归法,假设后续链表已经完成交换,此时只需要对前两个节点进行交换,然后再连接上后续已交换的链表即可. 代码 /** * Definition for singly-linked ...

  9. [代码审计Day2] filter_var函数缺陷代码审计

    简介 // composer require "twig/twig" require 'vendor/autoload.php'; class Template { private ...

  10. python-基础入门-5(模块、类和对象)

    模块 模块用import来调用,例如 from sys import argv 调用sys中argv模块 在模块里有多个def的函数 import调用全部或其中一个 类和对象 下面定义了一个类 1 c ...