Web02_6道题的WriteUp

unserialize3

打开页面 , 发现是一个类

class xctf{
    public $flag = '111';
    public function __wakeup(){
        exit('bad requests');
    }
}

然后问你 ?code=

根据上面代码可以很容易看出 , 当 xctf 这个类被实例化后 , 会先执行构造函数 __wakeup

然而构造函数中存在 exit() , 调用该函数会输出一句话 bad requests 并且退出脚本

根据这道题的题目和代码 , 考点已经很明确了 , 即通过 PHP反序列化绕过__wakeup函数

所以构造反序列化代码

class xctf{
    public $flag = '111';
}

构造结果为 : O:4:%22xctf%22:3:{s:4:%22flag%22;s:3:%22111%22;} , 注意这里 " O " 必须要大写

拿到Flag

png

下面来说下为什么这么做

这里用到了 Google 发现的 CVE-2016-7124 , 该漏洞可使得攻击者绕过 __wakeup() 函数

当然这里仅需要绕过 __wakeup 就可以了 . 所以 , 在上面构造的Payload中 , 属性个数被设置为 3 .( 其实这里换成任意大于等于 " 2 " 的数字就可以了)

如果想知道为什么 , 以及更深入了解PHP序列化和反序列化 , 可以参考另一篇Blog

PHP反序列化漏洞


upload

从题目就能看出这是一道文件上传题目

随便上传了个小马 , 发现上传存在文件类型验证

pic

查看网页源代码 , 发现安全措施是在客户端做的 , 那么直接上BP 绕过它就行了

pic

先写一个 shell.jpg , 直接上传它肯定不会被php解释器解析的 , 所以用BP通过MITM修改文件后缀

xiugai

Content-Type 修改为 multipart/form-data , 将 shell.jpg 修改为 shell.php , 上传即可绕过防御机制

pic

这里连路径都告诉你了 , 直接连你的马就行了 ! 随便找找就可以找到flag文件

png


mfw

这道题刚拿到没有什么头绪 , 拿 dirsearch 扫一下看有没有发现

png

找到一堆 /.git/ 下的文件 , 这很明显出现了git泄露 , 那直接通过GitHack还原源码

png

但是在 flag.php 中不能直接找到flag值 , 问题出在这个 index.php

png

这里存在两个注意点 :

1 . $file = $_GET['page']后 , 没有对这个对象做处理 , 我们有机会对其进行修改 , 执行系统命令等

2 . assert("strpos($file,'..') === false") or die("Detected hacking attempt") : 这里使用断言 , 断言assert会判断其参数是否为字符串 , 如果为字符串那么将它作为PHP代码执行 . 这里表示如果 $file 中存在 .. , 那么就会输出警告并且终止脚本运行

综上 , 我们需要做的就是 : 通过修改 $file 的值 , 读取flag.php 中的内容 , 并且绕过 die() 函数

尝试写一下命令执行的payload

assert("strpos('templates/ ','..') or system(' xxx ');//

我们最终的目的是执行or后面的内容 , 所以上式还可以进一步化简

assert("strpos('templates/ ') or system(' xxx '); //

比如要查看根目录 , 执行并查看源码能看到命令执行成功

png

根据题目要求 , 构造出如下payload , 执行完毕查看源码即可得到flag : ','..')+or+system('cat+templates/flag.php');//

png

其实这题官方给的payload是 : '.system(" xxx ").' , 这是直接通过拼接字符串执行系统命令

PHP2

这题刚拿到手的时候让人一脸懵逼 , 因为整个页面除了一句话什么也没有

png

搞了一会儿 , 实在没有头绪 == 看大牛的 WriteUp

然后发现这道题好像题目有问题 , 因为别人的demo中 , 查看源代码可以看到 index.phps 这条提示 , 我这没有 == 不告诉我我怎么知道还会有 *.phps 这种文件?

访问你这个文件后 , 发现提示

png

代码很简单 , 简单的来说 , 就是通过 URL 拿到 id 参数的值 , 对他进行URL解码 , 如果发现解码后的值为 "admin" , 那么就可以通过验证并给出Flag

所以 , 需要将 admin 进行 urlencode , 才能使得验证通过

去W3c上查了一下 admin 五个字符对应的URL编码 , 发现有如下关系

字符 编码
a %61
d %64
m %6d
i %69
n %6e

所以 admin 对应的 url编码就是 : %61%64%6d%69%6e

但是服务器在解析URL会自动对该URL进行一次解码 , 所以这里需要对admin的url编码进行二次编码

字符 编码
% %25

所以完整的 payload 为 : %2561%2564%256d%2569%256e

注入 ?id=%2561%2564%256d%2569%256e 即可拿到 Flag

png


FlatScience

拿到这道题看了一下 , 发现这个网站里面存了很多PDF文件 . 这个网站也存在 robots.txt 文件

png

看来该网站还存在两个登录界面 . 一个 admin.php . 一个 login.php , 分别来看下

admin.php

png

发现注释里有提示 : do not even try to bypass this , 猜测这个登录无法绕过 , 既然这边好像不能进 , 那么看一下另外一个网站

login.php

png

这里注释里有提示 , ?debug-Parameter , 这里我卡了很久 , 不清楚它到底是个什么意思

最后没法子了 , 突然觉得这个提示不会是 ?debug 参数吧 ! 试一下然后发现页面给出源码 == 我真是醉了

png

这个源码给出的东西太多了, 审计一下源码

  1. 这段源码是连接数据库的代码 , 那么考点很可能就是 SQL注入 了

  2. usr 和 pw 两个参数值通过GET方式传送 . 当两个参数的值都被设置时 , 会进入到下面的语句

  3. $db = new SQLite3('xxxx') , 指定了当前数据库为SQLite`

  4. 那句SQL语句中的参数没有经过任何处理便被带入动态语句执行 . 同时密码加密方式为 SHA1 , 盐为 "Salz!"

  5. 若查询结果的 id 字段不为空 , 会将查询结果的 name 的值设置为Cookie , 可以通过Cookie查看返回的结果

上面的信息已经足够用来完成SQL注入了 . 先来构造 Payload . 将页面通过 BurpSuite 代理 , 查看发送的数据包 . 并将它丢到 Repeater 模块中

png

这里有个知识点 , SQLite数据库中有一个系统表叫 sqlite_master , 每创建一个SQLite数据库时该表会自动创建 . 该表的表信息如下

CREATE TABLE sqlite_master ( 
    type TEXT, 
    name TEXT, 
    tbl_name TEXT, 
    rootpage INTEGER, 
    sql TEXT 
); 

本题中需要关注这个 sql 字段 , 因为从sql字段中可以查到创建表的SQL语句 , 也就知道了表结构

构造 Payload : usr=' UNION SELECT name, sql from sqlite_master--+&pw=123

png

在setcookie时成功将创建数据表的SQL语句输出 , 整理后如下所示

CREATE TABLE Users (
    id int primary key,
    name varchar(255),
    password varchar(255),
    hint varchar(255)
)

有了表结构的信息 , 我们可以使用 Payload 通过 limit函数 逐一将表中所有信息输出

Payload : usr=' UNION SELECT id,x FROM Users LIMIT y,1--+&pw=123

id name password hint
1 admin 3fab54a50e770d830c0416df817567662a9dc85c my fav word in my fav paper?!
2 fritze 54eae8935c90f467427f05e4ece82cf569f89507 my love is â€|!
3 hansi 34b0bb7c304949f9ff2fc101eef0f048be10d3bd the password is password

然后我就彻底没法子了 , 因为上面的SHA1我跑不出来 , 也不会破解 == 数据库中也没找到其他有用的信息 , 老老实实看大牛的 WriteUp 吧

大牛也没查出来 , 但是可以总结出一些信息 , 比如 盐为 Salz! , SHA1后的密码为 3fab54a50e770d830c0416df817567662a9dc85c , admin的提示为 my fav word in my fav paper?!

可以猜测 : admin的密码和这些pdf文件有关联 , 可以尝试将目标站点上所有的pdf文件下载到本地进行破解

随便点了一下 , 发现目标站点上的pdf文件有不少 , 那不如画一个sitemap来更直观的了解目标站点

png

将目标站点的pdf文件都下载下来进行破解 , 这个破解代码我不会写 , 来看下大牛是怎么写的

png

这个代码其实不难理解 , 将当前路径下所有的PDF文件转换成TEXT文件 , 将这些TEXT文件中的字符逐一进行SHA1加密 , 当加密后的密文等于 3fab54a50e770d830c0416df817567662a9dc85c 时 , 输出字符串 , 这个也就是 admin 的密码

png

成功找到了密码 , 密码为 ThinJerboa , 在 admin.php 输入密码 , 即可得到 flag

png


Confusion1

这题没找到题目 == 不知道是不是BUG ==

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