170822 WarGames-Natas(27-28)

本文详细介绍了在 Natas 游戏的 Level 27 和 28 中遇到的 SQL 溢出和 ECB 加密漏洞。在 Level 27 中,通过 VARCHAR 列的溢出截断漏洞,成功插入记录来获取信息。Level 28 中,利用 ECB 加密模式的弱点,构造 SQL 注入,通过填充字符和精确计算,实现了注入攻击,最终获得下一关的密码。
摘要由CSDN通过智能技术生成

1625-5 王子昂 总结《2017年8月22日》 【连续第323天总结】
A. Natas
B.

Level 27

按照之前sql注入的尿性,username应该是natas28,试一下回复Wrong password确认无误
本来以为是宽字节注入,绕过mysql_real_escape_string()函数
原理是该函数对单引号等字符自动进行转义,在前边添加’\’
单引号字符为0x27,在前边添加’\’后变为0x5c27
如果构造输入0xbf27,即“¿’”,转义以后变为0xbf5c27,而在宽字符集(如GBK)中存在0xbf5c字符,于是将’\’吃掉,从而保持单引号字符起效
这是mysql_escape_string()和addslashes()存在的漏洞
对于增强型的mysql_real_escape_string()函数,会自动检测数据库所使用的字符集;如果不是宽字节字符集,那么该漏洞将无法起效

试了一下发现不行,真正的漏洞在这里:

    $query = "SELECT * from users where username='$user'"; 
    $res = mysql_query($query, $link); 
    if($res) { 
        if(mysql_num_rows($res) > 0) { 
            while ($row = mysql_fetch_assoc($res)) { 
                // thanks to Gobo for reporting this bug!   
                //return print_r($row); 
                return print_r($row,true); 
            } 
        } 
    } 
    return False; 

它会返回所有username相符的结果,换言之我们如果能插入另一条用户名为natas28,密码为自定的记录,就会把本来存在的natas28给一起暴露出来

这里可以利用mysql的溢出截断漏洞
由源码可知username varchar(64) DEFAULT NULL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值