攻防世界新手专区——WEB

001 view_source

image-20220125193519294

image-20220125193656769

想查看网页源代码,除了右键,F12ctrl+shift+i也可以做到,F12以后就可以看到flag了。

image-20220125193719553

 cyberpeace{f5a24e9c446e08fe433f0f933b56b01e} 

或者按下ctrl+u也可查看网页源代码

image-20220125194027128

除此之外,可以 google 一下view_source,可以看到:

image-20220125194450496

使用方法也很简单:view-source:http://111.200.241.244:53301/ 即可。(并非所有网站都可以)

这里无法右键其实是因为,有一个js阻止了。我们直接禁用javascript,借助插件也可以禁用。

002 robots

image-20220125195117985

看到题目很容易想到和Robots协议有关,打开环境,是一片空白,不过不影响我们做题

image-20220125195306579

我们在端口号后面跟上/robots.txt,flag所在的文件就出来了。

image-20220125195437388

和上面一样打出文件名就行

image-20220125195510361

或者用curl http://111.200.241.244:63312/f1ag_1s_h3re.php在命令行下获得:

image-20220125195807273

003 backup

image-20220125195848197

打开环境

image-20220125200242335

题目说了,这是一个index.php的备份文件,打开 kali ,拿dirsearch扫一下就知道了。(windows端的用御剑也可以扫出来)

image-20220125201807292

常见的备份文件后缀名有 .git .svn .swp .~ .bak .bash_history等,挨个试也可以,得到flag。


image-20220125200416029

image-20220125200340406

004 cookie

image-20220125201856460

获取环境以后可以看到:

image-20220125201940114

百度百科的解释是这样的:

image-20220125202017334

知道 flag 和 cookie 有关,F12 看一下。

image-20220125202400350

访问http://111.198.29.45:47911/cookie.php,提示查看http响应包,在网络一栏,可看到访问 cookie.php 的数据包

image-20220125202934756

可以看到再响应栏里面,明目张胆的放着 flag:http://111.200.241.244:50402/cookie.php

本题也可以使用burpsuite,进行抓包处理。

同样在命令行下也可以进行操作,同时巩固一下[curl的相关用法](https://www.jianshu.com/p/3f8fbacf753c 以及 http://aiezu.com/article/linux_curl_http_cookie.html)

image-20220125210114055

005 disabled_button

image-20220125210203595

打开环境

image-20220125210247401

显示不能按的按钮,按一下试试,真的没办法按下去,F12 看下源代码

image-20220125210510479

发现input标签有个disable属性,把它删掉就可以正常按按钮了,按完就有flag了

image-20220125210718484

但是代码审计以后可以看出这道题本质上还是需要接收到一个为 flag 的 post 请求,可以尝试用hackbar构造一下。

image-20220125211434886

得到flag。

006 weak_auth

image-20220125211547219

打开环境

image-20220125211758204

随手设的密码?password×,123456√ ?????

image-20220125212049441

行吧,下一题。

我们还是不取巧了,毕竟不是每次都能这么幸运,用FoxyProxy插件配合BurpSuite抓包一下,

image-20220125212617397

image-20220125213012090

忘了说,攻击模式改成

image-20220125213736054

分别设置好字典以后开始攻击就行。(字典可以上github上搜,一大堆,随便找一个就行,毕竟不是什么难题)寻找响应长度特殊的字段,看下面那个特殊的437,就两个,一般来说就一个,响应里面就有flag

image-20220125214350746

007 simple_php

image-20220127153713109

打开环境以后可以看到:

image-20220127153745807

打开网页进行代码审计:可以看到同时满足a==0a为真就会显示flag1,b不是数字且>1234就会返回flag2,考察php弱类型。

image-20220127172805240

查看一下php类型比较表,可以看到,弱类型下,"0"被识别为true

  • 字符串和数字比较的时候,字符串自左向右转化成数值。
  • 遇到不是数字的字符时,就自动舍弃后面的内容,比如下面的12345a会被转化为12345
  • 如果字符开头就是数字会被转化为0,即'a'==0,为真。

is_numberic($b)是一个用来判断变量是否只由数字组成的函数。

详细信息可以参考相关博客。这里构造一下,就可以得到flag。

image-20220127173435067

008 get_post

image-20220127174222118

==两种 HTTP 请求方法:GET 和 POST==
在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。

  • GET - 从指定的资源请求数据。
  • POST - 向指定的资源提交要被处理的数据

打开环境:

image-20220127174305654

这个很简单,输入完以后如下:

image-20220127174434330

这里可以使用插件,也可以在终端下进行提交

image-20220127175330286

image-20220127175546361

009 xff_referer

image-20220127181633725

X-Forwarded-ForXFF)是用来识别通过HTTP代理负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段。 Squid 缓存代理服务器的开发人员最早引入了这一HTTP头字段,并由IETF在HTTP头字段标准化草案中正式提出。

当今多数缓存服务器的用户为大型ISP,为了通过缓存的方式来降低他们的外部带宽,他们常常通过鼓励或强制用户使用代理服务器来接入互联网。有些情况下,这些代理服务器是透明代理,用户甚至不知道自己正在使用代理上网。

如果没有XFF或者另外一种相似的技术,所有通过代理服务器的连接只会显示代理服务器的IP地址,而非连接发起的原始IP地址,这样的代理服务器实际上充当了匿名服务提供者的角色,如果连接的原始IP地址不可得,恶意访问的检测与预防的难度将大大增加。XFF的有效性依赖于代理服务器提供的连接原始IP地址的真实性,因此,XFF的有效使用应该保证代理服务器是可信的,比如可以通过创建可信服务器白名单的方式。

Referer 请求头包含了当前请求页面的来源页面的地址,即表示当前页面是通过此来源页面里的链接进入的。服务端一般使用 Referer 请求头识别访问来源,可能会以此进行统计分析、日志记录以及缓存优化等。

Referer字段实际上告诉了服务器,用户在访问当前资源之前的位置。这往往可以用来用户跟踪。

一个典型的应用是,有些网站不允许图片外链,只有自家的网站才能显示图片,外部网站加载图片就会报错。它的实现就是基于Referer字段,如果该字段的网址是自家网址,就放行。

打开环境可以看到:

image-20220127182543592

本题实际上就是要修改响应头的相关信息,可以有很多方法实现下面一一介绍

方法一:使用相关插件

插件是个很好的东西,可以帮我们节省很多时间,我们这次用到的是一款叫做Modify Header Value的火狐插件。

image-20220127184730617

就是这个东西,我们安装好以后点击插件,打开Open options page

image-20220127184808983

配置一下

image-20220127185618930

再回到环境,先点击开关键,使用插件,再点击Reload active tab进行更新,发现

image-20220127185747984

必须来自google,那么Referer值就为https://www.google.com,照着上面的使用方法再次更改插件配置,就得到了flag。

image-20220127190057057

image-20220127190033011

方法二:使用浏览器的编辑重发功能

image-20220127195525909

这个办法我没有成功,不过wp里的leila0x0D师傅是这么做出来的。

方法三:burpsuit抓包改包

这个我成功了,把抓下来的包丢到重发器,然后增加

X-Forwarded-For:123.123.123.123

Referer:https://www.google.com

image-20220127210748294

这里有个坑,我环境开着,开关了电脑还吃了个饭,时间过了比较长一直尝试都没有成功,于是我把环境销毁然后再试了一次,结果非常顺利。

莫非上面那个直接用浏览器编辑重发功能的失败也是因为这个原因吗?我再试一次,好吧还是失败了。

方法四:curl

image-20220127212002576

010 webshell

image-20220127213036674

Web shell是一种类似shell的界面,它使Web服务器能够被远程访问,通常用于网络攻击的目的。Web shell的独特之处在于,Web浏览器用于与它进行交互。

Web shell 可以用服务器上支持的任何编程语言进行编程。Web shell通常是用PHP编程语言编写的,因为PHP在Web应用程序中广泛使用。然而,Active ServerPages、ASP.NET、Python、Perl、Ruby和Unix shell脚本也被使用,尽管这些语言不太常用。

使用网络监控工具,攻击者可以找到可能允许交付Web shell的漏洞。这些漏洞通常存在于在 Web 服务器上运行的应用程序中。

攻击者可以使用 Web shell 发出 shell 命令,在 Web 服务器上执行权限提升,以及上删除下载和从 Web 服务器执行文件。

看题目就知道,考察的是一句话木马。建议看一下这个网站(左边这个)。

这里打开环境,

image-20220127214100809

方法一:蚁剑

它甚至已经给出了一个一句话,按照直接连上去就行了,so easy!

image-20220127220603964

image-20220127220725205

然后直接查找就行了,本来向find|grep flag,但是没想到就在该目录下。

image-20220127214455929

方法二:Hackbar

除了用蚁剑、中国菜刀、冰蝎之类的webshell管理工具以外,借助插件以及curl也可以管理webshell

下面就来尝试一下。

image-20220127221151482

image-20220127221232700

image-20220127221458625

除此之外,获得flag的命令也有很多。

==shell=system("grep -r cyberpeace ./");==
==shell=system("find ./ -name flag -exec cat {} \;|grep 'cyberpeace'")==

这种解题方式也是很优雅的。

方法三:curl

image-20220127222249584

方法四:盲猜flag

image-20220127221844356

挺好!

011 command_execution

image-20220127222631705

维基百科里是这么描述waf的

Web 应用程序防火墙是一种特殊类型的应用程序防火墙,专门应用于 Web 应用程序。它部署在Web应用程序前面,并分析双向基于Web的(HTTP)流量 - 检测和阻止任何恶意内容。OWASP 为 WAF 提供了广泛的技术定义,即"Web 应用程序级别的安全解决方案,从技术角度来看,它不依赖于应用程序本身。 [8]根据 PCI DSS 信息补充要求 6.6,WAF 被定义为"位于 Web 应用程序和客户端端点之间的安全策略实施点。此功能可以在软件或硬件中实现,在装置设备中运行,或者在运行通用操作系统的典型服务器中实现。它可能是一个独立的设备,也可以集成到其他网络组件中。换句话说,WAF可以是一种虚拟或物理设备,可以防止Web应用程序中的漏洞被外部威胁利用。这些漏洞可能是因为应用程序本身是旧类型,或者设计编码不足。WAF 通过特殊配置规则集(也称为策略)来解决这些代码缺陷。

以前未知的漏洞可以通过渗透测试或漏洞扫描程序来发现。Web应用程序漏洞扫描程序,也称为Web应用程序安全扫描程序,在SAMATE NIST 500-269中被定义为"检查Web应用程序是否存在潜在安全漏洞的自动化程序。除了搜索特定于Web应用程序的漏洞外,这些工具还会查找软件编码错误。 [10]解决漏洞通常称为修复。可以在应用程序中对代码进行更正,但通常需要更及时的响应。在这些情况下,可能需要对唯一的 Web 应用程序漏洞应用自定义策略,以提供临时但即时的修复(称为虚拟修补程序)。

WAF不是最终的安全解决方案,而是与其他网络边界安全解决方案(如网络防火墙和入侵防御系统)结合使用,以提供整体防御策略。

SANS 研究所所述,WAF 通常遵循正安全模型、负安全模型或两者的组合。 WAF使用基于规则的逻辑、解析和签名的组合来检测和防止跨站点脚本和SQL注入等攻击。OWASP 会生成十大 Web 应用程序安全漏洞的列表。所有商业 WAF 产品至少涵盖了这十个缺陷。也有非商业选择。如前所述,众所周知的开源WAF引擎ModSecurity就是这些选项之一。仅靠 WAF 引擎不足以提供足够的保护,因此 OWASP 以及 Trustwave 的 Spiderlabs 通过GitHub[12]帮助组织和维护核心规则集,以便与 ModSecurity WAF 引擎一起使用。 [注13]

