ctf中的Python脚本

下载.jpeg

CTF中很多需要Python脚本来解决的题目 以前这类题目看到以后就会放弃。

越来越感觉无力,打不动ctf 代码基础不行 而ctf对代码的要求越来越高

暑假准备闭关好好学习一下了

今天抽时间总结一下 ,也顺便巩固了一下Python。

代码写的炒鸡烂 大佬勿喷呀!!!

速度要快

bugku ctf的一道题目

http://123.206.87.240:8002/web6/

VSgC0f.png

查看源代码发现 需要post一个margin参数

抓包查看响应头发现flag字段

VSgM7T.png

是一段base64加密的值 手工解密后发现还需要在解码一次 出现明文

flag的在短时间内会不断变化,我们需要两次解密flag字段 在flag密文没变的情况下把明文post提交方可得到flag。

这尼玛要不用Python 就算是单身一百年也没有用吧。

贴上脚本

1
2
3
4
5
6
7
8
9
10
11
import requests
import base64
url = "http://123.206.87.240:8002/web6/"
req = requests.session()
headers = req.get(url).headers
key = str(base64.b64decode(headers['flag'])).split(":")[1]
flag = base64.b64decode(key)
print(flag)
data = {"margin":flag}
gg = req.post(url,data=data)
print(gg.text)

Xnip2019-05-22_09-28-21.jpg

web 13

ctf论剑场里面的一题 和上题类似

Xnip2019-05-22_09-31-46.jpg

解密Password 之后 POST提交

还是用Python来写一下

5A8F03593196130D846D66ED4B05904F.jpg

代码都差不多就不贴出来咯 动手打一下印象会更深的吧

web 2

也是ctf论剑场的一题 上星期做了一下这里的web题把需要用Python脚本解的题目都留在今天进行总结。

image-20190523102203183.png

公式在不停的变化 需要在没有变化之前快速计算出结果并提交

靠手速的话是不可能的

1
2
3
4
5
6
7
8
9
10
11
import requests
import re
url = 'http://123.206.31.85:10002/index.php'
s = requests.session()
req = s.get(url)
key = str(re.findall(r'<br/>\s.*?</p>',req.text))
key = eval(key[9:-6])
print(key)
data = {"result":key}
flag = s.post(url=url,data=data)
print(flag.text)

运行脚本拿到flag

我怎么感觉这题代码写的好烂呢?

web 20

Xnip2019-05-23_10-49-09.jpg

动态密文。需要在变化之前 把密文通过get传给key

经过测试发现解题脚本是有几率爆出flag的所以我们需要多次尝试

1
2
3
4
5
6
7
8
9
10
11
12
import requests
import re
for i in range(10):
url = 'http://123.206.31.85:10020/index.php'
req = requests.session()
res = req.get(url).content.decode("utf-8")
print(res)
encode = re.findall(r'(\w{33})',res)[0]
print(encode)
params = {'key':encode}
flag = req.get(url=url,params=params)
print(flag.content.decode("utf-8"))

天下武功唯快不破

来自实验吧的题目与上面第一题非常相似又比第一题简单

1
2
3
4
5
6
7
8
9
import requests
import base64
url = 'http://ctf5.shiyanbar.com/web/10/10.php'
flag = str(base64.b64decode(requests.get(url).headers['flag'])).split(':')[1]
flag = flag[:-1]
print(flag)
data = {'key':flag}
key = requests.post(url=url,data=data)
print(key.content)

第一题写了注释所以这里就不写了 都是一个道理呀!!

秋名山老司机

题目要求两秒钟之内计算出表达式的值

Xnip2019-05-24_14-44-25.jpg

计算出来后通过通过post提交给value参数后可拿到flag

1
2
3
4
5
6
7
8
9
10
11
import requests
import re
url = 'http://123.206.87.240:8002/qiumingshan/index.php'
s = requests.session()
req = s.get(url).content.decode("utf-8")
value = re.search(r'(<div>)(.*)(=)',req)
result = eval(value.group(2))
print(result)
data = {'value':result}
flag = s.post(url=url,data=data)
print(flag.text)

正则我写的。。。简直不忍直视 换上一个比较正常的正则

1
value = re.search(r'(\d+[+\-*])+(\d+)',req)

不了解正则的可以看一下

Python正则表达式

火眼金睛

题目链接火眼金睛

QQ截图20190918085120.png

文本演示框两秒一更新 需要Python脚本来获取moctf个数后自动提交

QQ截图20190918085336.png

总结

上面一些都是我自己经常遇到的一些问题 特意来总结一下 另外说一句 搞安全的代码基础一定要过关。老是吃亏在代码功底上面。本人文笔 水平有限 脚本写的确实lj (没错我自己也发现了 手动滑稽) 大佬勿喷