Ahodor'Via


  • Home

  • Tags

  • Categories

  • Archives

  • Search

DVWA-File_Inclusion

Posted on 2018-07-29

Vulnerability: File Inclusion

Intruduce

File Inclusion,意思是文件包含(漏洞):

产生原因:

由于开发人员编写源码时,要将重复使用的代码插入到单个的文件中,并在需要时调用这段代码;而由于并未对代码中存在文件包含的函数入口做过滤,导致客户端可以提交恶意代码到服务器并执行。

文件包含漏洞是“代码注入”的一种,其原理就是注入一段用户能控制的脚本或代码,并让服务端执行。“代码注入”的典型代表就是文件包含,文件包含漏洞可能出现在JSP、PHP、ASP等语言中。

利用条件

若要成功利用文件包含漏洞进行攻击,需要满足以下两个条件:
Web应用采用include/require()等文件包含函数通过动态变量的方式引入需要包含的文件

用户能够控制该动态变量

本地文件包含(利用前提)
1、相关函数内的参数可控
远程文件包含(利用前提)
1、相关函数内的参数可控
2、allow_url_fopen = On

当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include(),require()和include_once(),require_once())利用url去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。文件包含漏洞分为本地文件包含漏洞与远程文件包含漏洞,远程文件包含漏洞是因为开启了php配置中的allow_url_fopen选项(选项开启之后,服务器允许包含一个远程的文件)。

常见利用方式

PHP包含漏洞结合上传漏洞;
PHP包含读文件;
PHP包含写文件;
PHP包含日志文件;
PHP截断包含;
PHP内置伪协议利用。
Read more »

DVWA-CSRF

Posted on 2018-07-26

Introduction

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

跨站脚本(XSS)与跨站请求伪造(CSRF)区别

XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。CSRF与XSS最大的区别就在于,CSRF并没有盗取cookie而是直接利用。

Read more »

DVWA-Brute_Force

Posted on 2018-07-23

Vulnerability: Brute Force

Low

image

源代码

<?php

if( isset( $_GET[ 'Login' ] ) ) {
    // Get username
    $user = $_GET[ 'username' ];

    // Get password
    $pass = $_GET[ 'password' ];
    $pass = md5( $pass );

    // Check the database
    $query  = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";
    $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>' );

    if( $result && mysqli_num_rows( $result ) == 1 ) {
        // Get users details
        $row    = mysqli_fetch_assoc( $result );
        $avatar = $row["avatar"];

        // Login successful
        echo "<p>Welcome to the password protected area {$user}</p>";
        echo "<img src=\"{$avatar}\" />";
    }
    else {
        // Login failed
        echo "<pre><br />Username and/or password incorrect.</pre>";
    }

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

?> 

分析

正常的登入界面,没有验证码和次数限制,没有任何放爆破机制,且存在SQL注入。

漏洞利用

使用Burpsuit爆破
1、brupsuit抓包右键发送到Intruder
2、Attack type 选 Cluster bomb
cluster bomb - 每个变量对应一个字典,并且进行交叉式破解,尝试各种组合。适用于用户名+密码的破解

image

3、对应变量加$
4、设置payload

image

5、结果

image

image

Read more »

DVWA-XSS

Posted on 2018-07-08

XSS(Cross-Site Script)

原理

攻击者将恶意代码插入到web页面,若服务器端未进行有效过滤,当用户浏览该页面时,插入的代码就会在用户的浏览器中执行

攻击发生在客户端,攻击目标是最终用户的浏览器

恶意代码通常为:危险的HTML标签、客户端脚本、能执行JS的容器等

存在用户输入点的位置,都可能存在跨站漏洞

分类

DOM型:

页面本身包含一些DOM对象的操作,如果未对输入的参数进行处理,可通过改变DOM结构形成XSS

反射型:

用户输入的数据(html或js代码)经服务端反射回客户端,反射后让浏览器去执行

image

存储型:

恶意的脚本代码存储在服务端(文件或数据库),正常用户请求时,站点从数据库中读取了相应的非法数据,并展示在当前页面

image

Read more »

Wargame-XSS-game

Posted on 2018-07-04

Wargame-XSS-game

http://www.xssgame.com/

Level 1:Hello,world of XSS

提示部分

任务描述

此级别演示了跨站点脚本的常见原因,其中用户输入直接包含在页面中而没有正确转义。 与下面的易受攻击的应用程序窗口交互,找到一种方法使其执行您选择的JavaScript。您可以在易受攻击的窗口内执行操作或直接编辑其URL栏。

使命目标

注入脚本以alert()在下面的框架中弹出JavaScript 。

一旦显示警报,您就可以进入下一级别。
你的目标

测试

在输入框中随便输入 test 后得到

https://xss-game.appspot.com/level1/frame?query=test
  • URL变化
  • 页面重新加载
  • 测试的字符内容被一起加载到页面中

其中URL结尾的?query= 后面的内容与我们输入的是一致的(输入输出相同)

payload

<script>alert("test")</script>

执行成功

https://xss-game.appspot.com/level1/frame?query=<script>alert("test")</script>
Read more »

sqli-labs-Summarize-Less-1-22_Basic-Injections

Posted on 2018-07-04

sqli-labs-Summarize-Less-1-22(Basic-Injections)

重要的系统数据库

mysql.user 存储MySQL数据库的用户及用户权限信息
and (select count(*) from mysql.user)> 判断是否具有读写权限

information_schema.user_privileges存储mysql中所有数据库的权限信息

information_schema.schemate 存储mysql中所有的数据库
遍历查询系统中所有数据库名
select schema_name from information_schema.schemata limit 0,1

information_schema.tables 存储mysql中所有数据库的表
遍历查询数据库中所有的表名
select table_name from information_schema.tables where table_schema='security' limit 0,1

information_schema.columns存储mysql中所有数据库的列
遍历查询表中所有的列名
select column_name form information_schema.columns where table_name='users' limit 0,1

遍历查询表中的数据
select password from security.users limit 0,1

常用操作

常用语句

select 用于输出信息

select 列名|(数字|字符串|函数)as 别名(as可以省略)[from ...]

union 联合操作符,要求前后列数相同,数据类型相差不大

group by 分组

order by 排序,常用于猜解字段数

order by 列名|序列号 

sql的switch语句

case expr when a then a** when b then b* else c* end 

if 函数,当expr1为真返回expr2否则返回expr3

if(expr1,expr2,expr3) 

常用函数(获取系统信息)

system_user()        /*系统用户名
user()               /*用户名
current_user()       /*当前用户名
session_user()       /*连接数据库的用户名
database()           /*数据库名
version()            /*MYSQL数据库版本
load_file()          /*MYSQL读取本地文件的函数
@@datadir            /*读取数据库路径
@@basedir MYSQL      /*安装路径
@@version_compile_os /*操作系统
Read more »

sqli-labs-Less-17-22

Posted on 2018-04-26

Less-17 POST-Updata Query-Error Based-String

基于错误的更新查询post字符注入

测试

页面显示 PASSWORD RESET 重置密码

uname=test&passwd=test2返回页面显示重置错误
uname=admin&passwd=test2返回页面显示重置密码成功

应该是用户名正确即可重置密码

Read more »

sqli-labs-Less-11-16

Posted on 2018-04-23

Less-11 POST - Error Based - Single quotes - String

基于报错的单引号字符注入

如何绕过身份验证登入进去?万能密码登入
常用万能密码

asp、aspx
1:   "or "a"="a
2: ')or('a'='a
3:or 1=1--
4:'or 1=1--
5:a'or' 1=1--
6: "or 1=1--
7:'or'a'='a
8: "or"="a'='a
9:'or''='
10:'or'='or'
11: 1 or '1'='1'=1
12: 1 or '1'='1' or 1=1
13: 'OR 1=1%00
14: "or 1=1%00
15: 'xor
16: 新型万能登陆密码
用户名 ' UNION Select 1,1,1 FROM admin Where ''=' (替换表名admin)
密码 1
Username=-1%cf' union select 1,1,1 as password,1,1,1 %23
 Password=1
 17..admin' or 'a'='a 密码随便

PHP万能密码
'or'='or' 
'or 1=1/* 字符型 GPC是否开都可以使用
User: something
Pass: ' OR '1'='1

jsp 万能密码 
1'or'1'='1
admin' OR 1=1/*
用户名:admin 系统存在这个用户的时候 才用得上
密码:1'or'1'='1
Read more »

sqli-labs-Less-8-10

Posted on 2018-04-22

Less-8 GET-Blind-Boolian Based - Single Quotes

布尔型单引号GET盲注

盲注

当不能通过直接显示来获取数据库数据时,使用盲注的方式,根据其返回页面的不同来判断信息(页面内容不同,响应时间);一般分为布尔型盲注,时间性盲注,报错盲注。

盲注常用函数

函数 功能
length(str) 返回str字符串的长度。
substr(str, pos, len) 将str从pos位置开始截取len长度的字符进行返回。注意这里的pos位置是从1开始的,不是数组的0开始
mid(str,pos,len) 跟上面的一样,截取字符串
ascii(str) 返回字符串str的最左面字符的ASCII代码值。
ord(str) 同上,返回ascii码
if(a,b,c) a为条件,a为true,返回b,否则返回c,如if(1>2,1,0),返回0
select database() 查询数据库
ascii(substr((select database()),1,1)) 返回数据库名称的第一个字母,转化为ascii码
ascii(substr((select database()),1,1))>64 ascii大于64就返回true,if就返回1,否则返回0

常见的ASCII,A:65,Z:90 a:97,z:122, 0:48, 9:57

Read more »

sqli-labs-Less-5-7

Posted on 2018-04-20

Less-5 GET- Double Query-Single Quotes -String

基于get请求的双查询的单引号字符型注入

什么叫双查询?

双查询又可以叫做嵌套子查询,相当于在select语句中还有一个select语句,而里面的select语句称为子查询

select(select)

双查询你注入

当在一个聚合函数,比如count函数后面如果使用分组语句就会把查询的一部分以错误的形式显示出来。

函数 功能
count(*) 统计表中所有记录的个数
count(列名) 统计一列中值的个数,其中重复的记录也会被当做有效的记录。
count(distinct 列名) 统计一列中值的个数,其中重复的记录只会被记录一次。
sum(列名) 计算一列值的总和。
avg(列名) 计算一列值的平均值。
max(列名) 计算一列值中的最大值。
min(列名) 计算一列值中的最小值。
rand() 生成0-1之间的小数随机值
floor() 只返回整数部分,小数部分舍弃
round() 函数四舍五入,大于0.5的部分进位,不到则舍弃
concat() 连接函数,可以连接多个字符
group by 将结果以分组的形式返回

什么时候使用双查询注入?

适用于注入时没有显示位,但是在有显示位的时候同样适用,有显示位时不建议。
双查询注入语句的固定格式

union select 1 from (select+count(*),concat(floor(rand(0)*2),( 注入爆数据语句))a from information_schema.tables group by a)b
Read more »
123

Ahodor

22 posts
17 tags
© 2018 Ahodor
本站访客数: