目录
写在开头
第一步:主机发现与端口扫描
第二步:web渗透分析
第三步:SQL注入
第四步:SSH登录获得初始立足点
第五步:提权
总结与思考
本篇博客还是根据大佬红队笔记的视频进行打靶,详述了打靶的每一步思路,并非复现writeup,读者耐心看完,定会有所收获。打靶过程涉及到关于sqlmap工具的使用、ssh参数补写等。完整打靶思路详见:
「红队笔记」靶机精讲:LampSecurityCTF4 - SQL注入原理,手动注入和SQLmap自动化注入一起呈现。_哔哩哔哩_bilibili 这个靶机比较老旧了,因此打靶相对容易,但整个过程的思路还是值得思考。本文的核心步骤就是发现数据库查询参数->使用sqlmap进行注入->拿到用户名和密码->ssh登录即可。
本文针对的靶机源于vulnhub,详情见:
LAMPSecurity: CTF4 ~ VulnHub
靶机下载链接见:
https://download.vulnhub.com/lampsecurity/ctf4.zip
靶机下载后解压,用vmware打开,设置网络连接为NAT模式,开启靶机即可(界面如下):
常规思路,ip a查看网段和网卡信息,我的kali的ip为192.168.200.131,网段为192.168.200.0/24。然后使用以下几个命令进行扫描。所有的靶机都开局都相似,这里就不详解参数了,具体思路可看
W1R3S详细打靶思路
主机发现
nmap -sn 192.168.200.0/24
发现靶机ip是192.168.200.143,接着进行全端口扫描:
nmap --min-rate -p- 192.168.200.143
探测到了22,25,80,631四个端口,其中631端口已关闭。进行操作系统和服务版本探测:
nmap -sT -sV -O -p22,25,80,631 192.168.200.143
确定是linux系统,然后udp扫描
nmap -sU -p22,25,80,631 192.168.200.143
没发现什么结果,udp端口基本都被过滤,接下来使用nmap自带的漏洞脚本扫描,时间可能较长,我们稍作等待:
nmap --script=vuln -p22,25,80,631 192.168.200.143
没想到仅仅用nmap扫描,尽然能扫描出来这么多漏洞,包括跨站请求伪造csrf、文件遍历、sql注入等 。那web的攻击面还是非常大的
分析端口22,25,80,631的入手点,最可能的还是80,其次我们再看邮件服务25,22应该是最后考虑的地方。631端口已关闭,利用的可能性很低。于是我们从80端口web入手,首先浏览器访问靶机192.168.200.143
可以观察到上图的界面,可以看到网站的上部有几个栏目(Home/Blog/Research/Contact),同时还有个搜索框。Home界面的文字貌似不是英语,读不懂。随便在网站上点一点,看看有啥发现。
点击Blog模块后,有几条博文可供选择。随便选择一个打开,界面如上图,观察url,可发现有id=2的字样,这有可能是数据库查询语句,我们在url中手动修改url的值试试:
当id=5时,成功看到了另外一篇博文,可能id参数的值就是数据库查询的部分。那么是否存在sql注入呢?结合nmap脚本漏洞扫描的结果判断,这是很可能的。
我们在url中的id参数后添加一个单引号' 试试,如果出现了报错信息,那么就可以判断此处确实存在sql注入漏洞。
如上图,果然报错了。那么我们可以使用这个url,用sqlmap进行注入测试。
sqlmap -u 'http://192.168.200.143/index.html?page=blog&title=Blog&id=5' --dbs --dump --batch
其中-u表示后接url,当url中有多个参数时(page、title、id),应当使用引号。--dbs表示枚举所有数据库系统, --dump参数是当发现有数据时自动转储 ,--batch是批处理命令,自动执行整个注入过程,若有交互,使用默认命令即可。使用这样的参数可以高度自动化的进行注入。
结果有很多,在数据库ehks的表user中,成功发现了几个用户名和密码,并对密码的md5进行了自动破解。
这些用户名和密码是登录哪里的呢?直接的想法是ssh登录的账号。那我们就ssh登录靶机试试,使用数据库中的第一个用户名dstevens和密码ilike2surf ,命令如下
ssh [email protected]
结果进入登录不了,这是由于靶机太老了,ssh的版本有问题。不过我们可以指定修改一些参数实现登录。报错提示没有匹配的key exchange方法,靶机的方法是diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1。因此我们可以添加一个参数,把Their offer作为参数的值。问题是参数名是啥呢,我们先输入-o查找额外的参数,然后输入key的首字母k,按下tab键,有许多提示的参数,我们要设置的参数是与key exchange相关的,在这些参数中最有可能的就是KeyAlgorithms(密钥算法),如下图:
因此根据第一次的报错提示,我们添加参数-oKexAlgorithms=diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1 命令如下:
ssh -oKexAlgorithms=diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1 [email protected]
很遗憾,再度报错。提示没有匹配的key type,并给出了靶机的参数为ssh-rsa,ssh-dss 。我们故技重施,添加参数-oHostKeyAlgorithms=ssh-rsa,ssh-dss即可。完整命令:
ssh -oKexAlgorithms=diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1 -oHostKeyAlgorithms=ssh-rsa,ssh-dss [email protected]
输入密码ilike2surf之后成功登录了!拿到了dstevens的shell。
拿到shell之后常规思路,whoami查看当前账户,uname -a查看操作系统版本,ip a或ifconfig查看ip信息,结果网卡信息都无法看到。pwd可以看到当前目录是dstevens的家目录/home/dstevens。
进行提权之前先看看自己是啥权限,使用sudo -l查看,输入密码ilike2surf
sudo /bin/bash
这样就拿到了root权限,打靶完成。
由于靶机是2009年“生产”的,当时的网络安全防护意识还是不足,同时像sqlmap这样的工具还没有诞生,因此在今天看来,这个靶机相对容易(相当于用现代武器打原始人),但整个过程的思路还是值得思考。本文的核心步骤就是发现数据库查询参数->使用sqlmap进行注入->拿到用户名和密码->ssh登录即可。其中ssh登录涉及到一些参数的匹配问题,本文也做了解释。
同时红队笔记大佬还提到,进行渗透测试的过程中,我们不能单纯依赖nmap和sqlmap这种自动化工具,还是要了解漏洞的原理与代码的编写,使用工具表面上方便,但会有很多缺点。比如容易暴露流量特征、难以进行精确的操作、工具有可能被ban等。归根结底,工具只是在我们了解漏洞原理和代码的基础上,加快我们的渗透进程,而不是渗透测试的核心所在。今天的我还不如脚本小子,前路慢慢,任重而道远。
这篇打靶就完成了,以后会继续坚持打靶,学习网安知识并分享。希望读者多多点赞支持!