SQL注入(2):判断注入类型、闭合方式
注入点
注入点就是可以实行注入的地方,通常是一个访问数据库的连接。打开第一个靶机Less-1
本页面的input the ID
即是注入点。在本页面中,我们通过get
方法,在链接中添加?id=
加上一个id,可以与数据库进行通讯,这个就是注入点。
注入点有通过类似于这种get
提交的,也有很多通过post
提交的。
如何判断字符型注入还是数字型注入
数字型一般提交内容为数字,但数字不一定为数字型。虽然我们上面提交的为数字id,但是实际上不一定就为数字型注入,可能是字符串的数字。那么我们怎么判断呢
判断方法:使用and 1=1
和and 1=2
来判断。
我们在id后面分别添加一个and 1=1
和and 1=2
- 如果注入点是字符型,添加
and 1=1
和and 1=2
都可以正常显示 - 如果注入点是数字型,添加
and 1=2
会出现错误,页面不能正常显示
原因:如果是字符型,添加and 1=1
和and 1=2
,会被转换为
1 | http://10.0.0.219/sqli/Less-1/index.php?id='1 and 1=2' |
因此可以正常显示页面。
在less1中,我们添加and 1=1
和and 1=2
都不影响页面正常显示,因此可以判断为字符型注入
而在less2中,我们添加and 1=1
可以正常显示,而and 1=2
发现不能显示,因此可以判定为数字型注入
更简单的方法: 尝试2-1
- 如果是字符型,会回显2的结果
- 如果是数字型会进行运算后,显示计算结果1的回显
原因
导致区别的原因是因为字符型需要闭合符,而数字型不需要。在PHP源码上,他们的区分是这样的
less1:
1 | $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1"; |
less2:
1 | $sql="SELECT * FROM users WHERE id=$id LIMIT 0,1"; |
如何判断闭合方式
常见的闭合方式有:' " ') ")
。那么如何判断的是那种闭合方式呢?
添加?id=1’"
对于Less-1来说,添加?id=1'"
,报错信息为near '"'
,多出一个'
,则闭合符为'
。
对于Less-3来说,同样添加?id=1'"
,报错信息为near '"')
,则闭合符为')
闭合的作用
手工提交闭合符号,结束前一段查询语句,后面即可加入其他语句。
不需要的语句可用--+
或#
或%23
注释掉,例如多出来的'
之类的