0x00前言
前两天一直在读mvc框架的源码,初步读aacms,但是发现真的太难读,主要是自己的php功底还是太差,读起来吃力,所以先读一个比较简单的源码来练一练,这套源码之前也复现过漏洞,就是wiinews。在复现了漏洞之后,自己尝试用危险函数朔源的办法没有找到漏洞,所以尝试一下通读。另外我刚刚开始读学代码审计,这篇文章比较适合和我一样的小萌新看!
0x01 通读审计
观察结构
sql注入
Ok,就让我们从index.php开始吧。
恶意代码植入导致 getshell
还记得我们进入index.php的时候的的代码吗?
<?php error_reporting(0); $AdminUserName=trim($_POST["edtAdminUserName"]); $AdminPassWord=trim($_POST["edtAdminPassWord"]); $foldername=trim($_POST["edtAdminFolderName"]); .... $db_host=trim($_POST["db_host"]); $db_user=trim($_POST["db_user"]); $db_name=trim($_POST["db_name"]); $db_password=trim($_POST["db_password"]); .... if(!mysql_connect($db_host,$db_user,$db_password)){ echo("<p class='error'>错误:2012。意外错误!</p>"); }else{ mysql_query("set names utf8"); if(!mysql_select_db($db_name)){ echo("<p class='error'>错误:2013。意外错误!</p>"); }else{ $rand=md5(uniqid(rand(),true)); rename("../admin",$AdminFolderName); $files="../inc/config.php"; $config_str = " "; $config_str .= "<?php"; $config_str .= " "; $config_str .= '$admin_dir= "'.$foldername.'";'; $config_str .= " "; $config_str .= "define('wiinews_id','".$rand."');"; $config_str .= " "; $config_str .= '?>'; $fp=fopen($files,"a"); fwrite($fp,$config_str); fclose($fp); ....
这个文件漏洞就很明显了,它直接连接数据库然后(当然是知道账号密码情况下)写入管理员账号密码,接下来又将 folddername 写入配置文件,这样我们就可以恶意植入代码getshell
又一处sql注入
写在最后
代码审计刚开始读的时候真的很费力,不过我相信到后面会好起来。 这里想问各位师傅一个问题,代码审计一定要搞懂每一行代码吗?