二次注入

Author Avatar
Aryb1n 7月 17, 2017

sql注入从入门到入门
因为这个二次注入,听说过,也见师傅注过
但还是不太知道这个二次是个什么意思

二次

以前听到的都是关于引号的转义
大意是注册的时候,由于GPC或者其他,我们输入的payload里的单引号被转义了

?username=akak'
mysql> insert into user(uname) vaules ('akak\'');
mysql> select * from user;

+----+-----------+
| id | uname     |
+----+-----------+
|   1|akak'      |
+----+-----------+

这个单引号就进去了,再取出来的时候,就引入了单引号
是不是说这里如果开了magic_qutoes_runtime就可以防止二次注入了???

所以这个二次指的就是第一次不会直接造成危害
再第二次用的时候实现了注入

正文

上面就是正文哈哈哈哈
这次某春秋全国大学生交换flag大赛里有这样的一个题目叫 flag bending machine
是一道二次注入,不过和单引号bypass没有什么关系

刚刚

就在刚刚准备找更多的一些资料,发现了一个ppt叫做web代码安全边缘性问题

网名为5up3rh3i的大佬,拼写了一下,发现好像其实是传说级大佬黑哥
这个ppt里详细的说了一下二次注入

感觉是一份神级资料
原来这个二次是Second attack,ahhhhh~

require一个文件存在错误的话,那么程序就会中断执行了,并显示致命错误
include一个文件存在错误的话,那么程序不会中端,而是继续执行,并显示一个警告错误

以下内容来自上面的ppt,我只是摘抄出来

二次攻击的特点

  • 常常存在漏洞类型的转换
  • 常常存在变量中转

类型1 文件系统函数漏洞转换

<? 
    // vul1.php
    unlink($a);
?>

<? 
    //config.php
    $include = '../';
?>

<? 
    //vul2.php
    include '$include/common.php';
?>

我们用vul1.phpconfig.php删掉,这样子在register_globals=On的情况下就能用vul2.php包含任意文件了

类型2 SQL注入漏洞转换

SQL注入 => Update/Insert => 数据库
数据库 => Select => 其它函数

这个漏洞在第二阶段取出来丢到其他函数的时候触发
举的例子就是先update了一波,但经过escape,防了一波SQL注入
但没有过滤../这些
后来又给select出来了丢到include里,这个时候利用了一波

类型3 preg_replace

mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject)

$subject 是要替换的母串
$pattern 是模式
$replacement 是要替换成的

第一个参数加了修饰符号/e的时候,第二个参数会被当做命令来执行
有些没看懂
另外preg_replace里存在%00截断(是不是现在已经被修复了???)

类型4 编码/解码
就是讲了二次编码造成的洞