注入点

注入点就是可以实行注入的地方,通常是一个访问数据库的连接。打开第一个靶机Less-1

image-20230330153145458

本页面的input the ID即是注入点。在本页面中,我们通过get方法,在链接中添加?id=加上一个id,可以与数据库进行通讯,这个就是注入点。

image-20230330153414742

注入点有通过类似于这种get提交的,也有很多通过post提交的。

如何判断字符型注入还是数字型注入

数字型一般提交内容为数字,但数字不一定为数字型。虽然我们上面提交的为数字id,但是实际上不一定就为数字型注入,可能是字符串的数字。那么我们怎么判断呢

判断方法:使用and 1=1and 1=2来判断。

我们在id后面分别添加一个and 1=1and 1=2

  • 如果注入点是字符型,添加and 1=1and 1=2都可以正常显示
  • 如果注入点是数字型,添加and 1=2会出现错误,页面不能正常显示

原因:如果是字符型,添加and 1=1and 1=2,会被转换为

1
http://10.0.0.219/sqli/Less-1/index.php?id='1 and 1=2'

因此可以正常显示页面。

在less1中,我们添加and 1=1and 1=2都不影响页面正常显示,因此可以判断为字符型注入

而在less2中,我们添加and 1=1可以正常显示,而and 1=2发现不能显示,因此可以判定为数字型注入

image-20230330173807721

image-20230330173725053

更简单的方法: 尝试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 '"',多出一个',则闭合符为'

image-20230330214740500

对于Less-3来说,同样添加?id=1'",报错信息为near '"') ,则闭合符为')

image-20230330215638746

闭合的作用

手工提交闭合符号,结束前一段查询语句,后面即可加入其他语句。

不需要的语句可用--+#%23注释掉,例如多出来的'之类的

image-20230330220126968

image-20230330220109330