靶机,启动!
第一次写的时候给这背景吓一跳,当时对sql注入是一丁点都不懂,直接就看题解了,(其实现在写别的题也会)现在多少学会一点,所以试试直接上万能密码
' or 1=1 #
登录一下flag就出来了
那么问题来了,为什么这个是万能密码内
知识点
在数据库里,以mysql为例,'单引号是闭合符号,#是注释符号,在mysql中,如果遇到错误的数据类型,他会转换成正确的数据类型,我们输入时,假设输入的是admin和12345,查询语句就会是 select * from table_name where username = 'admin' and password ='12345'
那如果我们输入的是这个万能密码呢?
查询语句就变成了 select * from table_name where username = ' ' or 1=1 #' or password=' 'or 1=1 #'。
在这里,第一和第二个单引号形成了闭合,是一个完整的字符,而or是只要两边有一边为真就全为真,而1=1又恒为真,加上#注释掉了后面的语句,所以最后发到数据库的查询语句就是
select * from where username=' ' or 1=1 #
这样就登录成功了
于是就拿到了flag。
其实这道题确实是easysql了,因为一般不会有sql题可以直接用万能密码。
我对sql题还是比较恐惧的,感觉sql题比一般题的知识点都多。
对这道题,他是数字型的报错,但是别的题可能是字符型的报错,这些等写后面sql题再说吧。
sql的知识点我觉得是很多,但是没办法。