mysql 中with rollup的用法

如果世界不喜欢你,那世界就是我的敌人了。

今天看到一个审计的题目,解析里面说需要用到mysql的group by xxx with rollup这个语句。没用过,不知道干什么的,度娘之后那些博客解释得很难受,那种感觉就是你觉得他写的好xx,但就是看不懂。 使用效果如图:
love
不知道有没有人和我想的一样,null那里是怎么回事。
然后我想起电脑里有mysql官方文档,查了一下。然后我发现我的智商可以理解。我把截图贴下:

3.png

4.png

5.png

6.png

7.png
Null就是将高聚集的user或者password标出。文档里介绍很详细。

那个题代码如下:

    <?php
    error_reporting(0);
    if (!isset($_POST['uname']) || !isset($_POST['pwd']))
   {
    echo '<form action="" method="post">'."<br/>";
    echo '<input name="uname" type="text"/>'."<br/>";
    echo '<input name="pwd" type="text"/>'."<br/>";
    echo '<input type="submit" />'."<br/>";
    echo '</form>'."<br/>";
    echo '<!--source: source.txt-->'."<br/>";
   die;
   }
  function AttackFilter($StrKey,$StrValue,$ArrReq){  
  if (is_array($StrValue)){
    $StrValue=implode($StrValue);
}
if (preg_match("/".$ArrReq."/is",$StrValue)==1){   
    print "水可载舟,亦可赛艇!";
    exit();
}
}
$filter = "and|select|from|where|union|join|sleep|benchmark|,|\(|\)";
foreach($_POST as $key=>$value){
AttackFilter($key,$value,$filter);
}
$con = mysql_connect("XXXXXX","XXXXXX","XXXXXX");
if (!$con){
    die('Could not connect: ' . mysql_error());
}
$db="XXXXXX";
mysql_select_db($db, $con);
$sql="SELECT * FROM interest WHERE uname = '{$_POST['uname']}'";
$query = mysql_query($sql);
if (mysql_num_rows($query) == 1) {
$key = mysql_fetch_array($query);
if($key['pwd'] == $_POST['pwd']) {
    print "CTF{XXXXXX}";
}else{
    print "亦可赛艇!";
}
}else{
    print "一颗赛艇!";
}
mysql_close($con);
?>

$key['pwd'] == $_POST['pwd']

这里,如果key的值是Null,post提交的pwd也是null,就可以绕过。在user那里使用万能密钥配合with rollup一下' or 1=1 group by pwd with rollup limit 1 offset 2
即可。上面过滤逗号,offset可以解决。
mysql官方文档密码:wing


   转载规则


《mysql 中with rollup的用法》 Wing 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
渗透测试之信息收集 渗透测试之信息收集
力求把信息收集这一块写全。 基础信息收集打造专属字典##
2017-10-21
下一篇 
ngrok内网穿透 ngrok内网穿透
0X00 前言在渗透测试过程中,可能目标主机是内网里面的机器,由于外网无法直接访问内网,我们就需要反向代理,来为下一步的工作做准备。 0X01 ngrok简介ngrok是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一
2017-10-05
  目录