Web
Web1
当时没截图,找了别人拍的照贴一下。。。
是一道简单题,不过考的知识点蛮多的。
Referer绕过、User-Agent绕过、XFF绕过之后,进行代码审计
这里的知识点:
使用科学计数法绕过取值大于1
intval() 不能用于 object,否则会产生 E_NOTICE 错误并返回 1
使用数组绕过类型判断
<?php
echo intval(42); // 42
echo intval(4.2); // 4
echo intval('42'); // 42
echo intval('+42'); // 42
echo intval('-42'); // -42
echo intval(042); // 34
echo intval('042'); // 42
echo intval(1e10); // 1410065408
echo intval('1e10'); // 1
echo intval(0x1A); // 26
echo intval(42000000); // 42000000
echo intval(420000000000000000000); // 0
echo intval('420000000000000000000'); // 2147483647
echo intval(42, 8); // 42
echo intval('42', 8); // 34
echo intval(array()); // 0
echo intval(array('foo', 'bar')); // 1
?>
Payload:
a[]=‘1E10’
然后GET方式执行命令即可,此处执行命令还过滤了空格,需要使用$IFS绕过空格过滤。
Web2
代码审计题:
Payload:
cmd=123’.system(‘ls’).’
Web3
进入题目,是一个在线小游戏:
进行Js代码审计,发现计算玩家金币相关的代码逻辑:
1、将更新金币逻辑处,每条鱼的金币,修改为999999
2、修改更新金币函数体内的判断逻辑,去掉金币不超过999999的限制
不过此种办法只能得到后一半的flag。。。
前一半flag貌似和金鲨鱼有关,当时比赛时间到了,就没再看了。
后来经过研究,可以直接寻找Js代码中的alert函数,修改判断条件,直接弹出flag即可。
Crypto
crypto1
简单题,flag分为两部分:
1、取逆序再base64编码,将密文解base64并逆序输出即可。
2、百度一下,ADFGVX密码是德军在第一次世界大战中使用的栏块密码。在线解密即可:http://www.hiencode.com/adfgvx.html
crypto2
阅读代码,是一个连续进行两次RSA加密的操作,参数p即为RSA加密的N,两次加密:
1、N已知,e已知
2、N已知,e与明文有关,且是随机生成的,范围固定
基于以上,可爆破明文,编写脚本:
Reverse
Reverse1
运行程序,如上图。
进入IDA查看:
关注第26行代码,在for循环中遍历40个字符,flag即为这40位的字符串。
进入enc查看:
是硬编码在程序中的,注意2 dup(XX)这种的,即为连续的两个。
编写脚本进行计算即可:
Pwn
Pwn1
检查保护:
IDA查看:
进入sub_400789函数:
发现strcpy函数,将gets获得的字符src传入局部变量v1中,存在栈溢出。
虽然没有发现后门函数,但是NX关闭,考虑写入shellcode。
寻找src地址:
EXP如下: