(菜鸟一枚,日常记录,写的不对的地方欢迎大家指正)
实验:
1.当mysql注入点为盲注或报错,Union select写入是不能利用的,那么可以通过分隔符写入(SQLMAP的–os-shell命令,所采用的就是这种方式)
2.条件:secure_file_priv支持web目录文件导出;
数据库File权限;
获取物理路径。
3.实验步骤:
1)判断是否存在注入点。
页面仅显示有无用户,无其他报错信息,初步判断用布尔盲注。
无差别,==》不是数字型注入。
真假两种情况回显不一致,==》存在布尔盲注点。
2)尝试用 union select 1, @@datadir #;找到物理路径,但是这是个布尔注入,只返回真假。因为是同一网站,尝试使用上篇文章找到的物理路径来写入webshell。
1' into outfile 'F:\\phpstudy\\MySQL\\data\\ws.php' lines terminated by '<?php phpinfo();?>' #
3)验证:
知识补充:
1.lines-terminated-by:指定行结束符,默认值就是换行符。
用法举例:
SELECT username FROM user WHERE id = 1 into outfile 'D:/1.php' LINES TERMINATED BY 0x3c3f70687020706870696e666f28293b3f3e
在输出每条记录的结尾或开始处插入webshell内容,所以即使只查询一个字段也可以写入webshell内容。lines terminated by 可以理解为 以每行终止的位置添加 xx 内容。
2.#是什么?
它是 MySQL的版本的行注释分隔符。在标准SQL中,行注释分隔符为--
3.sql语句如果只写一句,可以不加;
如果写多条sql语句,必须加;用做结束符号。(因为不加 它误以为是一条sql)
SELECT first_name, last_name FROM users WHERE user_id = '1' and 1=3#';
此处用#注释不会报错,因为后台就一条sql查询语句。
4.为什么127.0.0.1有时候显示WWW网站根目录下的内容,有时显示phpstudy下的所有内容?
和httpd.conf这个配置文件有关,如图: