0x00前言php
这个题是sql注入与命令执行相结合的一个题,思路有两个:html
1、:sql注入登陆web系统,命令执行反弹公网IP监听端口(须要vps),此种方法详见连接:http://www.bugku.com/thread-80-1-1.htmlweb
通常人没有vps,所以这种方法比较小众,我作的时候卡在这儿没办法,甚至一度买了体验版vps,后来作梦梦到了第二种思路sql
0x01正文shell
首先咱们拿到题目http://118.89.219.210:49165/login.php,页面什么也没有,目录扫描了也没有东西,看来是要注入登陆,通常注入都会用burp->repeater测试,比较方便,这就看到服务器的返回报文有一段base64解密的字符串数据库
JHNxbD0iU0VMRUNUIHVzZXJuYW1lLHBhc3N3b3JkIEZST00gYWRtaW4gV0hFUkUgdXNlcm5hbWU9JyIuJHVzZXJuYW1lLiInIjsKaWYgKCFlbXB0eSgkcm93KSAmJiAkcm93WydwYXNzd29yZCddPT09bWQ1KCRwYXNzd29yZCkpewp9bash
解码以后发现是登陆页面的一小段源码,经过分析源码中数据库的处理流程发现能够经过输入不存在用户,用union select 构造出指定密码的md5值,从而登陆成功,payload大概就是这样username=adminawevcq3vq3rv' union select 1,'25d55ad283aa400af464c76d713c07ad'%23&password=12345678服务器
至此,第一步就完成了,此时进入进程监控系统:测试
这里就没有任何提示信息了,在输入框输入如下字符串实验:spa
123
123;ls
123;cat index.php
发现除了进程信息以外其余的都没有回显,不知道是否是有过滤,又更换命令的分解符号为|,&,&&均没有反应,这样存在两种可能,命令执行了,输出过滤了,或者是命令被过滤了。
基于盲注原理测试123;sleep 5发现返回延迟将近5秒,看来是输出过滤,命令能够执行,若是其余的shell命令没有被过滤,那么此处就至关于getshell,能够执行更多操做;
咱们须要回显,不考虑反向连接的状况,借鉴sql盲注的原理,进行基于时间的命令行盲注,采用bash命令,经过对比字符串中一个一个的字符与页面延迟来肯定咱们须要的内容,关键的注入语句:c=123;a=`ls`;b='a';if [ ${a:0:1} == $b ];then sleep 2;fi
注释:若是ls结果中的第一个字符为a,页面返回延迟两秒,利用这个思路,首先肯定当面目录#ls的文件状况以下(这是我猜解一半的截图,脚本运行完天然就有了整个目录结构,存放flag的文件名是fLag_********.txt):
而后进一步cat flag******.txt来获取最终的flag,放上猜解flag文件内容一半的截图:
0x02结语
这个方法应该对每一个人都适用,不会出现硬件障碍。我是个懒人,没有排版,你们看着不清楚的请留言哈哈!!!