路由器WEB安全实战-漏洞注入
一、常用的WEB服务端注入
一般来说,WEB注入的对象是网站,常用的是SQL注入和代码注入。其本质是把用户输入的数据当做代码来执行,主要原因是设计时忽略了数据检查或违背了数据与代码分离原则,其发生的两个条件:
1、用户可以控制数据输入;
2、用户输入的数据可以拼接代码,把数据当做代码执行了。
【SQL注入】
$username = $_POST['username'];
$sql = "select * from usertable where username="."'".$username."'"
正常情况下用户输入 ‘Tom’ ,sql为
"select * from usertable where username='Tom'";
但如果用户输入 “Tom' ; drop table usertable--”,sql如下:
"select * from usertable where username='Tom';drop table usertable--";
如果我们的服务端代码,数据库权限没做任何处理,那么结果就是导致数据库表单被删除。
防御SQL注入的手段有:输入数据合法性检测、使用预编译语句、使用安全函数
【代码注入】
代码注入与命令注入都是由一些不安全函数或方法引起的如:eval()、system()
$var = 'varname';
$k = $_GET['tag'];
eval("/$var = $k;");
攻击者可以通过下面Payload实施代码注入:
/index.php?tag=1;phpinfo()
又比如 system()这个函数,可以通过代码注入导致命令注入
$error =system('cat '.$_GET['page_id'],$return_var);
echo $error;
攻击者通过index.php?page_id=loquesea;ls利用system函数执行自己想要的系统命令。
防御对抗代码注入,命令注入,需要禁用一些像eval(),system()等可以执行系统命令的函数,必须要用就需要对用户输入的数据进行严密的检查。
二、路由器WEB注入
路由器WEB注入与上面的代码注入原理类似,要进行注入,首先要找到注入点,我们需要先找到这些不安全的函数调用
基于openwrt路由器的WEB服务一般用lua语言进行控制,不安全的函数有luci.sys.call、luci.util.exec、os.execute等,通过这些函数,lua语言可以直接调用系统执行任何命令
我们首先需要搜索所有调用这些函数的点
然后需要对这些调用点进行逐个分析,先排除那些没有参数传入的点,对有参数传入的查看是否有完备的检查
比如上面红框处的Parent_ctrl_plt.lua 有一个luci.sys.call(cmd)的带参数的调用,我们看看它的源码:
cmd的参数来源于字符拼接,传入的拼接参数是源MAC地址,而且源码中没有对源MAC地址进行合法性检测,因此可以利用此漏洞来执行任何代码
漏洞利用参考:
https://www.right.com.cn/forum/thread-318971-1-1.html
修复此漏洞的方法,就是对源MAC地址做合法性检测
怎么样,寻找WEB漏洞就是这么简单!
颤抖吧,码农们!你们就是薄冰上的行者,稍有不慎就会跌入深渊,一起共勉吧!
评论:13