一个很棒的博文sql注入
文章目录
前期学习知识
1. PHP连接数据库(MySQL)
主要采用mysqli_connnect函数与数据库建立连接,mysqli_connect函数详解可参考菜鸟教程
$con=mysqli_connect(
'127.0.0.1',//主机名
'',//数据库用户名
'',//数据库密码
'',//数据库名
'',//数据库采用端口号,可以不填,默认是3306
);
if(!$con){
//错误提醒
echo "error:connection";
exit;
}
2.与数据库的交互
主要是mysqli_query函数对已经获取的数据库进行操作,mysqli_query函数详解可参考菜鸟教程
好像看到过mysqli_multi_query函数是对于多个数据库指令操作,没仔细去了解,有时间再去看看链接暂时放这里菜鸟教程
输出结果使用到了mysqli_fetch_array函数,详解菜鸟教程
//带参
$username=$_GET['username'];
//获取数据库中的某一个表
$res=mysqli_query(
$con,
"SELECT * FROM USERS WHERE NAME='$username'"//举例,这里放一条正常的数据库增删改查语句都可以。
)
while($row=mysqli_fetch_array($res)){
var_dump($row);
}
3.mysql的一些小知识点
- mysql的注释
#语句
-- 语句
/*语句*/
/*!语句*/ 内联注释,!后如果有版本号,实际版本高于写入版本号则注释成功,若低于或者没有版本号,则注释失败,执行语句。
- mysql的一些表和函数
主要是mysql 的information_schema视图,可以自己打开mysql看看,主要是其中的tables和columns表,注入可能需要用到。tables表中可以通过数据库名(table_schema)查询到该数据库对应的表(table_name),columns可以通过表名(table_name)查询到改表对应的字段值(column_name)。
关于sql注入
在输入信息时携带上一些sql语句,在网站后台拼合输入信息执行查询语句时,执行了携带的sql语句。
1.判断注入方式和闭合方式
参考这篇sql注入方式和闭合方式
- 关于注入方式,这篇可能会更加详细一点,介绍了四种(联合注入、基于错误注入、布尔盲注、延时注入)基本的四种SQL注入方式
- 关于闭合方式,这篇讲得很不错,SQL注入基础 - 判断注入类型及闭合方式。介绍了字符型和数值型,数值型很简单,不用闭合,字符型闭合方式比较多,需要多试,一般是()’’"",以及它们的搭配使用。
2.绕过手段
网站为了防止sql注入会对输入的信息在执行语句前进行一些验证和措施。对于这些验证和措施,我们可以在输入信息中采取一些针对手段来绕过。
参考sql注入绕过,这篇还可以
3.盲注
具体可以参考这篇sql注入盲注,也很不错哦。
4.报错注入
面对一些不会输出查询结果,但是会输出错误信息时使用。
(1).xpath语法错误
主要是运用函数extractvalue和updatexml。
xpath语法可以参考这个菜鸟教程,我暂时理解的就是类似这种/***/***/***/,只出现/.@这几种特殊字符。
- extractvalue(string,string),第一个参数是xml文档的名称,第二个参数是一个xpath格式的字符串。函数作用为在对应的xml文档中返回包含查询的xpath的字符串。当xpath字符串不符合xpath的语法规则时,会报错,报错信息中会输出不符语法规则的xpath字符串。
- updatexml(string,string,string),第一个参数是xml文档的名称,第二个参数是xpath格式字符串,第三个文档是替换查找的结果值。函数作用是用新的值替换查找到xml文档对应内容。同样当xpath字符串不符合xpath语法时,会报错,报错信息中会输出不符语法规则的xpath字符串。
- 如果我们制造一个不和语法的字符串,且把注入语句的输出结果放在这个字符串中,那么就可以做到输出执行结果的效果。