mysql防止注入(防止注册表注入式攻击,防止DLL注入的方法)
php怎么防止sql注入
方法一:mysql_real_escape_string — 转义 SQL 语句中使用的字符串中的特殊字符,并考虑到连接的当前字符集 !
方法二:打开magic_quotes_gpc来防止SQL注入。php.ini中有一个设置:magic_quotes_gpc = Off这个默认是关闭的,如果它打开后将自动把用户提交对sql的查询进行转换,比如把 ' 转为 '等,对于防止sql注射有重大作用。
如果magic_quotes_gpc=Off,则使用addslashes()函数。
如下:$sql = "select count(*) as ctr from users where username='".mysql_real_escape_string($username)."' andpassword='". mysql_real_escape_string($pw)."' limit 1";
方法三:自定义函数/*** 防止sql注入自定义方法一* author: xiaochuan* @param: mixed $value 参数值*/function check_param($value=null) {# select|insert|update|delete|'|/*|*|../|./|union|into|load_file|outfile$str = 'select|insert|and|or|update|delete|'|/*|*|../|./|union|into|load_file|outfile';if(!$value) {exit('没有参数!');}elseif(eregi($str, $value)) {exit('参数非法!');}return true;}/*** 防止sql注入自定义方法二* author: xiaochuan* @param: mixed $value 参数值*/function str_check( $value ) {if(!get_magic_quotes_gpc()) {// 进行过滤$value = addslashes($value);}$value = str_replace("_", "_", $value);$value = str_replace("%", "%", $value);return $value;}/*** 防止sql注入自定义方法三* author: xiaochuan* @param: mixed $value 参数值*/function post_check($value) {if(!get_magic_quotes_gpc()) {// 进行过滤$value = addslashes($value);}$value = str_replace("_", "_", $value);$value = str_replace("%", "%", $value);$value = nl2br($value);$value = htmlspecialchars($value);return $value;}
防止注册表注入式攻击,防止DLL注入的方法
由于Users组用户无法写入注册表,因此我们可以创建一个Users组的用户来登录使用。在电脑桌面找到计算机,在其上方点击右键,在弹出的菜单中点击管理。
在服务器管理器窗口左侧依次点击展开配置—本地用户和组,然后选中其下的用户。
在右侧窗口空白处点击右键,在弹出的菜单中点击新用户。
在新用户窗口下方取消勾选用户下次登录时须更改密码,勾选密码永不过期,然后根据规划输入用户名和密码,点击创建。
然后在左侧菜单中选中组,在右侧找到并双击打开Users组,发现新建的这个用户已经加入Users组了,这样就省下了下面的操作。
如果不在Users组里面,点击添加,在选择用户窗口左下方点击高级。
点击立刻查找,在下方搜索结果中找到并选中刚刚新建的用户,然后依次点击确定返回即可,这样也能把用户加入Users组,再把该用户分配使用即可,这样凡是通过Users组的用户登录的系统均无法写入注册表,有效的防止了注册表注入式攻击。
百度大势至电脑文件防泄密系统,在其官网下载,下载完成后解压,在解压的文件中找到大势至电脑文件防泄密系统V14.2.exe安装文件,双击开始安装。
安装根据窗口的提示进行即可,直至安装完成,使用快捷键alt+F2唤出登录框,根据登录窗口下方提示输入初始账号和密码,点击确定登录。
在主界面右侧窗口中找到操作系统控制分类,然后在其下方找到并勾选禁用注册表即可,这样就可以防止注册表注入式攻击,防止DLL注入,是不是很简单。
初此之外,建议勾选禁用设备管理器、禁用组策略、禁用计算机管理、禁用任务管理器、禁用DOS命令,这些不影响电脑的正常使用,还能最大程度保护计算机的安全。
另外设置虽然简单,但是建议把初始登录密码修改掉,防止其他人篡改设置。在主界面右侧窗口下方找到设置,点击其下的登录用户设置。
双击admin用户,在弹出的窗口中根据提示输入新的密码,然后依次点击确定返回主界面即可,这样密码就修改完成了。
设置完成后在右下角找到并点击后台运行,系统自动隐藏到windows后台托管运行,开机即可自动启动。
MySQL报错注入的原理
sqli-labs https://jingyan.baidu.com/article/67662997a0527d54d51b84df.html正常用户访问服务器发送id信息返回正确的id数据。报错注入是想办法构造语句,让错误信息中可以显示数据库的内容;如果能让错误信息中返回数据库中的内容,即实现SQL注入。
常见floor()报错注入方法:Example select count(*) from infomation_schema.tables group by concat((select user()),floor(rand(0)*2);打开MySQL命令框输入命令查看报错信息。
extractvalue()报错注入方法:select extractvalue(1,concat(0x7e,(select user()),0x7e));extractvalue()接收两个参数,第一个XML文档,第二个xpath语句。xpath语句格式错误返回数据。MySQL命令行中测试查看。
updatexml()报错注入方法:select updatexml(1,concat(0x7e,(select user()),0x7e,1);查询出所有库以及security中所有表的信息。
进行手工注入的过程中可以使用burp suite工具配合使用,快速的获取需要的数据。
concat:连接字符串功能 floor:取float的整数值。rand:取0~1之间随机浮点值 group by:根据一个或多个列对结果进行分组并排序功能。该经验仅为学习交流。
MySQL union查询注入
sqli-labs https://jingyan.baidu.com/article/67662997a0527d54d51b84df.html火狐浏览器/HackBar首先打开搭建好的sqli-labs,打开sqli-labs的第一关,进行union查询注入,sqli-labs搭建可查看工具。如图为第一关的Web界面。
首先使用order by确定列数,order by是数据库列进行排序,在hackbar中使用order by二分法进行注入测试发现 当order by 4进行第四列排序时提示未发现第四列,由此我们确定列数为3。
观察页面返回,选取可以显示数据的位置,进行下一步注入;将id=不存在的值,让页面可以返回union select 1,2,3设定的函数显示在页面中。
读取库的信息,确定可注入点,根据上个经验文档手工注入查询语法进行查看所有库的信息。上面页面显示可注入显示为2,3的位置,随便选择一个进行替换语法注入如下图获取所有库的信息,页面返回提示大于1的数据。
可以使用limit语法进行查询所有库的信息,这里使用group_concart将所有的库信息返回为一条语句输出,如下图查询到数据库中所有的库。
读取表的信息,选择security库使用语法进行所有表的信息,这里我们也是用group_concat()显示。如下显示出security库中所有的表信息。
读取表中的字段,我们选择users表进行查询,如下图:读取出users所有列的字段信息。
读取表中的数据,选择其中username,password的值进行查看。
union内部的select语句必须拥有相同数量的列。列也必须拥有相似的数据类型,每条select语句中的列的顺序必须相同。查看重复的值使用union all。
MySQL手工注入查询语法
phpstudy https://jingyan.baidu.com/article/a3f121e4879a86fc9052bb05.html首先我们先下载phpstudy安装,打开MySQL命令行模式,默认用户名密码为root/root。详细安装可查看工具。
查询数据库中所有的库的信息,语法:select schema_name from information_schema.schemata;
查询某个库中的所有表名,Example:查询security库中的表名,select table_name from information_schema.tables where table_schema='security';查询security库中的所有表如下图。
查询某个表中的某列数据,Example:select column_name from information_schema.columns where table_name='users';查询users的多有列如下图。
获取表格中的数据,语法select 列名 from 库名.表名 Example:获取users中username及password的数据:select username,password from security.users;
查询库名或表名等需要加引号,也可将查询目标更改为16进制数值进行查询。查询数据过程中多个列名可以使用逗号隔开进行多列数据查询。