攻防世界新手web和misc

攻防世界新手web和misc

MISC

ext3

hint:今天是菜狗的生日,他收到了一个linux系统光盘

下载得到一个linux系统文件。拉进kali分析用file分析一下

image-20210911171232422

没什么特别的东西。接着用strings搜索一下看看有没有料。

image-20210911171418864

发现有一个flag.txt。那就挂载磁盘

image-20210911171536044

打开得到flag.txt

image-20210911171554266

1
ZmxhZ3tzYWpiY2lienNrampjbmJoc2J2Y2pianN6Y3N6Ymt6an0=

base64编译:

1
flag{sajbcibzskjjcnbhsbvcjbjszcszbkzj}

SimpleRAR

下载得到一个rar压缩文件。打开里面只有一个flag.txt,里面就只有一句话“flag is not here”。用010打开压缩包,分析。

image-20210912231818149

发现,按正常来说,这个压缩包不只有一个flag.txt,还应该有一张png图片。问题就出现在选中的这个7A(图中已修改)。我们要的是文件块而不是子块,于是更改7A为74,成功解压,发现是一张空白的图片,继续用010打开。发现是gif,用gifsplitter分离。得到两张图片

image-20210913223147081

分别放到Stegsolve分析,

image-20210913223259106

image-20210913223307761

将两张二维码合并,并且补齐定位码就可以了。

PS:垃圾的我不会用ps,所以就用了Win自带的画图3D。截图两张然后用插入将两张合并在一起。

flag.jpg

this_is_flag

image-20210913223726053

flag{th1s_!s_a_d4m0_4la9}

pdf

打开PDF,右击,删除照片,就有flag

如来十三掌

word文档里面有一些看不懂的“佛家”字体。联想到 佛曰加密

去加解密网站解密

image-20210913224130137

记住要在前面加佛曰:

得到

1
MzkuM3gvMUAwnzuvn3cgozMlMTuvqzAenJchMUAeqzWenzEmLJW9

很像base64,解密不出任何东西。卡死了。。题目提到了十三掌。十三。。。。Rot13加解密

解密得到

1
ZmxhZ3tiZHNjamhia3ptbmZyZGhidmNraWpuZHNrdmJramRzYWJ9

base64解密:

1
flag{bdscjhbkzmnfrdhbvckijndskvbkjdsab}

give_you_flag

得到一个gif,发现闪过二维码。gifsplitter分离。

IMG00049

网上找定位符,补全即可。可以参考这个补全二维码

image-20210913230043512

flag{e7d478cf6b915f50ab1277f78502a2c5}

stegano

hint:菜狗收到了图后很开心,玩起了pdf 提交格式为flag{xxx},解密字符需小写

全选之后,发现有异样

image-20210913230728147

用浏览器打开看看什么情况。浏览器打开之后,全选,复制。放到sublime或者txt看看多出来的东西是什么。结果是这一串

1
BABA BBB BA BBA ABA AB B AAB ABAA AB B AA BBB BA AAA BBAABB AABA ABAA AB BBA BBBAAA ABBBB BA AAAB ABBBB AAAAA ABBBB BAAA ABAA AAABB BB AAABB AAAAA AAAAA AAAAB BBA AAABB

凭经验来讲,应该是摩斯密码,把A当成”.”,B当成”-“

1
-.-. --- -. --. .-. .- - ..- .-.. .- - .. --- -. ... --..-- ..-. .-.. .- --. ---... .---- -. ...- .---- ..... .---- -... .-.. ...-- -- ...-- ..... ..... ....- --. ...--

解密得到flag

image-20210913231322362

flag{1nv151bl3m3554g3}

坚持60s

下载附件,jar文件。打开。。。。坚持60s。用010打开发现PK包。

image-20210914162213857

改后缀名zip。解压打开。在文件PlaneGameFrame.class里发现flag

image-20210914162313920

1
flag{RGFqaURhbGlfSmlud2FuQ2hpamk=}

base64解码

1
flag{DajiDali_JinwanChiji}

gif

hint:菜狗截获了一张菜鸡发给菜猫的动态图,却发现另有玄机

得到一个压缩包。解压缩,一共104张图片,不是白色就是黑色。二进制吧。。白色代表0,黑色代表1

人工统计也行,通过脚本也行。下面贴上脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
str = ""

white = open("./gif/0.jpg","rb").read()
black = open("./gif/1.jpg","rb").read()
#上面两句用于为下面的图片识别做个实例,定义什么图片是白色,什么是黑色

for i in range(104):
with open("./gif/%d.jpg"%i,"rb") as f:
if f.read() == white:
str += "0"
else:
str += "1"
#上面循环语句用于识别gif路径下的104张图片的颜色,并给白色附值为0,黑色赋值为1

#print (flag)
#用于测试打印识别后的二进制

flag = ""

for i in range(len(str)//8):
flag += chr(int(str[i*8:(i+1)*8],2))

print(flag)
#将二进制转化为字符串

代码最后运用了python的切片技术,不会的可以参考这篇文章https://www.jianshu.com/p/15715d6f4dad

掀桌子

题目:菜狗截获了一份报文如下c8e9aca0c6f2e5f3e8c4efe7a1a0d4e8e5a0e6ece1e7a0e9f3baa0e8eafae3f9e4eafae2eae4e3eaebfaebe3f5e7e9f3e4e3e8eaf9eaf3e2e4e6f2,生气地掀翻了桌子(╯°□°)╯︵ ┻━┻

字符串由0-9,a-f组成。应该是改过的16进制。将字符串改成正规16进制

1
2
3
4
5
string = "c8e9aca0c6f2e5f3e8c4efe7a1a0d4e8e5a0e6ece1e7a0e9f3baa0e8eafae3f9e4eafae2eae4e3eaebfaebe3f5e7e9f3e4e3e8eaf9eaf3e2e4e6f2"
s= ''
for i in range(0,len(string), 2):
s += "0x" + string[i] + string[i+1]
print(s)

得到

1
0xc80xe90xac0xa00xc60xf20xe50xf30xe80xc40xef0xe70xa10xa00xd40xe80xe50xa00xe60xec0xe10xe70xa00xe90xf30xba0xa00xe80xea0xfa0xe30xf90xe40xea0xfa0xe20xea0xe40xe30xea0xeb0xfa0xeb0xe30xf50xe70xe90xf30xe40xe30xe80xea0xf90xea0xf30xe20xe40xe60xf2

发现都是大于128的。将他们减去128再转换成asc码

1
2
3
4
5
6
7
string = "c8e9aca0c6f2e5f3e8c4efe7a1a0d4e8e5a0e6ece1e7a0e9f3baa0e8eafae3f9e4eafae2eae4e3eaebfaebe3f5e7e9f3e4e3e8eaf9eaf3e2e4e6f2"
s = ''
flag=''
for i in range(0,len(string), 2):
s = "0x" + string[i] + string[i+1]
flag += chr(int(s, 16) - 128)
print(flag)

得到:

1
Hi, FreshDog! The flag is: hjzcydjzbjdcjkzkcugisdchjyjsbdfr

base64stego

hint:菜狗经过几天的学习,终于发现了如来十三掌最后一步的精髓

下载压缩包,解压得到一个stego.txt。里面全是看似base64字符。

解密得到

“Steganography is the art and science of writing hidden messages in such a way that no one”

意思就是隐写。查了一下原来有base64隐写。

基于python3的脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import base64
path = input("请输入加密文件路径\n")
file = open(path)
a = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
aaa = ''
while True:
text = file.readline() # 只读取一行内容
# 判断是否读取到内容
text = text.replace("\n", "")
if not text:
break
if text.count('=') == 1:
aaa = aaa + \
str('{:02b}'.format((a.find(text[len(text)-2])) % 4))
if text.count('=') == 2:
aaa = aaa + \
str('{:04b}'.format((a.find(text[len(text)-3])) % 16))
file.close()
t = ""
ttt = len(aaa)
ttt = ttt//8*8
for i in range(0,ttt,8):
t = t + chr(int( aaa[i:i+8],2))
print(t)

image-20210914223025460

得到flag:flag{Base_sixty_four_point_five}

功夫再高也怕菜刀

hint:菜狗决定用菜刀和菜鸡决一死战

开局一个流量文件。

放到kali里面分析了一下,用foremost分离文件。得到一个压缩文件,里面有flag.txt,但是有密码。

image-20210917222610285

怎么办呢???分析流量文件吧。定位一下这个flag.txt在哪

image-20210917222800699

追踪一下TCP流。得到一大串东西

image-20210917222850129

不要前面的base64,选中后面的一大串

image-20210917223104860

一直到。。。。image-20210917223118752

导入010

image-20210917223256463

发现是一张图片?攻略

打开图片,是密码。打开解压密码拿flag

image-20210917223506963

flag{3OpWdJ-JP6FzK-koCMAK-VkfWBq-75Un2z}

WEB

view_source

hint:X老师让小宁同学查看一个网页的源代码,但小宁同学发现鼠标右键好像不管用了。

F12,image-20210917223856557

robots

hint:X老师上课讲了Robots协议,小宁同学却上课打了瞌睡,赶紧来教教小宁Robots协议是什么吧。

根据提示,robots协议。

http://111.200.241.244:54060/robots.txt

image-20210917224141876

image-20210917224151964

cyberpeace{9db5e52553d7d956186b82dc3ed734ef}

backup

hint:X老师忘记删除备份文件,他派小宁同学去把备份文件找出来,一起来帮小宁同学吧!

image-20210917224235929

image-20210917224253321

得到文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<html>
<head>
<meta charset="UTF-8">
<title>备份文件</title>
<link href="http://libs.baidu.com/bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet" />
<style>
body{
margin-left:auto;
margin-right:auto;
margin-TOP:200PX;
width:20em;
}
</style>
</head>
<body>
<h3>你知道index.php的备份文件名吗?</h3>
<?php
$flag="Cyberpeace{855A1C4B3401294CB6604CCC98BDE334}"
?>
</body>
</html>

hint:X老师告诉小宁他在cookie里放了些东西,小宁疑惑地想:‘这是夹心饼干的意思吗?

image-20210917224359123

很明显就是要我们读cookie。抓包,拿cookie

image-20210917224610705

image-20210917224628573

叫我们找响应包。F12

image-20210917224757355

disabled_button

hint:X老师今天上课讲了前端知识,然后给了大家一个不能按的按钮,小宁惊奇地发现这个按钮按不下去,到底怎么才能按下去呢?

根据hint,不能按下去。应该就是编写前端的时候,将按钮的属性设置成不能按下去。

按F12看看image-20210917225056966

把这个disable=“”去掉

image-20210917225126176

就可以按按钮了。得到flag

cyberpeace{a9b4375ddf6e32b058af096ee165c559}

weak_auth

hint:小宁写了一个登陆验证页面,随手就设了一个密码。

额。。。弱密码

admin 123456登录。拿flag

cyberpeace{d69afc0f1280190706831223a104daf5}

simple_php

hint:小宁听说php是最好的语言,于是她简单学习之后写了几行php代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
show_source(__FILE__);
include("config.php");
$a=@$_GET['a'];
$b=@$_GET['b'];
if($a==0 and $a){
echo $flag1;
}
if(is_numeric($b)){
exit();
}
if($b>1234){
echo $flag2;
}
?>

简单的代码审计。

条件一:a=0且为真 =====>输出flag1

条件二:b为字符串

条件三:b>1234 ======>输出flag2

利用php弱类型比较。

1
http://111.200.241.244:65199/?a=%220%22

得到一半flag

Cyberpeace{647E37C7627CC3E401

1
http://111.200.241.244:65199/?a=%220%22&b=12345a

得到完整flag

Cyberpeace{647E37C7627CC3E4019EC69324F66C7C}

get_post

hint:X老师告诉小宁同学HTTP通常使用两种请求方法,你知道是哪两种吗?

http两种请求方法,get和post

image-20210917230143766

1
http://111.200.241.244:61319/?a=1

image-20210917230208456

post要不抓包要不用hackbar

image-20210917230244982

cyberpeace{f7a79b0997d3ef07b6738ac6216a9723}

xff_referer

hint:X老师告诉小宁其实xff和referer是可以伪造的。

image-20210917230351957

XFF,是X-Forwarded-for的缩写,XFF注入是SQL注入的一种,该注入原理是通过修改X-Forwarded-for头对带入系统的dns进行sql注入,从而得到网站的数据库内容。

运用条件:

1.Web业务运行正常

2.HTTP Header中存在X-Forwarded-for参数的调用

image-20210917230916302

又有要求

image-20210917230930919

image-20210917230950418

image-20210917230958568

image-20210917231006727

以上操作全在hackbar完成

webshell

hint:小宁百度了php一句话,觉着很有意思,并且把它放在index.php里。

image-20210917231122038

直接蚁剑连接

打开蚁剑,右键添加数据

image-20210917231232325

添加。

image-20210917231255088

cyberpeace{4d613129df2a8ae85a812456f8aac72c}

command_execution

hint:小宁写了个ping功能,但没有写waf,X老师告诉她这是非常危险的,你知道为什么吗。

命令注入漏洞。

1
127.0.01|ls

image-20210917231424150

发现会执行ls这条命令并且回显,所以可以先查找flag有关的文件。

1
127.0.0.1 && find / -name "flag*"

image-20210917231729713

直接读文件

1
127.0.0.1 && cat /home/flag.txt

cyberpeace{52ce94350b58602299ec20da3755f8c7}

simple_js

hint:小宁发现了一个网页,但却一直输不对密码。(Flag格式为 Cyberpeace{xxxxxxxxx} )

直接看源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

<html>
<head>
<title>JS</title>
<script type="text/javascript">
function dechiffre(pass_enc){
var pass = "70,65,85,88,32,80,65,83,83,87,79,82,68,32,72,65,72,65";
var tab = pass_enc.split(',');
var tab2 = pass.split(',');var i,j,k,l=0,m,n,o,p = "";i = 0;j = tab.length;
k = j + (l) + (n=0);
n = tab2.length;
for(i = (o=0); i < (k = j = n); i++ ){o = tab[i-l];p += String.fromCharCode((o = tab2[i]));
if(i == 5)break;}
for(i = (o=0); i < (k = j = n); i++ ){
o = tab[i-l];
if(i > 5 && i < k-1)
p += String.fromCharCode((o = tab2[i]));
}
p += String.fromCharCode(tab2[17]);
pass = p;return pass;
}
String["fromCharCode"](dechiffre("\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30"));

h = window.prompt('Enter password');
alert( dechiffre(h) );

</script>
</head>

</html>

代码审计后,发现dechiffre函数里的变量是没被调用的。。也就是说无论怎样,pass都只会是”70,65,85,88,32,80,65,83,83,87,79,82,68,32,72,65,72,65”然后经过一系列的转换,p最后都会为“FAUX PASSWORD HAHA”

dechiffre函数执行完成后,继续执行其它的代码

1
2
3
h = window.prompt('Enter password');
alert( dechiffre(h) );
h=你输入弹框内的内容

之后alert弹出dechiffre(h)的值,由前面所有的代码可知,代码里p的值与tab无关,因为最终都会被tab2的值替代,所以我们无论输入什么,也就是pass_enc=h,无论输入的这个h等于什么,不管tab能否被分割成字符串数组,是否存在,都只会利用到tab2。通俗点讲,有关tab的参数与值都可以视为没有,因此,pass_enc参数是什么也就没有意义了

最后,结论就是,无论我们在弹框中输入什么值,都只会返回FAUX PASSWORD HAHA

说明这道题的flag不可能是靠输入正确密码来获取,因为根本就没有正确密码。

然后再看一眼源代码,明显感觉下面这串十六进制表示的ASCII码很可疑

1
"\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30"

首先看这串十六进制的ASCII码到底是什么,然后将这串数字序列传入到String.fromCharCode中,就可以看到FLAG了。

image-20210917233701647

ps:本题需要一些js基础