Quantcast
Channel: CodeSection,代码区,网络安全 - CodeSec
Viewing all articles
Browse latest Browse all 12749

CTF题解记录-web篇【持续更新】

0
0

好好学习,天天向上,目录如下:

WEEK 1 加了报错的注入 后台登录 上传绕过 WEEK 2 没时间解释了 welcome to bugkuctf never give up

WEEK 1 加了报错的注入

实验吧: http://ctf5.shiyanbar.com/web/baocuo/index.php

查看页面源码,注释说明有sql注入
CTF题解记录-web篇【持续更新】
然后测试一下username和password,发现有过滤
CTF题解记录-web篇【持续更新】
bp简单爆破一下过滤字符,得出结果:
username过滤了 ( ) = # 等字符以及 order by 等关键字, password过滤了 # = ; 等字符以及 updatexml() 和 ext() 两个报错函数。
CTF题解记录-web篇【持续更新】
在伟大的搜索引擎的帮助下,我们查到了这两个报错函数的信息,顺便搜到了注入格式。
CTF题解记录-web篇【持续更新】
爆数据库测试一下可用
CTF题解记录-web篇【持续更新】
然后爆表名,列名,flag,注意到 = 被过滤,换 LIKE ,结果 LIKE 也被过滤,于是换上了正则 regexp ,同样 show 也被过滤。
CTF题解记录-web篇【持续更新】

payload: username=1' and updatexml/*&password=*/(1,concat(0x24,(select database()),0x24),1) and '1 username=1' or updatexml/*&password=*/(1,concat(0x3b,(select group_concat(table_name) from information_schema.tables where table_schema regexp database())),1) and '1 username=1' or updatexml/*&password=*/(1,concat(0x3a,(select group_concat(column_name) from information_schema.columns where table_name regexp 'ffll44jj' )),1) and '1 username=1' or updatexml/*&password=*/(1,concat(0x3a,(select value from ffll44jj)),1) adn '1

看了dalao的wp后发现password并没有过滤 exp() 函数可以直接利用 password 构造payload,不用分割注入。

flag{err0r_b4sed_sqli_+_hpf} 上传绕过

实验吧: http://ctf5.shiyanbar.com/web/upload/

这道题看上去是一个文件上传漏洞,查看源码,注意到了 hidden 表单,感觉有用。
CTF题解记录-web篇【持续更新】
按要求传文件,报错要jpg,传jpg又报错要php,估计是有两次验证。
CTF题解记录-web篇【持续更新】
CTF题解记录-web篇【持续更新】
直接字符截断没有用,想起那个表单,估计是要构造路径截断。 构造路径,进hex改包再发即可得flag!
CTF题解记录-web篇【持续更新】
flag{SimCTF_huachuan} 后台登录

实验吧: http://ctf5.shiyanbar.com/web/houtai/ffifdyop.php

源码有代码,估计是要构造md5注入。
CTF题解记录-web篇【持续更新】
怎么构造? 怎么构造? 怎么构造? 算了看wp吧 …… 直接用文件名 ffifdyop 构造md5有了 'or'xxxx' 的语句,注入成功,告辞。 flag{ffifdyop_has_trash} WEEK 2 1. 没时间解释了

moctf: http://119.23.73.3:5006/web2/index2.php

抓包阻止重定向->路径构造->时间竞争

常规性的 F12 查看源码,并没有找到什么有用的信息,测试一波 .svn 和 .git 的源码泄露,仍然并没有什么有用的信息,遂放弃。

自闭一段时间后,观察到url index2.php 觉得可能有问题,然后尝试访问 index.php ,重定向回了 index2.php ,于是改用BP截包,得到 index.php 返回如下:


CTF题解记录-web篇【持续更新】

访问 uploadsomething.php ,令人熟悉的表单映入眼帘,随意输入后显示:


CTF题解记录-web篇【持续更新】
CTF题解记录-web篇【持续更新】

估计是一个路径构造,写了php一句话webshell并没有连上,试着访问了一下返回 Too Slow ,根据标题和该返回猜测是一个 时间竞争 ,同时观察到不同提交返回的base64的路径是相同的,那么可以写脚本去构造路径并读取。

然而……


CTF题解记录-web篇【持续更新】

脚本都是 Too Slow !这不合理啊!后来用BP Intruder持续抓包,获得 flag ,至于脚本比BP慢这实在没有想到。


CTF题解记录-web篇【持续更新】
2. welcome to bugkuctf

bugkuctf: http://123.206.87.240:8006/test1/

php协议->文件包含->php反序列化

这是一道硬核题。

常规 F12 得到源码:


CTF题解记录-web篇【持续更新】

尝试直接访问 hint.php 无果,注意到源码中文件包含函数 file_get_contents() ,

我们可以利用php协议操作数据流的方法,将字符串构造文件利用 php://input 上传 $user ,再利用 php://filter 获取返回的数据里,相关参考PHP官方文档: http://php.net/manual/zh/wrappers.php.php 。

php://filter 相关信息:


CTF题解记录-web篇【持续更新】

利用这个方法我们可以这样构造 payload :


CTF题解记录-web篇【持续更新】

从何获得 index.php 和 hint.php 的源码 base64 :


CTF题解记录-web篇【持续更新】
CTF题解记录-web篇【持续更新】

继续代码审计。


CTF题解记录-web篇【持续更新】
CTF题解记录-web篇【持续更新】

观察得到这是一个php反序列化漏洞,利用在 hint.php 中得到的类名为 Flag ,使用的是 __toString 魔法函数,由此我们可以构造反序列化 payload 为 O:4:"Flag":1:{s:4:"file";s:8:"flag.php";} ,

并得到 flag :


CTF题解记录-web篇【持续更新】
3. never give up

bugkuctf: http://123.206.87.240:8006/test/hello.php

php任意文件读取->解码*3->字符截断

这道题比较逗逼。

常规 F12 得到两行代码,带入注释里的 1p.html 发现重定向到了BugkuCTF的首页,于是Postman抓包得到如下结果:


CTF题解记录-web篇【持续更新】
URL解码一把梭!
CTF题解记录-web篇【持续更新】
base64解码一把梭!
CTF题解记录-web篇【持续更新】
又是URL?一把梭!
CTF题解记录-web篇【持续更新】

经过三次大起大落的编码转化,最后得到源码:


CTF题解记录-web篇【持续更新】

注意到代码中有两处矛盾:

$id 即是0又不是0 $b 的首位字符必须是 4 又不能是 4

对于前者,我们采用php的松散比较,利用 'aaa' == 0 的特性绕过,对于后者,我们采用字符截断(对于php版本的判断可以利用 $data 实现,这里已经确定是可截断的了)

那么!那么!那么!

就阔以构造粗配楼德 payload :

id=aaa&a=php://input&b=%00abcde

得到 flag :


CTF题解记录-web篇【持续更新】

似乎安排得明明白白…直到我看到其他大佬的wp…


CTF题解记录-web篇【持续更新】

我的表情:


CTF题解记录-web篇【持续更新】

看来似出题人忘记屏蔽了,不然这题也是小硬核。


Viewing all articles
Browse latest Browse all 12749

Latest Images

Trending Articles





Latest Images