2130 字
11 分钟
CTF浅尝
2017-12-18
- Capture The Flag
- 题目位置 南京邮电大学网络攻防训练平台
签到题
- 打开题目,只有
key在哪里?
几个字,打开开发者工具,直接找到 flag
<body>
<a style="display:none">nctf{flag_admiaanaaaaaaaaaaa}</a>key在哪里?
</body>
- 第二个签到题,尝试输入口令,失败,打开控制台,发现输入框限制输入长度,直接编辑 html 删去限制,再次输入口令,得到 flag
<form action="./index.php" method="post">
<p>
输入框:<input type="password" value="" name="text1" maxlength="10" /><br />
请输入口令:zhimakaimen
<input type="submit" value="开门" />
</p>
</form>
md5 collision
- 题目
$md51 = md5('QNKCDZO');
$a = @$_GET['a'];
$md52 = @md5($a);
if(isset($a)){
if ($a != 'QNKCDZO' && $md51 == $md52) {
echo "nctf{*****************}";
} else {
echo "false!!!";
}}
else{echo "please input a";}
- 以为是普通的 MD5 碰撞,尝试生成 MD5 查询碰撞,均查询不到
echo -n 'QNKCDZO' | md5sum
0e830400451993494058024219903391
- 询问MZI大佬后查询相关资料了解到是 PHP 弱类型转换漏洞,查找一个 hash 开头为
0e
的字符串通过 - PHP Hash 比较存在缺陷,影响大量 Web 网站登录认证、忘记密码等关键业务
- PHP 处理 0e 开头 md5 哈希字符串缺陷/bug
这题不是 WEB
答案又是啥。。
答案应该藏在附图中,保存图片,尝试用解压工具打开,失败。拖入 WinHex 中,在文件尾部找到 flag
AAencode
- 直接看是个乱码文件,看到文件是个 txt ,保存成文件打开,变成了颜文字
(≧▽≦)/结合题目提示(javascript aaencode)将颜文字贴到控制台运行得到 flag (神奇的 JS)
゚ω゚ノ = /`m´)ノ ~┻━┻ / /*´∇`*/["_"];
o = ゚ー゚ = _ = 3;
c = ゚Θ゚ = ゚ー゚ - ゚ー゚;
゚Д゚ = ゚Θ゚ = (o ^ _ ^ o) / (o ^ _ ^ o);
゚Д゚ = {
゚Θ゚: "_",
゚ω゚ノ: ((゚ω゚ノ == 3) + "_")[゚Θ゚],
゚ー゚ノ: (゚ω゚ノ + "_")[o ^ _ ^ (o - ゚Θ゚)],
゚Д゚ノ: ((゚ー゚ == 3) + "_")[゚ー゚],
};
゚Д゚[゚Θ゚] = ((゚ω゚ノ == 3) + "_")[c ^ _ ^ o];
゚Д゚["c"] = (゚Д゚ + "_")[゚ー゚ + ゚ー゚ - ゚Θ゚];
゚Д゚["o"] = (゚Д゚ + "_")[゚Θ゚];
゚o゚ =
゚Д゚["c"] +
゚Д゚["o"] +
(゚ω゚ノ + "_")[゚Θ゚] +
((゚ω゚ノ == 3) + "_")[゚ー゚] +
(゚Д゚ + "_")[゚ー゚ + ゚ー゚] +
((゚ー゚ == 3) + "_")[゚Θ゚] +
((゚ー゚ == 3) + "_")[゚ー゚ - ゚Θ゚] +
゚Д゚["c"] +
(゚Д゚ + "_")[゚ー゚ + ゚ー゚] +
゚Д゚["o"] +
((゚ー゚ == 3) + "_")[゚Θ゚];
゚Д゚["_"] = (o ^ _ ^ o)[゚o゚][゚o゚];
゚ε゚ =
((゚ー゚ == 3) + "_")[゚Θ゚] +
゚Д゚.゚Д゚ノ +
(゚Д゚ + "_")[゚ー゚ + ゚ー゚] +
((゚ー゚ == 3) + "_")[o ^ _ ^ (o - ゚Θ゚)] +
((゚ー゚ == 3) + "_")[゚Θ゚] +
(゚ω゚ノ + "_")[゚Θ゚];
゚ー゚ += ゚Θ゚;
゚Д゚[゚ε゚] = "\\";
゚Д゚.゚Θ゚ノ = (゚Д゚ + ゚ー゚)[o ^ _ ^ (o - ゚Θ゚)];
o゚ー゚o = (゚ω゚ノ + "_")[c ^ _ ^ o];
゚Д゚[゚o゚] = '"';
゚Д゚["_"](
゚Д゚["_"](
゚ε゚ +
゚Д゚[゚o゚] +
゚Д゚[゚ε゚] +
゚Θ゚ +
゚ー゚ +
゚Θ゚ +
゚Д゚[゚ε゚] +
゚Θ゚ +
(゚ー゚ + ゚Θ゚) +
゚ー゚ +
゚Д゚[゚ε゚] +
゚Θ゚ +
゚ー゚ +
(゚ー゚ + ゚Θ゚) +
゚Д゚[゚ε゚] +
゚Θ゚ +
((o ^ _ ^ o) + (o ^ _ ^ o)) +
((o ^ _ ^ o) - ゚Θ゚) +
゚Д゚[゚ε゚] +
゚Θ゚ +
((o ^ _ ^ o) + (o ^ _ ^ o)) +
゚ー゚ +
゚Д゚[゚ε゚] +
(゚ー゚ + ゚Θ゚) +
(c ^ _ ^ o) +
゚Д゚[゚ε゚] +
゚ー゚ +
((o ^ _ ^ o) - ゚Θ゚) +
゚Д゚[゚ε゚] +
゚Θ゚ +
(゚ー゚ + ゚Θ゚) +
((o ^ _ ^ o) + (o ^ _ ^ o)) +
゚Д゚[゚ε゚] +
゚Θ゚ +
゚ー゚ +
(o ^ _ ^ o) +
゚Д゚[゚ε゚] +
゚Θ゚ +
((o ^ _ ^ o) + (o ^ _ ^ o)) +
゚ー゚ +
゚Д゚[゚ε゚] +
゚Θ゚ +
゚ー゚ +
((o ^ _ ^ o) + (o ^ _ ^ o)) +
゚Д゚[゚ε゚] +
゚Θ゚ +
(゚ー゚ + (o ^ _ ^ o)) +
(o ^ _ ^ o) +
゚Д゚[゚ε゚] +
゚Θ゚ +
(゚ー゚ + ゚Θ゚) +
((o ^ _ ^ o) - ゚Θ゚) +
゚Д゚[゚ε゚] +
゚Θ゚ +
゚ー゚ +
゚Θ゚ +
゚Д゚[゚ε゚] +
゚Θ゚ +
((o ^ _ ^ o) + (o ^ _ ^ o)) +
((o ^ _ ^ o) + (o ^ _ ^ o)) +
゚Д゚[゚ε゚] +
゚Θ゚ +
゚ー゚ +
゚Θ゚ +
゚Д゚[゚ε゚] +
゚Θ゚ +
((o ^ _ ^ o) + (o ^ _ ^ o)) +
(o ^ _ ^ o) +
゚Д゚[゚ε゚] +
゚Θ゚ +
゚ー゚ +
(o ^ _ ^ o) +
゚Д゚[゚ε゚] +
゚Θ゚ +
((o ^ _ ^ o) + (o ^ _ ^ o)) +
((o ^ _ ^ o) - ゚Θ゚) +
゚Д゚[゚ε゚] +
゚Θ゚ +
(゚ー゚ + ゚Θ゚) +
゚Θ゚ +
゚Д゚[゚ε゚] +
゚Θ゚ +
((o ^ _ ^ o) + (o ^ _ ^ o)) +
(c ^ _ ^ o) +
゚Д゚[゚ε゚] +
゚Θ゚ +
((o ^ _ ^ o) + (o ^ _ ^ o)) +
゚ー゚ +
゚Д゚[゚ε゚] +
゚Θ゚ +
(o ^ _ ^ o) +
(゚ー゚ + (o ^ _ ^ o)) +
゚Д゚[゚ε゚] +
゚Θ゚ +
゚ー゚ +
゚Θ゚ +
゚Д゚[゚ε゚] +
゚Θ゚ +
゚ー゚ +
゚Θ゚ +
゚Д゚[゚ε゚] +
゚Θ゚ +
゚ー゚ +
(゚ー゚ + ゚Θ゚) +
゚Д゚[゚ε゚] +
゚Θ゚ +
(゚ー゚ + ゚Θ゚) +
((o ^ _ ^ o) + (o ^ _ ^ o)) +
゚Д゚[゚ε゚] +
゚Θ゚ +
゚ー゚ +
(o ^ _ ^ o) +
゚Д゚[゚ε゚] +
゚Θ゚ +
(゚ー゚ + ゚Θ゚) +
(゚ー゚ + (o ^ _ ^ o)) +
゚Д゚[゚ε゚] +
゚Θ゚ +
゚ー゚ +
゚ー゚ +
゚Д゚[゚ε゚] +
゚Θ゚ +
゚ー゚ +
(゚ー゚ + ゚Θ゚) +
゚Д゚[゚ε゚] +
゚Θ゚ +
(゚ー゚ + (o ^ _ ^ o)) +
(゚ー゚ + ゚Θ゚) +
゚Д゚[゚ε゚] +
゚ー゚ +
((o ^ _ ^ o) - ゚Θ゚) +
゚Д゚[゚ε゚] +
(゚ー゚ + ゚Θ゚) +
゚Θ゚ +
゚Д゚[゚o゚]
)(゚Θ゚)
)("_");
单身二十年/单身一百年也没用
单身二十年/这题可以靠技术也可以靠手速! 老夫单身二十年,自然靠的是手速!
点击题目链接,观察到链接跳转行为,使用 curl 访问跳转前地址得到 flag 。由于这道题使用 javascript 跳转,也可以通过禁用 javascript 得到 flag
root@~$ curl http://chinalover.sinaapp.com/web8/search_key.php
<script>window.location="./no_key_is_here_forever.php"; </script>
key is : nctf{yougotit_script_now}
root@~$
单身一百年也没用/是的。。这一题你单身一百年也没用
和上一题一样,点击链接会发生跳转,但是这次是 302 跳转。同样使用 curl 获取页面,在 Headers 中获得 flag (这题也可以通过查看浏览器开发者工具获得 flag)
root@~$ curl -v http://chinalover.sinaapp.com/web9/index.php
< HTTP/1.1 302 Found
< Server: sae
< Date: Sun, 17 Dec 2017 09:49:12 GMT
< Content-Type: text/html
< Content-Length: 0
< Connection: keep-alive
< flag: nctf{this_is_302_redirect}
< Location: http://chinalover.sinaapp.com/web8/no_key_is_here_forever.php
< Via: 1527
<
* Connection #0 to host chinalover.sinaapp.com left intact
COOKIE
- 进入题目后提示
please login first!
,根据题目提示,查找页面 cookies - 看到一个
Login
的 cookies ,使用工具将值修改为 1,刷新,得到 flag
Py 交易
- 题目给了一个 .pyc 文件,使用工具(如 uncompyle2)反编译得到如下代码
#!/usr/bin/env python
# encoding: utf-8
import base64
def encode(message):
s = ''
for i in message:
x = ord(i) ^ 32
x = x + 16
s += chr(x)
return base64.b64encode(s)
correct = 'XlNkVmtUI1MgXWBZXCFeKY+AaXNt'
flag = ''
print 'Input flag:'
flag = raw_input()
if encode(flag) == correct:
print 'correct'
else:
print 'wrong'
- 根据 encode 编写 decode 函数
#!/usr/bin/env python
# encoding: utf-8
import base64
# 解码
# 字符 -> base64解码 -> 数字 -> -16 -> 异或32 -> 字符
def decode(message):
message = base64.b64decode(message)
s = ''
for i in message:
x = ord(i) - 16
x = x ^ 32
s += chr(x)
return s
correct = 'XlNkVmtUI1MgXWBZXCFeKY+AaXNt'
flag = decode(correct)
print flag
伪装者
- 题目如下
* * * * * * * * * * * * * * * * * * * * * * * * * *
管理系统只能在本地登陆
本系统外部禁止访问
* * * * * * * * * * * * * * * * * * * * * * * * * *
不是本地登陆你还想要flag?
- 看起来需要伪装成内网访问才能获得 flag ,使用 curl 添加
X-Forwarded-For: 127.0.0.1
伪装客户端 IP ,成功得到 flag
root@~$ curl http://chinalover.sinaapp.com/web4/xxx.php -H 'Client-IP: 127.0.0.1'
<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<pre><br><br><br><br>* * * * * * * * * * * * * * * * * * * * * * * * * *<br><br> 管理系统只 能在本地登陆<br><br> 本系统外部禁止访问<br><br>* * * * * * * * * * * * * * * * * * * * * * * * * *<br></pre>nctf{happy_http_headers}
</html>
变量覆盖
- 题目核心代码如下
<?php if ($_SERVER["REQUEST_METHOD"] == "POST") { ?>
<?php
extract($_POST);
if ($pass == $thepassword_123) { ?>
<div class="alert alert-success">
<code><?php echo $theflag; ?></code>
</div>
<?php } ?>
<?php } ?>
- 根据题目提示及代码,推测要利用
extract($_POST);
覆盖 PHP 的原密码
root@~$ curl http://chinalover.sinaapp.com/web18/ -sd "pass=123&thepassword_123=123" | grep nctf
<code>nctf{bian_liang_fu_gai!}</code>
Remove Boyfriend
- 题目是一个文件
Remove+Boyfriend.pcapng
,查看一下文件头发现是 Wireshark 的抓包文件。导入 Wireshark 分析,根据协议大致能猜出是使用 FTP 传输数据,分析 FTP-DATA 包得到如下三部分信息 - 第一部分是 FTP 文件列表,可以看到有一个明显的 flag.py
total 4
-rw-r--r-- 1 LiuDong staff 1608061 Sep 14 19:43 Stan's XX.png
-rw-r--r-- 1 LiuDong staff 730 Sep 14 19:39 flag.py
-rw-r--r-- 1 LiuDong staff 36 Sep 14 19:20 jiade,doushijiade.txt
- 第二部分是 flag.py
def Upper(ch):
if ch>='A' and ch<='Z':
return True
def Lower(ch):
if ch>='a' and ch<='z':
return True
def X1con(s):
flag = ''
for i in s:
if Upper(i) == True:
if i>='A' and i<='M':
flag += chr(ord(i)+13)
else:
flag += chr(ord(i)-13)
elif Lower(i) == True:
if i>='a' and i<='m':
flag += chr(ord(i)+13)
else:
flag += chr(ord(i)-13)
else:
flag += i
return flag
if __name__ == "__main__":
s = '{synt_vf_abg_urer}'
print X1con(s)
'''
emmmmm......
Run this program you can get flag
'''
- 兴奋地运行!得到 flag
{flag_is_not_here}
(╯‵□′)╯︵┻━┻ - 只能从后续的 FTP 数据找线索了
- 第三部分从数据头推断是一个 PNG 文件,结合第一部分的内容,推断这是
Stan's XX.png
,这个文件被分割成多个数据包传输 - 尝试使用 Wireshark 的
追踪流
功能追踪全部数据,将数据以原始数据保存,得到1.53 MB
大小的文件,与第一部分信息想吻合,确认是 Stan’s XX.png (也能从 FTP 的数据包得到验证) - 将文件重命名为
Stan's XX.png
打开,在图片左下角得到线索synt{jub_nz_1}
- 用这条线索替换之前得到的 flag.py 中的字符串,运行得到 flag