开始从小的漏洞开始练习,搬运项目地址:
https://github.com/imsebao/Code-Audit
Axublog是一款PHP个人博客系统。 Axublog(c_login.php)存在SQL注入漏洞。攻击者可利用漏洞, 直接进行注入,获取数据库敏感信息。
漏洞分析: 漏洞出现在后台登录验证的部分。 首先看后台登录页面代码、www/ad/login.php
<?phpinclude_once("all.php");header("Content-type:text/html;charset=utf-8");@$user=$_POST["user"];@$psw=$_POST["psw"];@$loginlong=$_POST["loginlong"];@$g=$_GET["g"];switch ($g){case "jsloginpost":jsloginpost();break;case "exit":loginexit();break;default:index();break;}function index(){global $codename,$codeversion,$codeurl;?>
首先看 user 和 psw 参数没经过然后过滤直接是 post 传递过来的值。 继续跟踪登录验证函数, jsloginpost 。jsloginpost 方法定义在文件 www/ad/c_login.php 第74行。
ps:这里我直接看的项目我也没看到他开头包含的all.php内容,想必应该没有过滤条件。
function jsloginpost(){global $tabhead;global $txtchk;@$user=$_POST["user"];@$psw=$_POST["psw"];$psw = authcode(@$psw, 'ENCODE', 'key',0);@$loginlong=$_POST["loginlong"];$chk=sqlguolv();if($chk==1){$json_arr = array("jieguo"=>"<div id=redmsg>登录失败:发现非法字符!</div>");$json_obj = json_encode($json_arr);echo $json_obj;die();}#-------#setcookie("lggqsj",date('Y-m-d H:i:s',time()+$loginlong), time()+60*60*24,"/;HttpOnly" , "",'');$tab=$tabhead."adusers";$chk=" where adnaa='".$user."' and adpss='".$psw."' ";mysql_select_db($tab);$sql = mysql_query("select * from ".$tab.$chk);if(!$sql){$jieguo="<div id=redmsg>(数据库查询失败!)</div>";}else{$num=mysql_num_rows($sql);if($num==0){$jieguo='<div id=redmsg>登录失败:账户或密码错误!</div>';}else{loginpass($loginlong);$chkmoblie=isMobile();if($chkmoblie==1){$jieguo='<div id=bluemsg>登录成功!正在前往<ahref="wap.php">后台</a>。。。</div><script>setTimeout("javascript:parent.location.href=\'wap.php\'", 1000);</script>';}else{$jieguo='<div id=bluemsg>登录成功!正在前往<a href="index.php">后台</a>。。。</div><script>setTimeout("javascript:parent.location.href=\'index.php\'", 1000);</script>';}}}$json_arr = array("jieguo"=>$jieguo);$json_obj = json_encode($json_arr);echo $json_obj;}#-------?>
这里可以看到 user 和 psw 没有任何过滤直接进入了sql查询,导致sql注入,万能密码登录。 漏洞复 现: 访问后台登录页面 http://localhost/ad/login.php 账号: admin‘ and 1=1# 密码 随意 点 击登录,即可显示登录成功。