bugku login2 writeup 不使用vps的方法
0x00前言
这个题是sql注入与命令执行相结合的一个题,思路有两个:
一、:sql注入登录web系统,命令执行反弹公网IP监听端口(需要vps),此种方法详见链接:http://www.bugku.com/thread-80-1-1.html
一般人没有vps,因此这种方法比较小众,我做的时候卡在这儿没办法,甚至一度买了体验版vps,后来做梦梦到了第二种思路
0x01正文
首先我们拿到题目http://118.89.219.210:49165/login.php,页面什么也没有,目录扫描了也没有东西,看来是要注入登录,一般注入都会用burp->repeater测试,比较方便,这就看到服务器的返回报文有一段base64解密的字符串
JHNxbD0iU0VMRUNUIHVzZXJuYW1lLHBhc3N3b3JkIEZST00gYWRtaW4gV0hFUkUgdXNlcm5hbWU9JyIuJHVzZXJuYW1lLiInIjsKaWYgKCFlbXB0eSgkcm93KSAmJiAkcm93WydwYXNzd29yZCddPT09bWQ1KCRwYXNzd29yZCkpewp9
解码之后发现是登录页面的一小段源码,通过分析源码中数据库的处理流程发现可以通过输入不存在用户,用union select 构造出指定密码的md5值,从而登录成功,payload大概就是这样username=adminawevcq3vq3rv' union select 1,'25d55ad283aa400af464c76d713c07ad'%23&password=12345678
至此,第一步就完成了,此时进入进程监控系统:
这里就没有任何提示信息了,在输入框输入以下字符串实验:
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结语
这个方法应该对每个人都适用,不会出现硬件障碍。我是个懒人,没有排版,大家看着不清楚的请留言哈哈!!!