以前的代码审计都是在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. wpf 全局异常捕捉+错误日志记录+自动创建桌面图标

    /// /// 创建桌面图标 /// public static void CreateShortcutOnDesktop(string LnkName) { String shortcutPath ...

  2. php 上传音频文件并获取时长

    <input type="file" name="audio" id="voice_file" style="display ...

  3. 4. 树形DP

    337. 打家劫舍 III https://leetcode-cn.com/problems/house-robber-iii/ /** * Definition for a binary tree ...

  4. shell编程之字符串操作

    shell中字符串操作主要有以下几种,其中:pattern ,old中可以使用通配符: ${#var} :返回字符串变量var的长度 ${var:m} :返回${var}中从第m+1个字符到最后的部分 ...

  5. pandas.DataFarme内置的绘图功能参数说明

    可视化是数据探索性分析及结果表达的一种非常重要的形式,因此打算写一个python绘图系列,本文是第一篇,先说一下pandas.DataFrame.plot()绘图功能. pandas.DataFram ...

  6. python之深浅copy与id

    我们都知道 所谓变量就是就是在空间中开辟一块内存空间.来存放东西的 学过c语言的都知道而数组也是有内存地址的 我们如何来查看内存地址呢?id()这函数就来了 x = 5 print(id(x)) 如此 ...

  7. 压缩css与js

    使用yuicompressor 进行css和js的压缩 #! /bin/sh yasuocss="java -jar /root/yuicompressor-2.4.8.jar --type ...

  8. Xpath定位元素-一个例子

    前几天在群里面解决的问题,记录下来和大家分享 需要定位这个股份制企业 方法: # 首先需要单击下拉框弹出企业性质的下拉选项:然后用过Xpath定位元素 driver.find.element_by_c ...

  9. How to realize one's ambition

    Work Overtime Can it work? To some extent, it parhaps works very well. What if you do little job and ...

  10. Python一行式代码

    # 简易Web Server,可以直接快速共享文件 python -m http.server # 脚本性能分析 python -m cProfile my_script.py # 列表辗平 impo ...