代码审计学习

目录

代码审计

第1题(字符串绕过)

​编辑

第2题(MD5绕过)

方法1

方法2

第3题

第4题 

方法1

方法2

第5题(科学计数法)

第6题(编码绕过)



代码审计

第1题(字符串绕过)

分析:检测是否为字符串,是字符串,die;检测是否含有hehehehehahaha,有就die

解题:

Strpos()绕过,怎么绕?

数组绕过,我们输入

http://10.81.8.126/code/1.php?s[]=hehehehehahaha

flag{c2735cdb-67f3-479d-bf0f-b5a31b2c1a0a}


第2题(MD5绕过)

Sah1()函数,哈希

方法1

应该和MD5函数一样,因为传入的是字符串,找开头为0e的哈希

原理:php是弱类型语言,即便输入的是字符串,但是0e7889开头,就意味着变成了数字,也就是科学计数法1*10的7889次幂

Md5:

240610708:0e462097431906509019562988736854

QLTHNDT:0e405967825401955372549139051580

QNKCDZO:0e830400451993494058024219903391

PJNPDWY:0e291529052894702774557631701704

NWWKITQ:0e763082070976038347657360817689

NOOPCJF:0e818888003657176127862245791911

MMHUWUV:0e701732711630150438129209816536

MAUXXQC:0e478478466848439040434801845361

Sha1:

10932435112: 0e07766915004133176347055865026311692244

aaroZmOk: 0e66507019969427134894567494305185566735

aaK1STfY: 0e76658526655756207688271159624026011393

aaO8zKZF: 0e89257456677279068558073954252716165668

aa3OFF9m: 0e36977786278517984959260394024281014729

0e1290633704: 0e19985187802402577070739524195726831799

 

 不行

?username=aaroZmOk&password=aaK1STfY

为什么不行?

因为是全等于===,加密后不再等于数字0,而是进行了字符串比较了,

上网搜索到碰撞出来的,sha1相同,但源码不同的两个值

a=%25PDF-1.3%0A%25%E2%E3%CF%D3%0A%0A%0A1%200%20obj%0A%3C%3C/Width%202%200%20R/Height%203%200%20R/Type%204%200%20R/Subtype%205%200%20R/Filter%206%200%20R/ColorSpace%207%200%20R/Length%208%200%20R/BitsPerComponent%208%3E%3E%0Astream%0A%FF%D8%FF%FE%00%24SHA-1%20is%20dead%21%21%21%21%21%85/%EC%09%239u%9C9%B1%A1%C6%3CL%97%E1%FF%FE%01%7FF%DC%93%A6%B6%7E%01%3B%02%9A%AA%1D%B2V%0BE%CAg%D6%88%C7%F8K%8CLy%1F%E0%2B%3D%F6%14%F8m%B1i%09%01%C5kE%C1S%0A%FE%DF%B7%608%E9rr/%E7%ADr%8F%0EI%04%E0F%C20W%0F%E9%D4%13%98%AB%E1.%F5%BC%94%2B%E35B%A4%80-%98%B5%D7%0F%2A3.%C3%7F%AC5%14%E7M%DC%0F%2C%C1%A8t%CD%0Cx0Z%21Vda0%97%89%60k%D0%BF%3F%98%CD%A8%04F%29%A1

b=%25PDF-1.3%0A%25%E2%E3%CF%D3%0A%0A%0A1%200%20obj%0A%3C%3C/Width%202%200%20R/Height%203%200%20R/Type%204%200%20R/Subtype%205%200%20R/Filter%206%200%20R/ColorSpace%207%200%20R/Length%208%200%20R/BitsPerComponent%208%3E%3E%0Astream%0A%FF%D8%FF%FE%00%24SHA-1%20is%20dead%21%21%21%21%21%85/%EC%09%239u%9C9%B1%A1%C6%3CL%97%E1%FF%FE%01sF%DC%91f%B6%7E%11%8F%02%9A%B6%21%B2V%0F%F9%CAg%CC%A8%C7%F8%5B%A8Ly%03%0C%2B%3D%E2%18%F8m%B3%A9%09%01%D5%DFE%C1O%26%FE%DF%B3%DC8%E9j%C2/%E7%BDr%8F%0EE%BC%E0F%D2%3CW%0F%EB%14%13%98%BBU.%F5%A0%A8%2B%E31%FE%A4%807%B8%B5%D7%1F%0E3.%DF%93%AC5%00%EBM%DC%0D%EC%C1%A8dy%0Cx%2Cv%21V%60%DD0%97%91%D0k%D0%AF%3F%98%CD%A4%BCF%29%B1

方法2

数组绕过

和MD5函数一样,Sha1()不识别数组,返回NULL

测试

至于为什么password[1],因为有一个判断条件需要username!=password


第3题

我测试代码

我们仔细看我们的传参

如果我们这样写

为什么要写11次,除了索引的问题,还有就是 ,他的赋值是没有索引的赋值,这就必须我们循环11次,并且我们的第11次的索引为10,值必须为hacker!

但是为什么这样也可以?0&1&2&3&4&5&6&7&8&9&10=hacker!

其实你输入什么都行,只要有11个参数,因为索引是从0开始的

也就是说你也可以输入?1&1&1&1&1&1&1&1&1&1&10=hacker!

甚至?A&B&C&D&E&F&G&H&I&J&Q=hacker! 也行

 

老师说,只要循环11次,他的第11次索引就是10

答案:flag{c2735cdb-67f3-479d-bf0f-b5a31b2c1a0a}


第4题 

分析:判断是否为数字,是就die;判断是否大于996,大于就有flag

方法1

数组跳过试试?

成功

我分析数组可以跳过第一个判断,第二个判断我们去自己尝试

空的也行

 可行

方法2

弱类型强制转跳过

原理:字符串'997a'==>数字997


第5题(科学计数法)

分析:

匹配,必须含1个或多个有[A-Za-z0-9],长度不能小于8,大小不能大于8个9

解题:

尝试数组,不行,数组直接匹配不到,换个思路16进制,需要加0x,1亿就是0x575360400,不行。再换,弱类型转换,嗯~也不行

科学计数法1e8跳过,注意是1——e——8,不是艾欧l,是123的1

?check=1e8

1e8=1*10^8=1亿

flag{c2735cdb-67f3-479d-bf0f-b5a31b2c1a0a}


第6题(编码绕过)

分析:

对password进行编码绕过strpos(),编码绕过

进行url编码一次,因为后面有解码

尝试

先16进制编码,并添加%

61 64 6d 69 6e 31 32 33 31 32 33 31 32 33

%61%64%6d%69%6e%31%32%33%31%32%33%31%32%33

但是为什么编码两次可以,不编码也行

猜你喜欢

转载自blog.csdn.net/m0_71274136/article/details/131962251