zoukankan      html  css  js  c++  java
  • [GXYCTF2019]BabySQli

    看了大佬的博客,勉强整出来了,详细的写一下我的思路。


    错误思路:
    观察发现是post传值,想用sqlmap一把嗦,BP抓包=>sqlmap
    得到数据库:web_sqli
    表:user
    字段:passwd
    得到密码是cdc9c819c7f8be2628d4180669009d28
    在这里插入图片描述
    得到passwd以后想爆一下username:admin
    在这里插入图片描述
    爆是爆出来了,没啥乱用。撞库也撞不出来,没辙了。


    正确思路:
    利用sqli的特性:在联合查询并不存在的数据时,联合查询就会构造一个虚拟的数据。
    说人话,上实例:
    在联合查询之前,数据库是和样子的。
    在这里插入图片描述
    执行联合查询:select * from 'users' where name='person' union select 1,'admin','e10adc3949ba59abbe56057f20f883e',4,5

    执行后:
    在这里插入图片描述
    按照我们的输入,sqli在数据库中写入数据,相当于伪造了一个身份,就可以用这个身份登录了。

    经过前面错误的试探,我们发现字段是id,username,passwd。
    但是不知道三个的顺序是怎么样的,进行试探:
    在这里插入图片描述
    如果输入是'admin',1,1#,报错wrong user。
    而我们是知道有admin这个账号的,那么证明顺序不是这个。
    再试:
    在这里插入图片描述
    输入变为1,'admin',1时,就报wrong pass,证明admin的位置对了,id跟passwd的位置先随便试吧。

    已知123的md5值是202cb962ac59075b964b07152d234b70

    构造
    name=1' union select 1,'admin','202cb962ac59075b964b07152d234b70'#&pw=123

    执行之后,盲猜后台的数据:

    idusernamepasswd
    1admin202cb962ac59075b964b07152d234b70

    而执行sqli的同时,我们还同时传入了一个passwd = 123
    系统将这个passwdmd5哈希后与数据库中的数据进行对比,True后返回flag。

  • 相关阅读:
    高精度A+B
    基本定积分求面积
    二进制算子集和
    linux命令
    Dubbo
    java 集合区别
    Java中Comparable和Comparator区别
    synchronized实现原理
    ThreadLocal 原理
    java volatile关键字
  • 原文地址:https://www.cnblogs.com/shenjuxian/p/13702742.html
Copyright © 2011-2022 走看看