安全矩阵

 找回密码
 立即注册
搜索
楼主: only

曾玉芳学习日记

[复制链接]

16

主题

99

帖子

543

积分

高级会员

Rank: 4

积分
543
 楼主| 发表于 2020-7-12 22:26:17 | 显示全部楼层
本帖最后由 only 于 2020-7-12 22:32 编辑

7月12日:
dvwa之文件包含

一、文件包含与漏洞
文件包含:
  开发人员将相同的函数写入单独的文件中,需要使用某个函数时直接调用此文件,无需再次编写,这种文件调用的过程称文件包含。
文件包含漏洞:
  开发人员为了使代码更灵活,会将被包含的文件设置为变量,用来进行动态调用,从而导致客户端可以恶意调用一个恶意文件,造成文件包含漏洞。
二、文件包含漏洞用到的函数
require:找不到被包含的文件,报错,并且停止运行脚本。
include:找不到被包含的文件,只会报错,但会继续运行脚本。
require_once:与require类似,区别在于当重复调用同一文件时,程序只调用一次。
include_once:与include类似,区别在于当重复调用同一文件时,程序只调用一次。
三、目录遍历与文件包含的区别
  目录遍历是可以读取web目录以外的其他目录,根源在于对路径访问权限设置不严格,针对本系统。
  文件包含是利用函数来包含web目录以外的文件,分为本地包含和远程包含。
四、文件包含特征
?page=a.php
?home=b.html
?file=content
检测方法
?file=../../../../etc/passwd
?page=file:///etc/passwd
?home=main.cgi
?page=http://www.a.com/1.php
http://1.1.1.1/../../../../dir/file.txt

五、DVWA练习
1.修改php.ini配置文件开启文件包含功能
allow_url_include = on
将DVWA的级别设置为low
1.分析源码,可以看到没有对page参数做任何过滤
本地文件包含
2.尝试利用文件包含
2.1绝对路径
文件包含时,不管包含的文件是什么类型,都会优先尝试当作php文件执行,如果文件内容有php代码,则会执行php代码并返回代码执行的结果,如果文件内容没有php代码,则把文件内容打印出来
文件内容没有php代码,把文件内容打印(显示)到浏览器页面
2.2相对路径
3.使用php封装协议读取和写入php文件
3.1读取文件
php://filter/read=convert.base64-encode/resource=..././..././..././..././1.txt 访问,可以看到显示了base64编码的内容
使用burpsuit的decode模块解码
3.2写入php文件,下图可以看到输入的内容并返回结果
远程文件包含
1.通过http协议包含本地服务器上的文件
2.通过http协议包含远程服务器上的文件


回复

使用道具 举报

16

主题

99

帖子

543

积分

高级会员

Rank: 4

积分
543
 楼主| 发表于 2020-7-13 22:18:05 | 显示全部楼层
本帖最后由 only 于 2020-7-13 22:20 编辑

7月13日:
dvwa之xss


XSS,全称Cross Site Scripting,即跨站脚本攻击,某种意义上也是一种注入攻击,是指攻击者在页面中注入恶意的脚本代码,当受害者访问该页面时,恶意代码会在其浏览器上执行,需要强调的是,XSS不仅仅限于JavaScript,还包括flash等其它脚本语言。根据恶意代码是否存储在服务器中,XSS可以分为存储型的XSS与反射型的XSS。
DOM型的XSS由于其特殊性,常常被分为第三种,这是一种基于DOM树的XSS。例如服务器端经常使用document.boby.innerHtml等函数动态生成html页面,如果这些函数在引用某些变量时没有进行过滤或检查,就会产生DOM型的XSS。DOM型XSS可能是存储型,也有可能是反射型。


反射型XSS
下面将对四种级别的代码进行分析
Low服务器核心代码


  1. <?php
  2. header ("X-XSS-Protection: 0");
  3. // Is there any input?
  4. if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
  5.     // Feedback for end user
  6.     echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
  7. }
  8. ?>
复制代码

可以看到,代码直接饮用了name参数,并没有任何的过滤和检查,存在明显的XSS漏洞。
漏洞利用
输入<script>alert(/xss/)</script>,成功弹框

存储型XSS
接下来对四种级别的代码进行分析

Low级别服务器核心代码
  1. <?php
  2. if( isset( $_POST[ 'btnSign' ] ) ) {
  3.     // Get input
  4.     $message = trim( $_POST[ 'mtxMessage' ] );
  5.     $name    = trim( $_POST[ 'txtName' ] );

  6.     // Sanitize message input
  7.     $message = stripslashes( $message );
  8.     $message = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $message ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));

  9.     // Sanitize name input
  10.     $name = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $name ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));

  11.     // Update database
  12.     $query  = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );";
  13.     $result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );

  14.     //mysql_close();
  15. }

  16. ?>
复制代码

相关函数介绍
trim(string,charlist)
函数移除字符串两侧的空白字符或其他预定义字符,预定义字符包括、\t、\n、\x0B、\r以及空格,可选参数charlist支持添加额外需要删除的字符。
mysql_real_escape_string(string,connection)
函数会对字符串中的特殊符号(\x00,\n,\r,\,‘,“,\x1a)进行转义。
stripslashes(string)
函数删除字符串中的反斜杠。
可以看到,对输入并没有做XSS方面的过滤与检查,且存储在数据库中,因此这里存在明显的存储型XSS漏洞。
漏洞利用
message一栏输入<script>alert(/xss/)</script>,成功弹框








回复

使用道具 举报

16

主题

99

帖子

543

积分

高级会员

Rank: 4

积分
543
 楼主| 发表于 2020-7-14 22:01:33 | 显示全部楼层
本帖最后由 only 于 2020-7-14 22:18 编辑

7月14日:
php复习

1.PHP include 和 require 语句
通过 include 或 require 语句,可以将 PHP 文件的内容插入另一个 PHP 文件(在服务器执行它之前)。
include 和 require 语句是相同的,除了错误处理方面:
require 会生成致命错误(E_COMPILE_ERROR)并停止脚本
include 只生成警告(E_WARNING),并且脚本会继续
因此,如果您希望继续执行,并向用户输出结果,即使包含文件已丢失,那么请使用 include。否则,在框架、CMS 或者复杂的 PHP 应用程序编程中,请始终使用 require 向执行流引用关键文件。这有助于提高应用程序的安全性和完整性,在某个关键文件意外丢失的情况下。
包含文件省去了大量的工作。这意味着您可以为所有页面创建标准页头、页脚或者菜单文件。然后,在页头需要更新时,您只需更新这个页头包含文件即可。
语法:
  1. include 'filename';
复制代码

  1. require 'filename';
复制代码
2.PHP 操作文件
PHP readfile() 函数
readfile() 函数读取文件,并把它写入输出缓冲。


PHP 文件打开/读取/关闭
PHP Open File - fopen()
打开文件的更好的方法是通过 fopen() 函数。此函数为您提供比 readfile() 函数更多的选项。



PHP 读取文件 - fread()
fread() 函数读取打开的文件。
fread() 的第一个参数包含待读取文件的文件名,第二个参数规定待读取的最大字节数。

PHP 关闭文件 - fclose()
fclose() 函数用于关闭打开的文件。


PHP 文件权限
如果您试图运行这段代码时发生错误,请检查您是否有向硬盘写入信息的 PHP 文件访问权限。

PHP 写入文件 - fwrite()
fwrite() 函数用于写入文件。
fwrite() 的第一个参数包含要写入的文件的文件名,第二个参数是被写的字符串。



PHP 读取单行文件 - fgets()
fgets() 函数用于从文件读取单行。


PHP 检查 End-Of-File - feof()
feof() 函数检查是否已到达 "end-of-file" (EOF)。
feof() 对于遍历未知长度的数据很有用。


PHP 读取单字符 - fgetc()
fgetc() 函数用于从文件中读取单个字符。


PHP 创建文件 - fopen()
fopen() 函数也用于创建文件。也许有点混乱,但是在 PHP 中,创建文件所用的函数与打开文件的相同。
如果您用 fopen() 打开并不存在的文件,此函数会创建文件,假定文件被打开为写入(w)或增加(a)


PHP 覆盖(Overwriting)
如果现在 "newfile.txt" 包含了一些数据,我们可以展示在写入已有文件时发生的的事情。所有已存在的数据会被擦除并以一个新文件开始。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

16

主题

99

帖子

543

积分

高级会员

Rank: 4

积分
543
 楼主| 发表于 2020-7-18 23:12:54 | 显示全部楼层
linux命令

cd                   :cd不加路径表示进入家目录

cd+文件路径  :表示进入到你想打开的文件

pwd                :  表示展示你当前所在的路径

