主要是学习尹毅大佬那本审计学习的书的笔记

首先安装好CMS系统信息,如果需要该版本cms的,可以私信我。

Seay工具自动审计
选取一段可能存在漏洞的代码,进入该文件目录下,发现这段代码

function oncitylist() {$parentid = $this->fun->accept('parentid', 'R');$parentid = empty($parentid) ? 1 : $parentid;$verid = $this->fun->accept('verid', 'R');$verid = empty($verid) ? 0 : $verid;$db_table = db_prefix . 'city';$sql = "select * from $db_table where parentid=$parentid";$rs = $this->db->query($sql);

其中

$parentid = $this->fun->accept('parentid', 'R');

可以很清晰的看到变量传递的一个过程,定位一下accept函数

Public文件夹应该是公共函数,进去后可以看到

代码如下

function accept($k, $var = 'R', $htmlcode = true, $rehtml = false) {switch ($var) {case 'G':$var = &$_GET;break;case 'P':$var = &$_POST;break;case 'C':$var = &$_COOKIE;break;case 'R':$var = &$_GET;if (empty($var[$k])) {$var = &$_POST;}break;}$putvalue = isset($var[$k]) ? $this->daddslashes($var[$k], 0) : NULL;return $htmlcode ? ($rehtml ? $this->preg_htmldecode($putvalue) : $this->htmldecode($putvalue)) : $putvalue;}

获取GET、POST、COOKIE参数值后,会将k变量进行daddslashes函数过滤, daddslashes会把单引号(’)、双引号(")、反斜线(\)与 NUL(NULL 字符)进行转义。而在function oncitylist()中数据库查询的语句是这样的,并没有对$parentid进行引号闭合,所以可以构造数字型注入,payload不会被转义

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

那怎么才能找到web页面parentid接口处的url值呢,如下图所示oncitylist函数在importan
类中,对该import类进行全局搜索

定位到important函数处

$archive = indexget('archive', 'R');
$archive = empty($archive) ? 'adminuser' : $archive;$action = indexget('action', 'R');
$action = empty($action) ? 'login' : $action;if (in_array($archive, array('acmessagemain', 'adminuser', 'advertmain', 'adverttypemain', 'albummain', 'article', 'bbsmain', 'bbstypemain', 'callmain','citylist', 'connected', 'createmain', 'createseomain', 'enquirymain', 'filemain', 'filemanage', 'formmain', 'formmessmain', 'language', 'languagepack','lib_menu', 'mailinvite', 'mailsendmain', 'mailtemplatemain', 'management', 'memattmanage', 'membermain', 'memclassmanage', 'modelmanage', 'ordermain','payplug', 'payreceipt', 'powergroup', 'printtemplatemain', 'recommanage', 'seomanage', 'shipplug', 'shipreceipt', 'sitemain', 'skinmain', 'sqlmanage', 'smstemplatemain','subjectmanage', 'templatemain', 'typemanage', 'mobliemain', 'smsmain'))) {if (!file_exists(admin_ROOT . adminfile . "/control/$archive.php")) {exit('Access error!');}include admin_ROOT . adminfile . "/control/$archive.php";$control = new important();$action = 'on' . $action;if (method_exists($control, $action)) {$control->$action();} else {exit('´íÎó£ºÏµÍ³·½·¨´íÎó£¡');}

主要还是这两句

$archive = indexget('archive', 'R');
$archive = empty($archive) ? 'adminuser' : $archive;$action = indexget('action', 'R');
$action = empty($action) ? 'login' : $action;

archive 可控,调用citylist文件里的citilist方法,citilist方法中调用parentid参数。所以构造的payload为

http://127.0.0.1/espcms/adminsoft/index.php?archive=citylist&action=citylist&parentid=1

然后按照常规注入就行

易思ESPCMS(2014)敏感函数回溯参数的审计学习相关推荐

  1. 布谷鸟哈希函数的参数_系统学习hash算法(哈希算法)

    系统学习hash算法(哈希算法) 转载请说明出处. 前言: 关于本文<系统学习hash算法>的由来.在看到了<十一.从头到尾彻底解析Hash 表算法>这篇文章之后,原文中没有暴 ...

  2. Swift 烧脑体操(二) - 函数的参数

    前言 \\ Swift 其实比 Objective-C 复杂很多,相对于出生于上世纪 80 年代的 Objective-C 来说,Swift 融入了大量新特性.这也使得我们学习掌握这门语言变得相对来说 ...

  3. [C/C++基础知识] main函数的参数argc和argv

    该篇文章主要是关于C++\C语言最基础的main函数的参数知识,是学习C++或C语言都必备的知识点.不知道你是否知道该知识?希望对大家有所帮助. 一.main()函数参数 通常我们在写主函数时都是vo ...

  4. 数仓如何设置大小写不敏感函数

    本文分享自华为云社区<GaussDB(DWS) 大小写不敏感函数>,作者: 积少成多 . 大小写不敏感函数是指入参忽略大小写的函数,此类函数的主要应用场景是字符串的查询.是否大小写敏感会影 ...

  5. Python基础知识——函数的基本使用、函数的参数、名称空间与作用域、函数对象与闭包、 装饰器、迭代器、生成器与yield、函数递归、面向过程与函数式(map、reduce、filter)

    文章目录 1 函数的基本使用 一 引入 二 定义函数 三 调用函数与函数返回值 2 函数的参数 一 形参与实参介绍 二 形参与实参的具体使用 2.1 位置参数 2.2 关键字参数 2.3 默认参数 2 ...

  6. 函数的参数、返回、调用、递归

    一.函数的参数 1.形式参数和实际参数 1.1形式参数 形参出现在被调函数当中,在整个函数体内都可以使用.形参在定义时编译系统并不分配存储空间,只有在调用该函数时才分配内存单元.调用结束内存单元被释放 ...

  7. php敏感函数,PHP中的敏感函数

    跟安全有关的敏感函数 在代码安全审计中,快速定位敏感函数,有助于帮助我们更快发现漏洞.这里就通过实例方式说明一下敏感函数是如何运行的. 1.eval() 该函数把字符串当做php代码来计算,并且字符串 ...

  8. Go 学习笔记(15)— 函数(01)[函数定义、函数特点、多值返回、实参形参、变长参数,函数作为参数调用]

    1. 函数定义 Go 语言最少有个 main() 函数.函数声明告诉了编译器函数的名称,返回类型和参数. func funcName(parameter_list)(result_list) {fun ...

  9. python函数用法详解2(变量的作用域(全局变量、局部变量)、共享全局变量、函数返回值、函数的参数(位置参数、关键字参数、默认参数、不定长参数)、拆包、交换变量值、引用、可变和不可变类型)

    1. 变量作⽤域         变量作⽤域指的是变量⽣效的范围,主要分为两类:局部变量和全局变量. 局部变量         定义在函数体内部的变量,即只在函数体内部⽣效. def testA(): ...

最新文章

  1. 【C++】explicit 关键字
  2. Recurrent Neural Network系列2--利用Python,Theano实现RNN
  3. Spring.NET学习笔记10——方法的注入(基础篇) Level 200
  4. 将字符串中的空格用%20替换
  5. Python3bytes、hex、字符串之间相互转换
  6. 微信H5支付(基于Java实现微信H5支付)
  7. vue的v-html使用
  8. Java - PhantomJS + EChartsConvert实现ECharts图片保存到服务端
  9. 安卓APK文件结构解析 怎样去除内置广告 及修改图标和文字
  10. 正则表达式与有限自动机
  11. 常微分方程 $6 一阶微分方程解的存在唯一性
  12. 菜鸟的Android之路-02《eclipse新建android project》
  13. 信息化教学设计教案计算机,信息化教学设计模板
  14. magedu第一天学习(计算机基础部分)
  15. 工作后的5种放松方法
  16. 浅谈nodejs与php设计构思层面上的差异
  17. CRM系统是什么?它有什么作用?
  18. 2022届校招Java面试题汇总(含题解)
  19. 影子系统2008 出现:c0000174,错误位置在11.分区表错误
  20. WIFI渗透从入门到精通

热门文章

  1. Codeforces 1084A. The Fair Nut and Elevator
  2. 文件格式的简易通讯录
  3. 15款经典图表软件推荐
  4. 去除flash内的广告插件
  5. 加息减税后,定期存款何时转存划算
  6. JVM刨根问底之程序计数器
  7. PON、GPON、EPON、APON、ODN、FTTH、OLT、ONU
  8. matlab求cusum,关于CUSUM ARL计算的问题
  9. 如何将小数转换成百分数
  10. 机器学习模型训练问答