RE
RSA 上工具
RsaCtfTool.py --publickey ./key.pub –private
公钥比较简单,直接解除对应私钥
然后 openssel
IDA 输入字符串比较一下
解方程呗先做第一段用 sympy
1869639009, 1801073242, 829124174, 862734414 求出来转 16 进制,因为内存小端序,各段再倒序
ampoZ2ZkNnk1NHl3 后半段同样,拼接后的
ampoZ2ZkNnk1NHl3NTc0NTc1Z3NoaGFG
输进去就完事了
IDA 没找到运行后的字符串,放 PEID 看一下
有壳
在 OD 中每次运行是初始地址都会边,去掉 ASLR OK,开始脱壳找到 OEP,dump下来
OEP:0X24C7
然后用 LordPE dump 出完整映像,再用 ImportREC 输入我们得到的 OEP,自动扫描了之后点击获取输入表就能得到这些函数了 Fix Dump,用我们之前 dump 出的映像就能成功修复文件了
再次 IDA 就找到字符串咯
然后分析找到 flag 的比较函数在这里用 OD 打开,在输入函数处下断,我在这里输入了:
0123456789abcdefghijklmnopqrs
一共 29 个字符,然后再用 OD 跟进到 flag 比对函数内部,看到我之前输入的字符串的顺序被打乱成这样:
edfgcbhia9jk87lm65no43pq21rs0
好啦,把对应的字符串打乱输出就好咯
Flag{this_was_simple_isnt_it}
IDA 走一波,重要的函数主要就两个
fencode 和encode,然后和字符串 lUFBuT7hADvItXEGn7KgTEjqw8U5VQUq 比较对了就行
然后我们首先来看 fencode,一大堆 while,啥东西,苦苦,估计就是混淆用的吧,找找看上去有用的哟
这两段格外的醒目,就他们了,但是怎么着联系呢,在一大堆长传数字中,找了几个小数字,
24,6,4,4,努力还原一下
t = 0 len = len(a1) if (len ==24)
{ for (int i = 0; i<6;i++) for (int j = 0; j<4;j++) {
for (int k = 0; k<4; k++) v10+= *(a + 4 * i + k) * *(m + 4 * j + k) a2 + (t++) = v10 % 127
v10 = 0
}
}
然后是encode,根据三个字符变四个的特点判断它可能是base64,但是把 lUFBuT7hADvItXEGn7KgTEjqw8U5VQUq解密回去后发现是乱码,应该是做了手脚,
ALPHA_BASE点进去看一下,发现……
Emmmmm……编码数组换掉了…………那跑一遍吧…… 编号后爆破爆破
OK啦
看到手指往下指,下意识的改变高,OK 了
数字密文
明显的 base16,解密得 flag
秘密电报
明显的培根密码,在线解密得 flag
重重谍影
多重 base64,解到 U2FsdGVkX183BPnBd50,发现是 AES 加密的标志,然后拖在线解密,
ECB,无密码,最后是佛加密
有趣的 ISCC
图片用 Winhex 打开,在最后找到一串 Unicode 编码,”\”就是这种形式,然后上站长之家,解两次 Unicode 就拿到 flag 了
用 010editer 打开,可以看到 Adobe Firework CS5,只能装一个了,打开,看到右下角有多个图层,最后拼出一张二维码,扫完得到 flag
凯撒十三世
根据题目信息,用 rot13 解密,然后跟键盘有关,试了各种的都不对,最后发现是对应的下一行的键(可以说是很刺激了)
首先拿到一张图片,010editer 打开,头没问题,尾部不是 FFD9,查找一波,发现图片最后还藏了一个 doc 文件,手动取出 doc 文件,打开又是一堆中文,目测佛加密,如是我闻解密再一套 base 全家桶拿到 flag F1a9_is_I5cc_ZOl8_G3TP01NT
暴力 xx 不可取
先是伪加密,打开以后得到一个 flag.txt,然后再走一波凯撒,flag 很明显 key:13 result:isccwearecoming
嵌套 ZIPs
这题的第一关可以说是非常坑了,首先没有提示,全靠猜 11 位的电话号码做密码,强行爆破(脑洞巨大),第二关明显对的明文攻击,第三关就是一个伪加密,最后拿到 flag
Web
前端做了传输长度限制,修改 maxlength 为 999
提交得到 flag
php 弱类型,strcmp函数的参数一个是数组一个是字符串是永远返回 null,又因为是双== 所以 null==0==false Poc:password[]=1
首先要求从 https://edu.xss.tv 进入且 ip 为 110.110.110.110, Burp 抓包修改请求头
获得第二关地址,F12,发现一个 password.js 的文件,打开看代码,发现是 js 的 eval 加密,很明显的是
ADwAcwBjAHIAaQBwAHQAPgBhAGwAZQByAHQAKAAiAHAAYQBzAHMAdwBvAHIAZAA6AHgAaQBuAHkAaQ BqAGkALgBjAG8AbQAiACkAPAAvAHMAYwByAGkAcAB0AD4
这一段字符串是经过加密的,执行一遍 eval 加密就会发现这个是加密后的字符串,再 base64
解密一下得到 password:xinyiji.com 提交密码得到 flag
根据页面提示,加一个 XFF 头,如下
然后,获得 flag
虽 然 我 不 是 很 懂 xss , 但 是 这 个 字 符 串 不 太 对 劲 我 还 是 看 的 出 来的%2b/v%2b%20%2bADwAcwBjAHIAaQBwAHQAPgBhAGwAZQByAHQAKAAiAGsAZQB5ADo
ALwAlAG4AcwBm
AG8AYwB1AHMAWABTAFMAdABlAHMAdAAlAC8AIgApADwALwBzAGMAcgBpAHAAdAA%2 bAC0-
Url 解码以后发现是 UTF-7,解密
+/v+ 将/%nsfocusXSStest%/提交,弹窗送 flag
明显源码泄露,
存在:http://118.190.152.202:8009/index.php.txt
看到$$ 想到变量覆盖构造 poc:
提示 ip 要是 127.0.0.1 先试了一波 XFF,发现不行改成 Client-IP,get
flag
先 get 传参传一个 ip=127.0.0.1 发现 ping 通了尝试截
断 %0a 成功 locate flag
然后 cat /home/flag 拿到 flag
传 username 和 password 过去后
发现多了一行注释
打开该路径,得到源码
构造poc:http://118.190.152.202:8017/?username[]=1&password=3e9 得到
flag{ISCC2018_Very_GOOD!}
审计代码,要求 password 的 md5 值为 0,只要加密结果是 0e 开头的都是满足的随便填一个,比如 QNKCDZO 成功登陆,并出现一个链接
点击以后
老套路了,poc:a=GLOBALS,得到flag
注入题而且是 gb2312 编码,猜测宽字节注入测试没毛病,直接上自己写的脚本
了
Flag 就在注释中
抱 chrome 大腿一波,hctf 的原题,考正则的贪婪匹配,php 伪协议,和任意文件读取
poc:img=php://filter/convert.base64-encode/resource=1.jpg/convert.base64-encode/resource=../flag
得到 flag{1ntere5ting_PHP_Regu1ar_express1onssssss}
Sqli
注入题,经过测试发现 uname 存在注入点直接上脚本
最后拿到 flag{hahaha999999999}
标准的一道 hash 长度扩展攻击的题目
推荐去读 P 神的 hash 长度扩展和hashpump 的使用的那篇博文
Hash 长度扩展攻击需要知道前一次加密中未知数据的长度,以及前一次加密中知道的填充数据(如题目中的 guest),最后需要知道上一次加密的结果有现成的工具,因为 hash 函数是分块加密,而一段明文被分成的这些块之间的加密是有联系的,那就是前一个块加密的结果将作为下一个块的初始加密向量,而且扩充的规则是固定的,具体自行百度,所以我们就可以把题目中本来的key+“guest”扩充成大于一个块长度的字符串,这样就可以在不知道key 的情况下拿到 flag 了
AES 的 CBC字节翻转攻击,原题一道,但是 CBC 字节翻转攻击还是需要学习一波的。
首先当然是看源码了
这就是这份源码里面关键的内容,很明显我们得让 cookie[cipher]的解密结果和 post 传入的 username 值相同且全为 admin,这里不得不用 AES 的CBC 加密模式了,这个模式的加密,快和块之间是有联系的大概说一下
加密:第一块 E(P1 ^ iv)=C1 第二块 E(P2 ^ C1) = C2 解密:第一块 D(C1) ^ iv = p1 第二块 D(C2) ^ C1 = p2
我们很容易可以看出控制第一块的 C 可以有效的让第二块的 C 变成我们想要的任意结果我们可以自己通过 php 脚本生成序列化的明文 P,并从网页返回头里拿到明文 P 通过向量 iv 加密以后的结果的base64 值
P = "a:2:{s:8:\"username\";s:5:\"bdmin\";s:8:\"password\";s:5:\"admin\";}"
==》P2 ^ C1 = D(C2) D(2) ^ 我们想要的 P2 = newC1
这样我们就可以通过修改第一个块的密文来达到影响第二个块的解密结果的做用,类似的第 n-1 块的 cipher 可以影响到第 n 个快的plaintext 的值这题中我们的 username 值在第二个块,所以就是上述做法,然后将 cookie 中的 cipher 修改成我们微调过的 cipher 这时为了触发 check_login()的解密获取 Plaintext,我们必须不同时传 username 和 password $_SESSION[‘username’]的值刚才已经产生了为了触发这一段函数
这样我们就可以获得我们修改过后的密文解密后对应的明文了但是这是一个错误的结果,所以才被回显明文,因为在构造第二块密文输出为指定明文的时候,我们牺牲了第一块明文,导致第一块明文的解密结果错误,这时候就要在走一波套路了刚刚是通过修改第一块密文来达到输出指定的第二块明文,这次为了产生指定的第一块明文,只能修改 iv 的值了,还是上面的套路最终我的 poc: iv=c2F5k0vi2fer8K4bIt88tw%3D%3D
cipher=6BaBxf478QSCs1ZsqgdF1GoSDZRa8boi3OD7RNc5nTlZcpxwikcIfDklujmmhIVdD6Upbct
N54MqQYHgo4r2pQ%3D%3D 最终拿到 flag