ls                    :展示你在当前路径下的所有文件名

touch+文件名 :例如touch 1.txt 表示新建一个名为1的txt文件

vi+文件名       :例如vi 1.txt表示打开名字为1的文件

i                      :表示开始编辑文件

esc  :wq       :esc就是键盘左上角的esc按钮,然后点冒号,注意试英文格式的冒号,后面跟上wq --表示保存并退出

esc   :q!     :这里的esc同上,这个表示不保存直接退出

go run +文件名:例如go run  1.txt表示运行名为1的文件

上面涉及到的+都是在后面跟上的意思,并不是要输入加号哦,记得加空格

mv 路径(需要剪切的文件) 路径(需要把剪切的文件存放的位置):例如把/A/a文件放到/B/LIN/ls/b里面,语法:mv /A/a  /B/LIN/ls/b

终端输入命令:sh jmeter  :启动jmeter命令

control +c :退出当前运行程序
回复

使用道具 举报

16

主题

99

帖子

543

积分

高级会员

Rank: 4

积分
543
 楼主| 发表于 2020-9-14 20:59:13 | 显示全部楼层
本帖最后由 only 于 2020-9-14 21:00 编辑

9月14日:

时隔很久又重新开始了忙碌的学习,回想暑假的学习生活真是不堪入目。当学长学姐在实验室忙碌的学习时,我在打暑假工…当然还是有把老师发的视频看过了的。既然开学了,现在就要把落下的一步一步补起来,emmm首先对接下来老师的安排进行了一个学习计划


今天是努力学习的第一天
主要把老师录制的sql注入系列视频复习了一遍,结合web安全的书进行更进一步的理解,跟着老师的视频进行了相关操作

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

16

主题

99

帖子

543

积分

高级会员

Rank: 4

积分
543
 楼主| 发表于 2020-9-25 21:07:38 | 显示全部楼层
本帖最后由 only 于 2020-9-25 21:09 编辑

9月25日:
php文件上传
$_GET和$_POST接受的是表单数据$_FILES返回一个二维数组
  1. 第一维是表单里文件上传域name的值
  2. 第二维是有五个元素
  3.     [name] => 文件原名
  4.     [type] => 文件的 MIME 类型
  5.         主类型/子类型
  6.         image/jpeg
  7.         image/png
  8.         text/html
  9.         text/plain 普通文本文件.php .txt
  10.         application/x-rar-compressed .rar
  11.         application/zip  .rar  .zip
  12.         video/x-msvideo AVI文件 .avi
  13.     [tmp_name] => 临时的文件名
  14.     [error] =>
  15.         0 : 就表示上传成功,没有错误发生
  16.         1 : 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
  17.         2 : 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
  18.         3 : 文件只有部分被上传。
  19.         4 : 没有文件被上传。
  20.         6 : 找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进。
  21.         7 : 文件写入失败。PHP 5.1.0 引进。
  22.     [size] => 文件的大小(字节)
复制代码
处理上传的文件
php提供了两个函数来操作文件上传
1. is_uploaded_file($_FILES[‘tmp_name’]).
判断是否是通过POST方式上传上来的文件

move_uploaded_file($_FILES[‘tmp_name’], $path).
将上传上来的文件,移动到指定位置
成功返回 true 失败 ,返回 false

实例
单文件上传

html
  1. <form action="1.php" method="post"enctype="multipart/form-data">
  2.         <input type="hidden" name="MAX_FILE_SIZE" value="10485760">
  3.         <input type="file" name="myfile1">
  4.         <input type="submit" value="提交">
  5.     </form>
