攻防世界writeup(新手区)

本文最后更新于:1 年前

Web.

0x01. backup

image-20210408222034138

  • 题目提示为备份文件,如果网站存在备份文件,常见的备份文件后缀名有:“.git” 、“.svn”、“ .swp”“.~”、“.bak”、“.bash_history”、“.bkf” 尝试在URL后面,依次输入常见的文件备份扩展名(index.php.*)。

  • 尝试到.bak时下载了一个文件,使用记事本打开得到flag。

image-20210408222034138


0x02. weak_auth

屏幕截图 2021-04-14 170249
  • 题目如图,且任意输入用户名提示please login as admin,这里使用Burp Suite的Intruder模块暴力破解
  • 输入admin,密码随意输入(万一蒙中了呢😊),Bs截断包
屏幕截图 2021-04-14 170457
  • 点击action发送到Intruder模块
屏幕截图 2021-04-14 170713
  • 选择Cluster bomb类型,使用Auto自动识别两个变量
屏幕截图 2021-04-14 170749
  • 分别设置两个变量的内容,密码从load中选择文件
屏幕截图 2021-04-14 170836
  • 暴力开始,点击Start attack
  • 结果中出现两种长度
屏幕截图 2021-04-14 171031 屏幕截图 2021-04-14 171147
  • 密码即为123456,getFlag!

tip: 更详细的操作可参考B站Up主视频


0x03. simple_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;
}
?>
  • 网页内容如上
  • 该题为一个简单的php弱类型比较
  • is_numeric() 函数会判断如果是数字和数字字符串则返回 TRUE,否则返回 FALSE
  • php中有两种比较符号=== 会同时比较字符串的值和类型,== 会先将字符串换成相同类型,再作比较,属于弱类型比较

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1 <?php
2 var_dump("admin"==0); //true
3 var_dump("1admin"==1); //true
4 var_dump("admin1"==1) //false
5 var_dump("admin1"==0) //true
6 var_dump("0e123456"=="0e4456789"); //true
7 ?> //上述代码可自行测试
/* 观察上述代码,"admin"==0 比较的时候,会将admin转化成数值,强制转化,由于admin是字符串,转化的结果是0自然和0相等
"1admin"==1 比较的时候会将1admin转化成数值,结果为1,而“admin1“==1 却等于错误,也就是"admin1"被转化成了0
"0e123456"=="0e456789"相互比较的时候,会将0e这类字符串识别为科学技术法的数字,0的无论多少次方都是零,所以相等

当一个字符串欸当作一个数值来取值,其结果和类型如下:如果该字符串没有包含'.','e','E'并且其数值值在整形的范围之内
该字符串被当作int来取值,其他所有情况下都被作为float来取值,该字符串的开始部分决定了它的值,如果该字符串以合法的数值开始,则使用该数值,否则其值为0。
*/
屏幕截图 2021-04-13 153027

0x04. xff_referer

  • X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项
  • HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的
  • 因此请求头添加X-Forwarded-For:123.123.123.123返回要求来自google
  • 继续添加Referer: https://www.google.com得到flag

0x05. command_execution

1
2
3
4
5
6
7
8
9
10
A|B
1、不管A成功还是失败,两着都会执行,但只输出B的结果
A&B
1AB都会执行并输出
A||B
1、先执行命令A,如果失败则再执行命令B
2、如果A成功,就不执行B
A&&B
1、如果命令A成功执行,则执行命令B,并输出
2、如果命令A没有执行成功,就不会执行命令B
  • 没有写waf,因此只需方框中输入| find / -name "flag.txt",回显flag文件的路径,再使用| cat xxx打开查看flag。

Misc.

0x01. 如来十三掌

屏幕截图 2021-04-16 142633
  • 附件中为
1
夜哆悉諳多苦奢陀奢諦冥神哆盧穆皤三侄三即諸諳即冥迦冥隸數顛耶迦奢若吉怯陀諳怖奢智侄諸若奢數菩奢集遠俱老竟寫明奢若梵等盧皤豆蒙密離怯婆皤礙他哆提哆多缽以南哆心曰姪罰蒙呐神。舍切真怯勝呐得俱沙罰娑是怯遠得呐數罰輸哆遠薩得槃漫夢盧皤亦醯呐娑皤瑟輸諳尼摩罰薩冥大倒參夢侄阿心罰等奢大度地冥殿皤沙蘇輸奢恐豆侄得罰提哆伽諳沙楞缽三死怯摩大蘇者數一遮
  • 应该是与佛论禅编码,解码时加前缀“佛曰:”(冒号为中文)
Snipaste_2021-04-16_14-37-56
  • 然后题目中提示如来十三掌,继续rot-13解码
  • 再一次Base64解码得到flag

0x02. gif

2021-04-16_150215

  • 题目描述为gif图片,打开附件是104个黑白图片,费解。。。参考wp说是二进制,白色为0,黑为1
  • 然后二进制转字符串,getFlag
2021-04-16_153130

0x03. base64stego

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# bin/decode.py
base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
def change(string_test) :
strings_ans = ""
for every in string_test :
bin_num = ""
if every == "=" :
return strings_ans
else :
num = base64.find(every)
while num != 0 :
bin_num += str(num%2)
num = int(num/2)
while len(bin_num) <6 :
bin_num += "0"
bin_num = bin_num[::-1]
strings_ans += bin_num
return strings_ans
def answer(strings_last) :
ans = ""
strings_temp = change(strings_last)
if strings_last.count('=') == 1 :
ans += strings_temp[-2:]
else :
ans += strings_temp[-4:]
return ans
with open("stego.txt","r") as in_file : #输入文件的名称
strings_first = in_file.readlines()
strings = []
for every_strings in strings_first :
if every_strings[-2] =="=" :
strings.append(every_strings)
with open("out.txt","w") as out_file : #输出文件的名称
ans = ""
for line in strings :
ans += answer(line)
num = 0
list_num = []
for i in range(0,len(ans)) :
num = num*2+int(ans[i])
if (i+1)%8 == 0 :
list_num.append(num)
num = 0
ans = ""
for i in list_num :
ans += chr(i)
out_file.write(ans)

0x04. SimpleRAR

  • 打开压缩包(winRAR),发现损坏文件
  • 010 editor打开

![image-20211018104759662](C:\Users\23135\Pictures\Saved Pictures\image-20211018104759662.png)


0x05. ext3

  • 工具:ext3grep:apt-get install ext3grep

  • 二进制文件,使用file命令检查

1
f1fc23f5c743425d9e0073887c846d23: Linux rev 1.0 ext3 filesystem data, UUID=cf6d7bff-c377-403f-84ae-956ce3c99aaa
  • 确定为ext3文件系统的镜像中的恢复文件
  • 先过滤出flag相关文件strings f1fc23f5c743425d9e0073887c846d23 | grep -i flag
1
2
3
4
5
6
7
.flag.txt.swp
flag.txtt.swx
~root/Desktop/file/O7avZhikgKgbF/flag.txt
.flag.txt.swp
flag.txtt.swx
.flag.txt.swp
flag.txtt.swx
  • 定位到~root/Desktop/file/O7avZhikgKgbF/flag.txt使用ext3grep恢复查找此文件
  • base64解密得到flag