【每日一题】--Writeup
【每日一题】
这是每日一题打卡计划的Writeup,主要为Writeup和对题目的简略思考QAQ
DAY–001
easyphp[*]
这里选择的第一题是攻防世界里江苏工匠杯的一道web题
解题过程
获取容器,访问链接,能够直接获取题目主要源码
1 |
|
首先找到直观的$flag
,发现获取条件是需要$key1 && $key2
,同时包含"Hgfks.php"
接下来回到源码主体,找$key1 && $key2
的条件。能够看到都需要等于1。
首先来看$key1被赋值为1的条件
1 | if(isset($a) && intval($a) > 6000000 && strlen($a) <= 3){ |
这里是对a和b的一些条件限制,首先intval($a)
这里没有对a进行限制,默认a是10进制数,主要是后面的> 6000000 && strlen($a) <= 3
,大于6e6且长度小于3,这里可以直接用科学记数法直接bypass,a=7e7即可。
接下来看对b的限制,isset($b) && '8b184b' === substr(md5($b),-6,6)
不为空,且md5值的后六位为8b184b,这里可以上一个hash爆破的脚本
1 | import random |
这里爆破出来是
所以,b=368400238809
至此,key1=1的条件都满足,做个测试
接下来看key2=1的条件:
1 | $c=(array)json_decode(@$_GET['c']); |
首先看对c的条件限制is_array($c)
\$c=(array)json_decode(@$_GET['c'])
,c为数组类型,且是双数组同时c在GET请求前会被json编码一次。。
对m的限制!is_numeric(@$c["m"]) && $c["m"] > 2022
,来看一下
!is_numeric()
函数的限制特点,限制返回的数不为数字和数字字符串。且m的值还得被解析为大于2022的整数。在php中字符串和与数字相比较是会被强制转化为整型,所以这里可以用“2023TWe1v3”来进行比较,会被转化为“2023”与“2022”相比较,满足m的条件了。
**小tip—>这里做个test:
1 |
|
m=1234 false
m=1234a true
【回归正题】
对n的限制if(is_array(@$c["n"]) && count($c["n"]) == 2 && is_array($c["n"][0]))
,变量n必须为数组且有两个。
往下跟array_search("DGGJ", $c["n"])
这里的array_search()是在数组变量n中匹配“DGGJ”,匹配到返回TRUE,反之返回FALSE。同理和弱类型比较相近似,在php中字符串和与数字相比较是会被强制转化为整型,“DGGJ”转化为整形就是0,所以到这儿就可以完成了
构建最后的payload:
1 | ?a=7e7&b=368400238809&c={"m":"2023TWe1v3","n":[[0],0]} |
DAY–002
[HNCTF 2022 Week1]easy_upload[*-]
前言
今天感染了奥密克戎,一直在发烧,很迷糊,说话也是有气无力的,就浅浅的拿新生赛的题来水几天‘‘‘‘’’’’
解题过程
打开链接,先简单测试一下上传的黑名单,上传一个1.php内容是:
1 | phpinfo(); |
发现无过滤且能直接执行php文件,直接写一句话木马
1 | echo("123");@eval($_GET['TW']); |
结:这题纯面向新生,没有什么知识点的考察,一句话木马的编写,RCE命令执行。
DAY–003
[XCTF2016]Cat [**+]
解题过程
首先能够测试到这儿有一个curl能够ping通本地127.0.0.1
就以为是拼接命令执行,试了半天都没回显
开始手动fuzz(ps:)不想用bp哈哈哈)
不停的输入测试可以发现能够解析十六进制的ASCII码值
可以试试超出ASCII编码范围看看解析是否报错%80
简单看一下报错回显,发现在报错回显泄露了数据库的绝对路径,使用@+绝对路径
可以直接访问,访问一下:
能够在大量报错回显中发现flag
构建最后的payload:
1 | ?url=@/opt/api/database.sqlite3 |
DAY–004
[WDCTF]4-1 [*]
解题过程
binwalk -e ./
分离出图片中的压缩包,解压后根据tips.txt提示第二张比第一张图片多一些东西,可大概推断出这是盲水印隐写,github上找BlindWaterMark-master,运行脚本即可。
DAY–005
【略】
DAY–006
【略】
DAY–007
[NISACTF 2022]popchains [***]
前言
1 | __invoke():当尝试以调用函数的方式调用对象的时候,就会调用该方法 |