代码审计:Seay源代码审计系统实例演示 |

  • A+
所属分类:Seay信息安全博客

显示不全请点击全屏阅读

最近两年在写代码审计的书,已经在进行收尾,其中提到我的代码审计系统才想起来还没有写一个这个软件的使用示例,今天补充一下,

用PHP程序espcms做举例,首先载入程序,然后点击自动审计,得到一部分可能存在漏洞的代码列表

代码审计:Seay源代码审计系统实例演示 |

我们挑其中的这一条

代码审计:Seay源代码审计系统实例演示 |

 
双击该项直接定位到这行代码,如下

 

代码审计:Seay源代码审计系统实例演示 |

 
在选中改变量后,在下方可以看到该变量的传递过程,并且点击下方的变量传递过程也可以直接跳转到该项代码处,可以非常直观的帮助我们看清整个变量在该文件的传递过程,另外我们可以看到$parentid变量是在
$parentid = $this->fun->accept(‘parentid’, ‘R’);
这段代码获取的,右键选中该代码定位该函数主体

 

代码审计:Seay源代码审计系统实例演示 |

 

可以看到跳转到了class_function.php文件的314行。

代码审计:Seay源代码审计系统实例演示 |

 
可以看到这是一个获取GET、POST、COOKIE参数值的函数,我们传入的变量是parentid和R,则代表在POST、GET中都可以获取parentid参数,最后经过了一个daddslashes()函数,实际上是包装的addslashes()函数,对单引号等字符进行过滤,不过注意看前面的SQL语句是这样的
$sql = “select * from $db_table where parentid=$parentid”;
 
并不需要单引号来闭合,于是可以直接注入。
在citylist.php文件看到oncitylist()函数在important类中,选中该类名右键点击“全局搜索”功能
 

代码审计:Seay源代码审计系统实例演示 |

可以看到index.php文件有实例化该类,代码如下
 
$archive = indexget(‘archive’, ‘R’);
$archive = empty($archive) ? ‘adminuser’ : $archive;
$action = indexget(‘action’, ‘R’);
$action = empty($action) ? ‘login’ : $action;
include admin_ROOT . adminfile . “/control/$archive.php”;
$control = new important();
$action = ‘on’ . $action;
if (method_exists($control, $action)) {
         $control->$action();
} else {
         exit(‘错误:系统方法错误!’);
}
 
这里可以看到一个include文件的操作,可惜经过了addslashes()函数无法进行截断包含任意文件,只能包含本地的PHP文件,如果你有mysql的root权限,能导出文件到tmp目录,不能导出到web目录,这种场景才用得到这个文件包含,再往下走就是实例化类并且调用函数的操作了,根据代码可以构造出利用EXP
http://127.0.0.1/espcms/adminsoft/index.php?archive=citylist&action=citylist&parentid=-1 union select 1,2,user(),4,5
 
漏洞截图
 

代码审计:Seay源代码审计系统实例演示 |

Tags:

Seay源代码审计系统, 代码审计,

如果您喜欢我的博客,欢迎点击图片定订阅到邮箱填写您的邮件地址,订阅我们的精彩内容: 也可以点击链接【订阅到鲜果】

如果我的想法或工具帮助到了你,也可微信扫下方二维码打赏本人一杯咖啡
代码审计:Seay源代码审计系统实例演示 |