链接

攻防世界web新手练习

view_source

使用F12即可查看源码得到flag

get_post

“请用GET方式提交一个名为a,值为1的变量“

可以直接在url上补一个/?a=1,直接在浏览器改url传参是使用的get方法

post方法一般是提交表单时使用,这里我们可以使用curl这个工具

curl -d "b=2" http://223.112.5.141:57025/?a=1

我们也可以使用requests库

import requests
params={
'a':1
}
data={
'b':2
}
url = "http://223.112.5.141:57025"
response = requests.post(url,params=params,data=data)
response.encoding = response.apparent_encoding
print(response.text)
print(response.url)

倒数第三句是中文编码问题

robots

robots协议也称爬虫协议、爬虫规则等,是指网站可建立一个robots.txt文件来告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取,而搜索引擎则通过读取robots.txt文件来识别这个页面是否允许被抓取。但是,这个robots协议不是防火墙,也没有强制执行力,搜索引擎完全可以忽视robots.txt文件去抓取网页的快照 [5]如果想单独定义搜索引擎的漫游器访问子目录时的行为,那么可以将自定的设置合并到根目录下的robots.txt,或者使用robots元数据(Metadata,又称元数据)。

robots协议并不是一个规范,而只是约定俗成的,所以并不能保证网站的隐私。

简单来说,这个东西告诉了爬虫程序什么可以爬什么不能爬,但是效力几乎没有。

我们可以访问这个文件来查看都有什么文件。

http://223.112.5.141:51424/robots.txt

显示:

User-agent: *
Disallow:
Disallow: f1ag_1s_h3re.php

这告诉我们有一个php文件,我们可以访问,访问即可得到flag。

backup

提示”你知道index.php的备份文件名吗?”

搜了一下,可以尝试一下/index.php.bak

果然一下就得到了备份文件,flag就在里面

cookie

我的理解是这样的,网站告诉用户浏览器需要保存一个票据,下次你可以拿着这个票据告诉我,这样我就能知道你谁了。

gpt回复的:

功能 说明
会话管理(登录状态) 让用户登录后,服务器识别你的身份,保持登录状态
个性化设置 记住用户偏好,比如语言、主题、布局等
跟踪和分析 网站用来收集访问行为,做用户分析或广告投放

在下一次浏览器向网站发送请求时,就会带上这个cookie参数。

这个题的话我们就可以使用F12中的network抓一下包,看一下cookie内容。

cookie告诉我们有个cookie.php,我们访问一下,提示说看一下http response。

我们再看一下F12的Network里面回复头,可以看到有一个参数就是flag。

disabled_button

按下F12查看一下源代码,可以看到html里面关于按钮有一个disabled属性

<input disabled class="btn btn-default" style="height:50px;width:200px;" type="submit" value="flag" name="auth">

F12可以自由修改前端代码,我们把这个disabled删掉就可以按下按钮得到flag了。

simple_js

唐氏题目

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) );

上面一大段都没用,怎么都会返回错误提示字符串,就是

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"));

这句代码将里面的东西丢进cyberchef转换一下就能得到flag。

xff_referer

狠狠学习了一下burpsuite使用

burpsuite有内嵌浏览器,这样就不必修改代理了

首先学习一下知识点

X-Forwarded-For和Referer都是HTTP请求头的字段

X-Forwarded-For(简称 XFF)是一个 HTTP 请求头部字段,它用于表示 HTTP 请求的客户端 IP 地址。

Referer 是另一个 HTTP 请求头部字段,它包含了当前请求的来源页面 URL 地址,即前一个页面的 URL 地址。

burpsuite可以实现抓取流量包,然后修改内容重放。

我们在“代理”中可以打开内嵌浏览器,然后在这个浏览器中访问网址。

在”HTTP历史记录”中,我们可以找到发送的包。在发送的包上右键选择”发送到repeater”,然后在重放器中修改字段,点击发送即可。

GET / HTTP/1.1
Host: 223.112.5.141:64502
Referer:https://www.google.com
X-Forwarded-For:123.123.123.123
Cache-Control: max-age=0
Accept-Language: zh-CN,zh;q=0.9
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Length: 2

weak_auth

使用burpsuite进行爆破

用户名是admin(提示给出),密码不清楚

在burpsuite中的内嵌浏览器中,使用admin和123来登录一下,抓取一下流量包

将请求包发送至Intruder并添加Payload位置,选择Sniper模式

在payload设置中选择一些列表,然后”开始攻击”

之后就可以看到不同的payload的响应报文长度,可以看到
“123456”的相应报文长度与其他的不同,点开即可得到flag

WP

burpsuite爆破使用

之后再具体学习一下

command_execution

命令执行漏洞

当应用需要调用一些外部程序去处理内容的情况下,就会用到一些执行系统命令的函数。如PHP中的system,exec,shell_exec等,当用户可以控制命令执行函数中的参数时,将可注入恶意系统命令到正常命令中,造成命令执行攻击。

在操作系统中,“&、|、||”都可以作为命令连接符使用,用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令

A&&B,表示A命令语句执行成功,然后执行B命令语句
A&B,表示简单的拼接,A命令语句和B命令语句没有制约关系
A|B,表示A命令语句的输出,作为B命令语句的输入执行
A||B,表示A命令语句执行失败,然后才执行B命令语句
A;B,表示先执行A,再执行B

127.0.0.1 && find / -name "*.txt"

使用find查找txt后缀的内容

找到/home/flag.txt

127.0.0.1 && cat  /home/flag.txt

之后就可以得到flag

下面是问gpt得到的查找所有带flag字样的文件

find / -type f -name '*flag*'

simple_php

<?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的类型比较机制

要求$a==0 and $a

这个判断是关键点之一,拆解逻辑如下:

  1. $a == 0弱类型比较,只要 $a 在弱比较下等于数字 0。
  2. $a:布尔上下文中为 true,也就是说 $a 的布尔值为 true

可以让$a = "0abc";

又要求

is_numeric($b) $b>1234

可以让 $b="1235abc"

http://61.147.171.105:52300/?a=0abc&b=1235abc

即可得到flag