[漏洞分析] Smart PHP Poll认证绕过漏洞
2015-05-19 14:27
676 查看
漏洞编号为36386;OSVDB-ID:119631
首先,可以在网址:http://www.scriptsez.net/download/download.php?action=download&p=smart_php_poll.zip&ns=1处下载程序源码。
首先在安装的过程中需要注意,在配置文件conf.php中,需要更改变量$db_name,$databse_user,$database_pass的内容,分别用相应的数据库名,
用户名和密码赋值。
漏洞存在于登录页面www.target.com/path/admin.php
正常情况下输入用户名和密码登录到今系统中,系统默认的登录凭证为admin/password
在源码的第350行,得到对话框中用户输入的用户名和密码值。
随后将收到的值交给一个SQL语句用于查询该用户是否存在。在代码的第19~25行。
问题存在于对用户查询的SQL语句中,程序将用户的输入未作任何过滤就直接插入到SQL语句当中。
当用户在用户名处输入admin' or '1'='1,并且在密码中输入任何内容时,所进行的SQL查询语句为:
加固的方法为,使用PHP中的addslashes函数,
首先,可以在网址:http://www.scriptsez.net/download/download.php?action=download&p=smart_php_poll.zip&ns=1处下载程序源码。
首先在安装的过程中需要注意,在配置文件conf.php中,需要更改变量$db_name,$databse_user,$database_pass的内容,分别用相应的数据库名,
用户名和密码赋值。
漏洞存在于登录页面www.target.com/path/admin.php
正常情况下输入用户名和密码登录到今系统中,系统默认的登录凭证为admin/password
在源码的第350行,得到对话框中用户输入的用户名和密码值。
echo "<form method=\"post\" action=\"admin.php\"><table width=50% align=center cellspacing=0 cellpadding=2><TR height=26 bgcolor=#E6E6E6><TD colspan=3 align=center><B>Please Login</B></TD></TR><TR height=26 bgcolor=#F6F6F6><TD width=15% align=center rowspan=\"2\" style=\"BORDER-LEFT:#E6E6E6 1px solid;\"><img src=\"images/admin_info.png\"></TD><TD width=20%>Admin ID</td><td width=65% style=\"BORDER-RIGHT:#E6E6E6 1px solid;\"><input type=text name=admin_id></td></tr><TR height=26 bgcolor=#F6F6F6><TD width=20%>Password</td><td style=\"BORDER-RIGHT:#E6E6E6 1px solid;\"><input type=password name=admin_pass></td></tr><TR height=26 bgcolor=#F6F6F6><TD width=\"35%\" colspan=\"2\" style=\"BORDER-LEFT:#E6E6E6 1px solid;BORDER-BOTTOM:#E6e6e6 1px solid;\"><BR><BR><BR></td><td style=\"BORDER-RIGHT:#E6E6E6 1px solid;BORDER-BOTTOM:#E6E6E6 1px solid;\"><input type=submit value=\"Login\"></td></tr></table></form>";
随后将收到的值交给一个SQL语句用于查询该用户是否存在。在代码的第19~25行。
if($admin_id!="" && $admin_pass!=""){ $search=mysql_query("SELECT * FROM smp_ad WHERE admin_id='$admin_id' AND admin_pass='$admin_pass'"); if(mysql_num_rows($search)==1){ $_SESSION['ein']=base64_encode($admin_id); header("location: admin.php?action=dologin"); } }这段代码首先判断用户输入的用户名和密码是否为空。如果不为空,则进行SQL语句查询,利用函数mysql_num_rows()返回结果集中的行数目。如果返回结果为1,用户的身份存在于数据库中,即用户存在,随后将用户指引到下一个页面admin.php?action=dologin
问题存在于对用户查询的SQL语句中,程序将用户的输入未作任何过滤就直接插入到SQL语句当中。
当用户在用户名处输入admin' or '1'='1,并且在密码中输入任何内容时,所进行的SQL查询语句为:
SELECT * FROM smp_ad WHERE admin_id='admin' or '1'='1' AND admin_pass='[ANYTHING]'这句话的内容等同于SELECT * FROM smp_ad WHERE admin_id='admin',即攻击者只要输入一个合法的用户名,不需要密码,即可通过认证。
加固的方法为,使用PHP中的addslashes函数,
$search=mysql_query("SELECT * FROM smp_ad WHERE admin_id='".addslashes($admin_id)."' AND admin_pass='".addslashes($admin_pass)."'");此函数会将用户的输入中存在的单引号,双引号反斜线以及NULL字符进行转义。即如果用户试图用同样的方法绕过登录时,SQL语句会是如下样子:
SELECT * FROM smp_ad WHERE admin_id='admin\' or \'1\'=\'1' AND admin_pass='[ANYTHING]'用户无法通过可控的输入来闭合单引号以达到单引号平衡,因此无法绕过认证,最终起到加固的目的。
相关文章推荐
- [漏洞分析] CTF:ASP源码审计认证绕过
- PHP文件包含漏洞原理分析和利用方法
- 802.1X认证协议及漏洞分析
- PHP字符编码绕过漏洞总结
- phpcms <= v9.15 任意文件读取漏洞的分析和利用
- [漏洞分析] PHPMoAdmin Unauthorized Remote Code Execution漏洞源码分析
- PHP源码中unserialize函数引发的漏洞分析
- PHP文件包含漏洞原理分析和利用方法
- php webshell分析和绕过waf技巧
- Android第二个绕过签名认证漏洞原理
- PHP常见漏洞攻击分析
- PHPMailer任意文件读取漏洞分析(CVE-2017-5223)
- PHPMailer 命令执行漏洞(CVE-2016-10033)分析(含通用POC)
- PHP序列化/对象注入漏洞分析
- Phpspy 2011继续身份验证绕过漏洞
- php 远程包含文件漏洞分析第1/6页
- 使用PHPSA做静态分析:PHP Smart Analyzer
- Web渗透:PHP字符编码绕过漏洞总结
- Android电话拨打权限绕过漏洞(CVE-2013-6272)分析
- PHP常见漏洞攻击分析