没有waf,就会导致不会对文本进行过滤,会产生命令执行漏洞以及其他漏洞,本题考查的就是命令执行漏洞。

打开环境,随便ping一个看看。

image-20220127223409725

咳咳,行吧,看上去应该没问题,嘿嘿。

命令拼接一下试试。

image-20220127223557242

看上去是可以正常执行的,那么直接搜索flag试试。

image-20220127223836626

image-20220127224128888

成功拿到flag。

012 simple_js

image-20220127224813986

打开环境看一下,

image-20220127225037165

猜一下密码多次输入,发现都会出现这么一个报错。

image-20220127225241077

有点不对劲,打开源代码审计一下

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

发现这个批不太对劲,他把正确密码全排除在外了,无论输入啥都会跳转到错误密码里面,而真正的密码就是from char code.参考wp的脚本。

string = "\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"
s = string.split(",")
c = ""
for i in s:
    i = chr(int(i))
    c = c+i
print(c)

运行即得最终的flag为Cyberpeace{786OsErtk12}

这道题我是没有解出来,学的不是很多,但是看完1wtctw师傅的解答以后就很清楚了。

一、首先定义了一个dechiffre函数,咱先不管,因为还没有调用
二、这里重点来了!!!String["fromCharCode"]()?咦,这语法不对吧,没错,这里语法就是不
对,结合题目提示输不对密码,说明什么呢?说明页面代码有问题,这里就是在暗示这个页面代码语法如
果正确了,就能得到flag
改成正确语法:

String.fromCharCode(dechiffre("\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x3
1\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35
\x30"));,返回值恰好就是flag
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(',');
//将pass_enc字符串以,为标志分割成字符串数组
var tab2 = pass.split(',');
 //split() 方法用于把一个字符串分割成字符串数组。      
   var i,j,k,l=0,m,n,o,p = "";//赋值给p空字符串
       i = 0;
       j = tab.length;//属性 length 声明了数组中的元素的个数。11
       k = j + (l) + (n=0);//11
           n = tab2.length;//18
           for(i = (o=0); i < (k = j = n); i++ )
           {   //赋值o=0,然后i=o也就等于0了,k=j=n=18
               o = tab[i-l];//这里o=tab[i-1]是无用的,因为后面会被o=tab2[i]的值重新覆盖,注意做题时排除这些用于干扰你的无效信息
               p += String.fromCharCode((o = tab2[i]));//接收一个或多个Unicode 值,返回一个字符串
                       if(i == 5)break;
           }//i==5运行循环后就跳出了循环,进入下面这个for循环,也基本上是干扰信息,因为这两个循环完全可以合并
           for(i = (o=0); i < (k = j = n); i++ )
           {
               o = tab[i-l];//这里o=tab[i-1]也是无用的
                       if(i > 5 && i < k-1)
                           p += String.fromCharCode((o = tab2[i]));
           }//也就是说p中储存了从tab2[0]到tab2[16]的Unicode 值转换成字符串,共17个Unicode值
p += String.fromCharCode(tab2[17]);//现在18个Unicode值了
pass = p;return pass;//函数返回值就是p,FAUX PASSWORD HAHA
}
// \x代表16进制,转换为10进制后:55,56,54,79,115,69,114,116,107,49,50
h = window.prompt('Enter password');
//显示一个对话框,对话框中包含一条文字信息,用来提示用户输入文字。
//也就是页面刚进入时显示的那个弹窗,h用来储存用户所输入的文字的字符串
alert( dechiffre(h) );//window.alert()方法可以不带上window对象,直接使用alert()方法。
//显示一个警告框,内容为dechiffre函数的返回值,仔细看函数的执行过程发现,函数的返回值与传入的值无关!

三、调用了dechiffre,执行dechiffre函数

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