zoukankan      html  css  js  c++  java
  • BugKu-SQL注入2

    题目链接

    戳我

    简单尝试

    首先当然是去试试万能密码了,emmmm,全被过滤了......

    试试弱口令呢?

    admin admin
    admin 123456
    admin123 admin123
    ... ...

    然后,竟然还是弱口令.......(admin|admin123),但我岂能就这么放过它,嘿嘿,开始手注

    题目给除了一些已经过滤的字符,通过尝试,发现并不是啊!!!因为我是用or,竟然也提示我非法字符?!?!!

    所以,只能借用一下别的大佬的fuzz字典咯~~

    查找过滤符号

    判断执行语句

    在一开始的尝试中,发现一共有三种返回状态:

    • 非法字符
    • 密码错误
    • 用户名错误
      所以,可以判断他是先检查用户名,在检查密码,所以可以从用户名下手~

    既然布尔注入的字符都被无情的过滤了,但是!^没有被过滤啊,所以想到使用异或进行注入

    爆库名

    • 构造payload:admin'^(length(database())=3)^'
    • 发现,只有在括号内的值为真时,才返回username error,所以数据库的长度为3.但是仍然不能做下去啊,因为or空格啥的都被过滤了,可太难受了,但是!我偷偷瞄了一眼别的师傅的wp,当时我就傻眼了,竟然是靠表单属性猜......

    直接猜passwd的长度吧

    • 因为数据库里保存密码很有可能以md5的形式保存,所以这里对密码的长度要长点,看到结果我当时就傻眼了...因为回显长度都是367..

    • 没办法,一个一个看咯但也不是没办法嘛,枚举完后,从第一个开始按住方向下,看到username一闪而过,就往回找几个就找到了~~

    • 知道passwd的长度是32了,看来是md5没错了,那就开始爆数据吧

    爆passwd的数据

    • 构造payload:admin'^(ascii(substr((passwd),1,1))=48)^'
    • emmmmm,逗号被过滤了,但是!没有关系,因为substr(columns,start,step)==substr(columnsfrom(start)for(step))
    • 但是之前尝试发现,for也被过滤了,所以只能使用substr(columnsfrom(start)),因为substr默认第三个参数是1,重新构造payload:admin'^(ascii(substr((passwd)from(1)))=48)^'
    • 开始爆破:

    • 虽然最后的数据长度都是一样的,但是比手工一点一点改快的多,只要按住方向下键,一直找就可以了,为了方便点,所以一定要先对payload1进行排序,再找

    使用md5解码:

    尝试登陆后台,拿到flag:

    一共三种方法(目前我知道的)

    • 弱口令
    • post注入
    • 源码泄露
      - 通过工具直接拿到他的目录,然后下载flag文件,打开即可
  • 相关阅读:
    Python中的类(上)
    Django REST Framework API Guide 07
    Django REST Framework API Guide 06
    Django REST Framework API Guide 05
    Django REST Framework API Guide 04
    Django REST Framework API Guide 03
    Django REST Framework API Guide 02
    Django REST Framework API Guide 01
    Django 详解 信号Signal
    Django 详解 中间件Middleware
  • 原文地址:https://www.cnblogs.com/quail2333/p/12840030.html
Copyright © 2011-2022 走看看