代码审计(Code audit)是一种以发现程序错误,安全漏洞和违反程序规范为目标的源代码分析。
代码审计的内容包括:
1.前后台分离的运行架构 2.WEB服务的目录权限分类 3.认证会话与应用平台的结合 4.数据库的配置规范 5.SQL语句的编写规范 6.WEB服务的权限配置 7.对抗爬虫引擎的处理措施
盾灵科技(dunling.com)专注于网络智能系统的研究开发,基于PHP+MYSQL,针对网站自动流量系统具有多年的研究经验,为广大用户提供了安全,方便,智能,便捷,提高工作效率的智能系统程序。
盾灵投稿内容管理系统安装方便。配置好数据库,点击下一步即可完成安装:
查看源代码目录结构:
admin:管理员后台目录(管理员的功能)
editor:编辑器
style,images,js:风格,图片,js
template:模板HTML
config.php:数据库配置文件
......
对于渗透测试人员比较关心的是后台的安全性,盾灵默认的管理员后台是/admin:
查看一下管理后台的源代码/admin/index.php:
忽略乱码问题,主要关心这一段form表单:
<td><form method="post" action="login.php"><input tabindex="1" type="text" name="adminname" class="texta" onkeyup="value=value.replace(/[^\w\.\/]/ig,'')" /></td>
我们可以得到两个条件:
1.form表单限制了文本框的输入:
onkeyup="value=value.replace(/[^\w\.\/]/ig,'')"
文本框只能输入英文字母和数字,不能输入中文 。
2.form表单把我们输入的数据提交到login.php处理。
跟踪form表单提交查看login.php:
$adminname = $_POST['adminname']; $adminpass = $_POST['adminpass']; $adminpass .= "Axphp.com"; $adminpass = md5($adminpass); $adminsql = "select * from axphp_admin where adminname='$adminname' and adminpass='$adminpass'";
这段代码的意思是先获取到前面表单POST提交过来的数据,把adminpass字符串拼接后再经过MD5加密后传入查询的SQL语句中在数据库中验证。
但是这个SQL语句可以尝试绕过一下:
先修改源代码,echo出数据库报错语句,然后尝试抓包重放,通过截断SQL语句,造成权限绕过漏洞,不需要密码的情况下成功登陆后台。
截断以后的SQL语句为:
select * from axphp_admin where adminname='root' # ' and adminpass='$adminpass'
注:在 mysql 中 # 代表注释。
除了代码层的防御,在系统防御方面可以开启magic_quote_gpc
开启magic_quote_gpc=on之后,能实现addslshes()和stripslashes()这两个函数的功能。输入的注入攻击代码将会全部被转换,将给攻击者带来非常大的困难。