A1 -Injection

HTML Injection - Reflected(GET)

low 级别

low级别意味着没有任何检查输入·<h1>This is a test</h1>·,可以看到可以被完整解析到页面上

输入<meta http-equiv="refresh" content='0; url=https://xxx:xxx/portal.php

medium 级别

进行和low级别相同操作

发现无法注入成功抓包可见cookie值有变化

查看源码app/htmli_get.php

进一步找到xss_check_1,在app/functions_external.php中

可以看出medium级别的检查是先将输入的<>转为html字符实体&lt和&gt然后对输入解码这里可以看到bwapp提供了三个例子<script>alert(0)</script>%3Cscript%3Ealert%280%29%3C%2Fscript%3E //这是对<script>alert(0)</script>的一次编码%253Cscript%253Ealert%25280%2529%253C%252Fscript%253E //这是对<script>alert(0)</script>的二次编码不难得出解决办法是输入编码后的代码这里就不放图了

high 级别

运行和medium相同操作,也是无法注入成功,查看代码发现是带有ENT_QUOTES参数的htmlspecialchars()函数,暂时没想到办法

HTML Injection - Reflected(POST)

同GET方式

HTML Injection - Reflected (URL)

low 级别

抓包如图示,将编码部分更改即可

根据源码

也可以更改host

medium 级别

该问题似乎是在 Javascript 中运行的 DOM XSS 中的一个漏洞.它已在最近的浏览器中得到处理。现在的浏览器可以对URL中的<>字符进行编码,从而导致攻击失败.可以在老版本的IE中实现进攻.

high 级别

可以从源码看到再次使用了带有ENT_QUOTES参数的htmlspecialchars()函数,不可绕过.

HTML Injection - Stored (Blog)

low 级别

直接尝试注入,可行

medium&high 级别

尝试注入,发现没有被解析

查看源码 app/htmli_stored.php

function htmli($data){include("connect_i.php");switch($_COOKIE["security_level"]){case "0" :$data = sqli_check_3($link, $data);break;case "1" :$data = sqli_check_3($link, $data);// $data = xss_check_4($data);break;case "2" :$data = sqli_check_3($link, $data);// $data = xss_check_3($data);break;default :$data = sqli_check_3($link, $data);break;}return $data;}

// app/functions_external.phpfunction xss_check_3($data, $encoding = "UTF-8"){// htmlspecialchars - converts special characters to HTML entities    // '&' (ampersand) becomes '&amp;'// '"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set// "'" (single quote) becomes '&#039;' (or &apos;) only when ENT_QUOTES is set// '<' (less than) becomes '&lt;'// '>' (greater than) becomes '&gt;'  return htmlspecialchars($data, ENT_QUOTES, $encoding);}

发现最终拦路关卡是 htmlspecialchars(),认输.

iFrame Injection

iframe是可用于在HTML页面中嵌入一些文件(如文档,视频等)的一项技术。对iframe最简单的解释就是“iframe是一个可以在当前页面中显示其它页面内容的技术”

通过利用iframe标签对网站页面进行注入,是利用了HTML标签,实际上就是一个阅读器,可以阅读通过协议加载的活服务器本地的文件、视频等

low 级别

尝试修改参数,成功

medium 级别

尝试low级别相同操作,果然不行

查看代码

function xss($data){switch($_COOKIE["security_level"]){case "0" :$data = no_check($data);break;case "1" :$data = xss_check_4($data);break;case "2" :$data = xss_check_3($data);break;default :$data = no_check($data);break;}return $data;}if($_COOKIE["security_level"] == "1" || $_COOKIE["security_level"] == "2"){?><iframe frameborder="0" src="robots.txt" height="<?php echo xss($_GET["ParamHeight"])?>" width="<?php echo xss($_GET["ParamWidth"])?>"></iframe><?php}else{?><iframe frameborder="0" src="<?php echo xss($_GET["ParamUrl"])?>" height="<?php echo xss($_GET["ParamHeight"])?>" width="<?php echo xss($_GET["ParamWidth"])?>"></iframe><?php}function xss_check_4($data){// addslashes - returns a string with backslashes before characters that need to be quoted in database queries etc.// These characters are single quote ('), double quote ("), backslash (\) and NUL (the NULL byte).// Do NOT use this for XSS or HTML validations!!!return addslashes($data);}

可以看到检测手法是addslashes()函数,而在iframe标签里,最后面的元素是ParamWidth,所以可以在宽度后附上payload,如图:

high 级别

老样子, htmlspecialchars()函数

LDAP Connection Settings

LDAP Lightweight Directory Access Protocol 轻量级目录访问协议

因为要安装环境,暂时略过

Mail Header Injection (SMTP)

注入原理:

邮件的结构,分为信封(MAIL FROM,RCPT TO),头部(From,To,Subject,CC,BCC等),主体(message),mail header injection,即针对头部的注入.使用telnet对25端口进行手工发邮件的过程的事后会发现,对于邮件头部的字段其实就是换行符0x0A或者0x0D0x0A分割,即\n或\r\n,所以就可以注入了.

由于bwapp邮件服务没设置好,这里也不演示了

OS Command Injection

low 级别

思路就是输入不止一条命令

可以用 ;,可以用 &,也可以用 |

另外,如果没有回显,可能是你的环境不支持nslookup命令

medium 级别

同 low 级别思路,发现只有 | 可以用.

查看代码

可以看到 commandi_check_1()&;替换了.

high 级别

escapeshellcmd()确保用户只执行一个命令

暂时无法注入

OS Command lnjection - Blind

low 级别

没有回显,通过时间盲注

medium 级别

同理,使用管道符即可

PHP Code Injection

low 级别

观察发现请求页面的message参数,尝试使用php函数作为参数

可以获取/etc/passwd文件的信息

猜测是使用了eval函数且未检查参数

medium&high 级别

上图可见移除了eval函数,且使用htmlspecialchars 来处理参数

Server-Side Includes (SSI) Injection

SSI是用于向HTML页面提供动态内容的Web应用程序上的指令。 它们与CGI类似,不同之处在于SSI用于在加载当前页面之前或在页面可视化时执行某些操作。 为此,Web服务器在将页面提供给用户之前分析SSI。

SSI基本格式<!-– 指令名称="指令参数">

由于环境不支持,就不演示了

SQL Injection

sql 注入分类

按照注入点类型分类

  • 数字型注入点

  • 字符型注入点

  • 搜索型注入点

按照http传递数据的方式分类

  • get 注入

  • post 注入

  • cookie 注入

  • http请求头注入

按照执行效果分类

  • 基于报错的注入

  • 布尔类型注入

  • 时间盲注

sql 注入的常见方法

  • 特殊字符

    • 比如分号(堆叠注入):
    
    select * from user where id = 1;delete from user
    • 比如注释符:
    
    # sleep(500)可对系统资源造成极大耗损select count(*) as num from game_score where game_id = 244 and version = '-1' or 3 and sleep(500)-- 注释掉可能对注入造成干扰的语句/*还有这种注释*/
    • 比如单引号: 1' or '1'='1
  • 针对黑名单过滤

    • sql 语句同义变形体

    • 双写绕过

  • 针对中间链环节如编码

    • 宽字节注入(去掉转义符)
  • 存储型注入,针对后端/数据库输入

    比如:用户名输入admin'#

一般步骤

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

  2. 猜解SQL查询语句中的字段数 (order by )

  3. 确定显示的字段顺序

  4. 获取当前数据库 (爆库)

  5. 获取数据库中的表 (爆表)

  6. 获取表中的字段名 (爆字段)

  7. 下载数据 (爆数据)

bwapp 中的 sql 注入

(GET/Search && GET/Select)

  • low

    payload: g%' union select 1,database(),3,5,4,6,7 -- 注意有个空格

    或者' and 1=0 union all select 1,table_name, column_name,4,5,6,7 from information_schema.columns where table_schema='bWAPP'#

  • medium

    又是addslashes()函数,此函数的作用是在预定义的字符前加上\进行转义,

    预定义字符有',",\,NULL

    数据库如果是GBK编码可以考虑宽字节注入

  • high

    采用mysql_real_escape_string()函数防御,此函数转义sql语句中的特殊字符,没有想到注入方法

(POST/Search & POST/Select)

基本和 GET 方式一样,多了一步抓包

(AJAX/JSON/jQuery)

  • low

    使用 GET 请求方式输入 url 并不能查询到数据,原因是没有经过页面 JS 的交互,

    可以看到禁用了 js 后无论输入什么内容都没有回显

    于是查看网页源代码

    可以看到是从sqli_10-2.php获取的 json 数据

    同样的,抓包也可以抓到:

    于是从sqli_10-2.php注入

    接下来和上面一样了

  • medium&high

    同上也是addslashes()mysql_real_escape_string()防御

(CAPTCHA)

在注入前需要输入验证码,除此之外和上面没有别的区别

(Login Form/Hero)

  • low

    先找注入点

    可以 SQL 注入

    猜测sql语句为

    
    select * from user where username=' $username 'and password=' $password ';

    于是构造payload为:

    用户名: ’ or 1=1#

    密码: 随义

  • medium&high

    同上也是addslashes()mysql_real_escape_string()防御

(Login Form/User)

  • low

    和上面一样的方法,发现并不能注入

    于是从头再来,先试试bee':

    看不到 password 的回显

    于是多测几次,发现密码无论输入什么,不会对显示有任何影响

    后续也尝试了一些方法,也不起作用,只能判断出字段数为9

    于是使用sqlmap

    成功获得数据库及表名

    接下来查看users表的内容

    查看用户名密码

  • medium&high

    无法注入

(SQLite)

  • SQLite介绍

    SQLite含有一张内置表“sqlite_master”,表里存储着type、name、tbl_name、rootpage、sql五个字段。

    |字段| 记录信息|

    |- |-|

    |type列 | 项目的类型,如table、index、view、trigger|

    |tbl_name| 所从属的表名,如索引所在的表名。对于表来说,该列就是表名本身;|

    |name | 项目的名称,如表名、索引名等;|

    |rootpage| 项目在数据库页中存储的编号。对于视图和触发器,该列值为0或者NULL|

    |sql | 存放着所有表的创建语句,即表的结构。|

  • low

    首先安装php sqlite模块:

    
    apt-get install sqlite3apt-get install php5-sqliteservice apache2 restart

    搜索 man,有三个结果,可见为模糊查询

    于是尝试注入:

    接下来常规操作:

    • 判断字段数: %' order by 6 --

    • 判断字段顺序: %' union select 1,2,3,4,5,6 --

    • 查表: %' union select 1,sqlite_version(),name,5,4,6 from sqlite_master --

    • 查字段: %' union select 1,sqlite_version(),sql,5,4,6 from sqlite_master --

    • 取值: %' union select 1,2,login,password,4,6 from users --

    • 解密

  • medium&high

    无法注入

Drupal SQL Injection (Drupageddon)

CVE-2014-3704

Drupal 是一款用量庞大的CMS,其7.0~7.31版本中存在一处无需认证的SQL漏洞。通过该漏洞,攻击者可以执行任意SQL语句,插入、修改管理员信息,甚至执行任意代码。

网络安全入门篇:bwapp靶场通关(更新ing)相关推荐

  1. 猴子都能懂得Git(入门篇汇总版)持续更新中~~~

    文章目录 前言 一.Git的基础 1.Git是什么? 2.管理历史记录的数据库 远程数据库和本地数据库 创建数据库 修改记录的提交 工作树和索引 2.安装Git 初期设定 新建数据库 提交文件 pus ...

  2. b转换成mb php_攻防世界之WEB篇,php反序列化漏洞,网络安全入门篇

    预备知识: PHP序列化和反序列化: serialize() //将一个对象转换成一个字符串 unserialize() //将字符串还原成一个对象 通过序列化与反序列化我们可以很方便的在PHP中进行 ...

  3. Python学习(1)——小甲鱼零基础入门python学习笔记(更新-ing)

    001讲 愉快的开始 1. Python的安装 此电脑-->右击-->检查电脑是32位还是64位 第二步:访问官网:http://www.python.org-->Downloads ...

  4. 适合入门自学服装裁剪滴书(更新ing)

    适合入门自学服装裁剪滴书(更新ing) [♣]适合入门自学服装裁剪滴书(更新ing) [♣]适合入门自学服装裁剪滴书(更新ing) 适合入门自学服装裁剪滴书(更新ing) 来自: 裁缝阿普(不为良匠, ...

  5. [网络安全提高篇] 一〇六.SQL注入之手工注入和SQLMAP入门案例详解

    当您阅读到该篇文章时,作者已经将"网络安全自学篇"设置成了收费专栏,首先说声抱歉.感谢这一年来大家的阅读和陪伴,这100篇安全文章记录了自己从菜鸡到菜鸟的成长史,该部分知识也花了很 ...

  6. [网络安全提高篇] 一〇四.网络渗透靶场Oracle+phpStudy本地搭建万字详解(SQL注入、XSS攻击、文件上传漏洞)

    当您阅读到该篇文章时,作者已经将"网络安全自学篇"设置成了收费专栏,首先说声抱歉.感谢这一年来大家的阅读和陪伴,这100篇安全文章记录了自己从菜鸡到菜鸟的成长史,该部分知识也花了很 ...

  7. vue基础教程总结篇,用最短的时间入门vue.js(持续更新...)

    目前,vue已经成为前端工程师必会的框架之一,这里简单总结一下,可以让您快速的入门vue,师傅带进门,修行靠个人,最主要的还是自己多动手,多实践,本专栏会持续更新. 1.vue安装教程及简介 2.vu ...

  8. Lua快速入门篇(XLua教程)(Yanlz+热更新+xLua+配置+热补丁+第三方库+API+二次开发+常见问题+示例参考)

                            <Lua热更新> ##<Lua热更新>发布说明: ++++"Lua热更新"开始了,立钻哥哥终于开始此部分的探 ...

  9. Pikachu靶场通关秘籍(持续更新)

    Pikachu靶场通关秘籍(持续更新) 1.暴力破解 1.基于表单的暴力破解 1)观察题目,了解基本内容,确定是基于表单的暴力破解. 2)判断存在暴力破解的可能性,打开Burp准备进行暴力破解,首先设 ...

最新文章

  1. php在没用xdebug等调试工具的情况下如何让调试内容优雅地展现出来?--php数组格式化...
  2. 行将消失的烧瓦匠人:“仿古”热潮下迎新生曙光
  3. codeforces 383D
  4. python在财务上的应用-Python用于财务工作培训
  5. 文科生如何理解深度学习?
  6. 飞畅科技-工业以太网交换机的差异性
  7. C 和 C++字符串详解
  8. 洛谷P2016 战略游戏【树形dp】
  9. 前端python与php_WEB前端、PHP、python这三个学习哪一个比较好?
  10. Tcl Tutorial 笔记10 · list
  11. 旧版本ios软件整理
  12. 网闸可以设置端口映射吗_路由器的外部端口和内部端口映射如何设置?
  13. file_get_contents获取参数并用file_put_contents保存图片
  14. java 四舍六入五成双
  15. Geoserver2.11矢量切片与OL3中的调用展示
  16. 社交+小游戏方案来袭,全方位提升社交APP的活跃留存
  17. 案例九:实现输出1~10中非4的倍数的数字。
  18. 学习编程一年需要花费多少?自学可以成为程序员吗?
  19. 在Linux下编译VLC-Qt
  20. java计算机毕业设计家电仓储管理系统源码+mysql数据库+系统+lw文档+部署

热门文章

  1. 【CSS】常规属性汇总(必备收藏)
  2. acme cadsee 2020
  3. 泰坦尼克号生存率预测(持续更新中,探索性数据分析...)
  4. [转]小米智能家庭套装为什么选择 ZigBee 协议?
  5. 10_动态误差时域校正
  6. 迈向 Grid 二维布局时代
  7. Esp8266 --深入分析官方json解析源码及如何使用json接口解析心知天气
  8. 马云说了:年轻人,你不去创业,不去 旅游
  9. 软件测试质量度量指标
  10. C语言中的pow函数