复制代码
php
  1. <?php
  2. header("content-type:text/html;charset=utf-8");
  3. date_default_timezone_set('PRC');
  4. //echo "<pre>";
  5. //print_r($_FILES);die;

  6. function uploadFile($file = "myfile",$size = 10485760,$type = array('image','text'),$uploads = "./uploads")
  7. {
  8. //判断表单是否为空
  9.     if(empty($_FILES)){
  10.         echo "请检查表单属性";
  11.         return false;
  12.     }
  13.     $fileName = $_FILES[$file]['name'];//文件名
  14.     $tmpName = $_FILES[$file]['tmp_name'];//临时存放的目录
  15.     $fileError = $_FILES[$file]['error'];
  16.     $fileType = $_FILES[$file]['type'];
  17.     $fileSize = $_FILES[$file]['size'];

  18.     if($fileError>0){
  19.         switch($fileError){
  20.             case 1:
  21.                 echo "上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值";
  22.                 break;
  23.             case 2:
  24.                 echo "上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值";
  25.                 break;
  26.             case 3:
  27.                 echo "文件只有部分被上传";
  28.                 break;
  29.             case 4:
  30.                 echo "没有文件被上传";
  31.                 break;
  32.             case 6:
  33.                 echo "找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进";
  34.                 break;
  35.             case 7:
  36.                 echo "文件写入失败。PHP 5.1.0 引进";
  37.                 break;
  38.         }
  39.     }
  40.         //判断类型
  41.         list($maintype)=explode('/',$fileType);
  42.         if(!in_array($maintype,$type)){
  43.             echo "文件类型错误";
  44.             return false;
  45.         }
  46.         //判断大小
  47.         if($fileSize > $size){
  48.             echo "文件超出限制大小";
  49.             return false;
  50.         }
  51.         $ext = pathinfo($fileName,PATHINFO_EXTENSION);//类型
  52.         $saveName = date('Ymd').uniqid().mt_rand(1,100).'.'.$ext;
  53.         //生成保存路径
  54.         $path = rtrim($uploads,'/')."/".date('Y/m/d');
  55.         if(!file_exists($path)){
  56.             mkdir($path,0777,true);
  57.         }
  58.         $saveFile = $path .$saveName;
  59.         if(move_uploaded_file($tmpName,$saveFile)){
  60.             echo "上传成功";
  61.             return $saveFile;
  62.         }else{
  63.             echo "上传失败啊";
  64.             return false;
  65.         }
  66. }
  67. echo uploadFile('myfile1');
复制代码




回复

使用道具 举报

16

主题

99

帖子

543

积分

高级会员

Rank: 4

积分
543
 楼主| 发表于 2020-9-26 20:52:15 | 显示全部楼层
9月26日:
今天主要对老师布置的ppt任务开始完成!暂无其他学习
回复

使用道具 举报

16

主题

99

帖子

543

积分

高级会员

Rank: 4

积分
543
 楼主| 发表于 2020-9-27 22:00:37 | 显示全部楼层
本帖最后由 only 于 2020-9-27 22:08 编辑

9月27日:

“按理19级的水平要开始升级了”
听到老师说的这句话,还是好好反思了一下自己这么久的学习,的确该提升了!接下来的学习安排是进行系统化学习CTF

首先学习的是linux系统安全相关系列视频,今天主要的任务是了解了一下Linux操作系统的一些相关知识

1.Linux文件系统

首先我们要了解到的一个基本概念就是:一切都是文件。即使是硬件在Linux系统中也是看成一个文件的,我们可以通过读写文件对硬件进行访问

Linux系统在启动时第一个挂载的是根文件系统也就是“/”。那么接下来我们来对二级目录进行一些说明:




以下是对三级目录的一些介绍:


我们来对系统内的一些重要配置文件进行相关的介绍:
1./ect/password
首先我们来看一个例子

第一个字段test表示用户名;
x:表示密码;
第一个501:表示用户的uid,一般情况下root为0-499的情况下是系统默认账号的uid值,500-6535是用户可登录的uid值
第二个501:表示用户使用的GID
Test user:表示用户全名
/home/test:表示用户主目录
/bin/bash:表示用户shell

系统的默认账号和一些uid值如下表所示:

2./etc/shadow
还是一个例子:

Test:表示用户名
第二个字段代表密码
14780:表示最后一次修改密码的时间
0:表示密码使用天数
99999:表示密码前几天提醒次数

这边我们需要补充一个知识是关于shadow文件的


2.Linux系统的基本操作


关于linux文件安全管理操作,我们了解一下相关防范方式,有三种类别分别是:拥有人拥有组和其他人,这三种权限分别是可读可写可执行

以下是用户安全管理操作:


Linux操作系统是一个多用户操作系统,执行w命令可以确定当前哪些用户已经登陆系统





  



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

16

主题

99

帖子

543

积分

高级会员

Rank: 4

积分
543
 楼主| 发表于 2020-9-28 22:44:54 | 显示全部楼层
本帖最后由 only 于 2020-9-28 22:54 编辑

9月28日:

1.Linux系统常规安全配置
在linux系统中,可以通过ls-l可以查看目录和文件的权限情况,但是如果对每个文件都进行这种操作,会比较繁琐,因此我们会使用umask的值来操作

