CCTF重邮(绿盟)杯_web150

来源:互联网 发布:超过淘宝承诺时间发货 编辑:程序博客网 时间:2024/04/28 08:31

CCTF重邮(绿盟)杯_web150

本题是一个代码审计题,主要考察点还是PHP的弱验证。查看源代码可以在底部发现登陆规则。
if(isset($_POST['login'])) {    if(isset($_POST['user']))    {        if(@strcmp($_POST['user'],$USER))//USER是被隐藏的复杂用户名        {            die('user错误!');        }    }    if (isset($_POST['name']) && isset($_POST['password']))    {        if ($_POST['name'] == $_POST['password'] )        {            die('账号密码不能一致!');        }        if (md5($_POST['name']) === md5($_POST['password']))        {            if(is_numeric($_POST['id'])&&$_POST['id']!=='72' && !preg_match('/\s/', $_POST['id']))            {                    if($_POST['id']==72)                        die("flag{xxxxxxxxxxxxx}");                    else                        die("ID错误2!");            }            else            {                die("ID错误1!");            }        }        else            die('账号密码错误!');    } }

0X00

第一个点的user提示是一个复杂用户名,然后它是用@strcmp($_POST['user'],$USER)判断的,所以构造时要构造user[](字串),用burp暴力破解常见的用户名,得到user[]=admin

0X01

而下面要验证的是一个name不等于password,同时namepassword的md5值要一致。
这里就要说一个PHP比较坑的地方了,当你的字符串的MD5值是以0e开头的,PHP会默认他是int型的0,而0=0就是true。
于是可以构造:name[]=s155964671a&password[]=s214587387a

0X01

最后一个地方要过的是,在之前作为字符串儿判断时ID不等于’72’。然后在下面判断数字形式的时候要等于72,这里考察的是一个PSP的弱验证。只需要构造id=72.00

最后payload及flag如图

web150

原创粉丝点击