SQLインジェクションのジョイントターゲットホストファイルアップロードコントロール

環境の紹介

テスト環境をダウンロードしてください:

https://pentesterlab.com/exercises/from_sqli_to_shell

 

 

2 再生処理

 

1. NAMPオープンポートは、ターゲットIPをスキャン

その後、我々は80のポートへのアクセスを持っている、開いているポート22、80のドローンを理解するためにホストをNmapで見つかった2ポートは、ID = X SQLインジェクションのリスクポイントがある見つけることができます

 

あなたはライブラリをドラッグすると、SQLを経由して3インジェクション攻撃、

 

5によって/cat.php?id=1順

 

 

 POCを行うことにより4によって/cat.php?ID = 2の順序は、4の存在を示します

 

 

 /cat.php?id=-1組合フォトブログして、データベースに現在のデータベースを取得するために1、データベース()、3,4()関数を選択

 

 

/cat.php?id=-1組合1を選択し、TABLE_NAME、3,4- information_schema.tableswhere TABLE_SCHEMAから=「フォトブログ」結合INFORMATION_SCHEMAは、対応するテーブル名ライブラリフォトブログを得、ライブラリ名が取得したテーブルを.tables

 

 

/cat.php?id=-1組合はTABLE_NAME =情報の収集と関連し​​て、「ユーザー」、アクセスユーザテーブルフィールドinformation_schema.columnsから3,4、1、GROUP_CONCAT(COLUMN_NAME)を選択します

 

 

 

/cat.php?id=-1組合は、ユーザ情報テーブルを取得し、ユーザーから1、GROUP_CONCAT(ログイン、0x3a、パスワード)、3,4を選択します

 

 

ここでは、ドラッグすることSalmapライブラリを使用されるように、次のように、コマンドは次のとおりです。

 

>.\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,所以尽量不要在任何地方(如下载链接等)暴露文件上传后的地址。

 

おすすめ

転載: www.cnblogs.com/gendan5/p/11576914.html