Bash命令可以记录下你操作过的命令,通过修改histfilesize的值来保留历史命令的条数以增强系统的安全性

Root环境变量path的值让我们在执行命令时不用通过绝对命令进行只需通过输入命令名即可,但是有时候为了方便调试脚本,root系统会将点加入到path环境中,点代表的是当前目录,这样会使系统安全化

2.账户安全
1.禁用无用账号

2.账号策略

3.检查特殊账号

4.口令周期策略

5.口令复杂度策略

6.限制root用户远程登录

7.检查Grub/Lilo密码

8.SNMP团体字

9.
  

3.linux系统安全服务进程配置
常见服务及端口:

首先检查ssh值






  





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

16

主题

99

帖子

543

积分

高级会员

Rank: 4

积分
543
 楼主| 发表于 2020-11-15 16:12:23 | 显示全部楼层
本帖最后由 only 于 2020-11-15 16:20 编辑

11月15日:
awd

时隔这么多天,我又又又开始写日记了!
经过这两天的“深造”,终于对awd了解了皮毛
什么是awd?
官方来说:攻防兼备AWD模式是一种综合考核参赛团队攻击、防御技术能力、即时策略的比赛模式。在攻防模式中,参赛队伍分别防守同样配置的虚拟靶机,并在有限的博弈时间内,找到其他战队的薄弱环节进行攻击,同时要对自己的靶机环境进行加固防守。

但简单来说,awd就是拼手速,靠的是反应能力

一般来说参与awd的每个队伍有三个成员,一个人来攻击剩下两个人都是防守人员。在比赛过程中,主办方一般会在每个队伍的主机中放几个木马,每个主机都是如此。其实在整场比赛中比较关键的点就在这里,刚开始的时候需要手速十分快找到自己主机上隐藏的木马,然后删除木马,接着去对手主机找到木马,并且连接木马找到flag,然后在对手主机上注入一个不死马,如果做到了这一步,基本整场比赛就可以获胜了。但其实这样成功的比较少,主要还是通过文件上传和命令注入两个方式找到对手主机上的flag,然后提交,但是如果是大佬的话,就会采取更牛逼的方式批量提交flag,这就需要我们有一定的python基础了,之后的时间里可以熟悉一下这方面的内容。
awd小练
在对awd有了基本的了解之后,接下来就通过实际操作来熟悉一下它

首先,我们通过mopaxterm来连接我们自己的主机



输入用户名:root,密码:windows2000(其实就是linux的账号密码),进去之后我们返回到根目录,就可以看到我们所有的文件


按照我们之前的思路,我们首先应该找到自己主机上存在的木马,在linux系统里面,一般来说,是存在var->www->html文件里面,我们点开果然可以看见一个muma文件夹,里面存在几个php文件应该就是木马

那么在删除这两个木马文件之后我们借助一个工具——中国蚁剑来连接对手主机的木马
首先,用蚁剑来扫描,看看在哪些主机上仍存在这些木马
我们以端口为196的主机为例来测试
我们找到和我们主机对应目录相同目录下,我们仍能看见内两个木马存在


那么接下来就是连接其木马,然后上传自己的木马上去,由于没有不死马因此我们上传一个没有密码的木马上去

右键->加载插件->默认分类->生成shell,然后便会自动生成一段木马,然后我们存为本地PHP文件之后回到之前的木马目录右键上传文件就可以把自己的木马上传到对方主机上去了 然后再找到对应的flag文件上传flag,这样只要对方没有把我们上传的木马删除就可以持续提交flag了

当然,当我们发现我们找到的木马都被对手找到之后,我们就只能一边继续找我们主机存在的木马,然后我们之前提到,队伍中还有一个攻击者,攻击者要做的就是找到漏洞然后通过漏洞获取flag

接下来我们通过靶场上面的文件下载漏洞去获取flag,我们用到的是pikachu靶场
根据提示,我们点击任意球员的名字下载文件


当我们下载的时候,我们可以发现我们提交了一个get请求,我们可以通过修改后面的参数从而找到根目录下面的flag
  1. http://192.168.1.152/pikachu-master/vul/unsafedownload/execdownload.php?filename=../../../../../../../flag
复制代码


最后我们直接下载flag文件通过记事本打开就可以获得flag!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-28 02:35 , Processed in 0.025892 second(s), 17 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表